Name: series-workflowng9zr Phase: Succeeded StartedAt: 2026-08-14 20:42:56 +0000 UTC FinishedAt: 2026-08-15 01:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[0] Phase: Succeeded StartedAt: 2026-08-14 20:42:56 +0000 UTC FinishedAt: 2026-08-14 21:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 20:42:56 +0000 UTC FinishedAt: 2026-08-14 21:20:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "409a9bda0429c63f326576cbe6c1f6c4430a8d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "409a9bda0429c63f326576cbe6c1f6c4430a8d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "SMP" ], "series_id": "da54bf81-34b7-4796-b870-80e2d7fe6a4d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_do_misc_fixups" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBTcGVjaWZpY2FsbHksIGl0IGNvcnJlY3RzIHRoZSBSRVggcHJlZml4IGVtaXNzaW9uIGZvciB0aGUgYGFkZGAgaW5zdHJ1Y3Rpb24gd2hlbiByZXNvbHZpbmcgcGVyLUNQVSBhZGRyZXNzZXMgaW50byBleHRlbmRlZCByZWdpc3RlcnMgKGxpa2UgcjgtcjE1KS4gVGhlIHByZXZpb3VzIGVuY29kaW5nIGNhdXNlZCB0aGUgSklUIHRvIGFwcGx5IHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIuXG5cblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgd2hlcmUgdGhlIFJFWCBwcmVmaXggaXMgaW5jb3JyZWN0bHkgZW5jb2RlZCBmb3IgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGlzIGNhdXNlcyB0aGUgSklUIHRvIGVtaXQgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBhZGRzIHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIgYW5kIHJlYWRzIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY291bGQgbGVhZCB0byBhIGtlcm5lbCBjcmFzaCBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBidWcgaW4gQlBGLCBhbmQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmU2OGFkNzk5NWZkMjJkYTlmMzQ4NzY0MmExNmUwMGY4OGQ4OWU5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIxOjE3OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTkzNSw3ICYjNDM7MTkzNSw3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0XHRFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbi1cdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtcbiYjNDM7XHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4gXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4gXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggODExM2ZlYTdiYTg2Yy4uNjRhYzQ5YWQ2N2U2MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC03OSw2ICYjNDM7NzksNyBAQFxuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX25ldGZpbHRlcl9yZXRjb2RlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2JwZl9mYXN0Y2FsbC5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9vcl9qbXAzMl9rLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9wZXJjcHVfYWRkci5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9wcmVjaXNpb24uc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfcHJldmVudF9tYXBfbG9va3VwLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX3ByaXZhdGVfc3RhY2suc2tlbC5oXCYjMzQ7XG5AQCAtMjQwLDYgJiM0MzsyNDEsNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX2N0eCh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX2N0eCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUodm9pZCkgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2JwZl9mYXN0Y2FsbCh2b2lkKSAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2JwZl9mYXN0Y2FsbCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfb3Jfam1wMzJfayh2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfb3Jfam1wMzJfayk7IH1cbiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX3BlcmNwdV9hZGRyKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX3BlcmNwdV9hZGRyKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmVjaXNpb24odm9pZCkgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9wcmVjaXNpb24pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCh2b2lkKSAgIHsgUlVOKHZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJpdmF0ZV9zdGFjayh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJpdmF0ZV9zdGFjayk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTYyZmFlYThlZjkwMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmNcbkBAIC0wLDAgJiM0MzsxLDExNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2ludCBwZXJjcHVfZGF0YSBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0Oyk7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NilcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdFxuJiM0MzsgKiByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvd1xuJiM0MzsgKiB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4gT24geDg2IFI1LCBSNywgUjggYW5kIFI5IGFyZSB0aGUgZXh0ZW5kZWRcbiYjNDM7ICogcmVnaXN0ZXJzLCB3aG9zZSBoaWdoIGJpdCBuZWVkcyBSRVguUiBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBzaXRzIGluXG4mIzQzOyAqIE1vZFJNLnJlZy4gQ2hlY2sgb25lIHByb2dyYW0gcGVyIGV4dGVuZGVkIHJlZ2lzdGVyLCBzaW5jZSBnZXR0aW5nIHRoZVxuJiM0MzsgKiBwcmVmaXggd3JvbmcgcmVzb2x2ZXMgdGhlIGFkZHJlc3MgaW50byB3aGljaGV2ZXIgcmVnaXN0ZXIgc2hhcmVzIHRoZSBsb3dcbiYjNDM7ICogdGhyZWUgYml0cyBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjVcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlZ3M6e3suKn19LCAlcjhcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I1KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHI1ID0gJVtwZXJjcHVfZGF0YV0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1MzIgKikocjUgJiM0MzsgMCk7XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjdcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlZ3M6e3suKn19LCAlcjEzXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yNyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNyA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9ICoodTMyICopKHI3ICYjNDM7IDApO1x0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHI4XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JWdzOnt7Lip9fSwgJXIxNFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjgodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjggPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAqKHUzMiAqKShyOCAmIzQzOyAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByOVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVnczp7ey4qfX0sICVyMTVcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHI5ID0gJVtwZXJjcHVfZGF0YV0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1MzIgKikocjkgJiM0MzsgMCk7XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgcmVnaXN0ZXIgdGhhdCBuZWVkcyBubyBSRVguUiwgdG8gY2F0Y2ggYSBmaXggdGhhdCBvdmVyY29ycmVjdHMuICovXG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjFcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlZ3M6e3suKn19LCAlcmRpXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yMSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9ICoodTMyICopKHIxICYjNDM7IDApO1x0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtwZXJjcHUgYWRkciBkdW1teVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBkdW1teV90ZXN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgUkVYIHByZWZpeCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkIGZvciBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIFRoaXMgY2F1c2VzIHRoZSBKSVQgdG8gZW1pdCBhbiBpbnN0cnVjdGlvbiB0aGF0IGFkZHMgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3RlciBhbmQgcmVhZHMgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjb3VsZCBsZWFkIHRvIGEga2VybmVsIGNyYXNoIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBhIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGJ1ZyBpbiBCUEYsIGFuZCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZTY4YWQ3OTk1ZmQyMmRhOWYzNDg3NjQyYTE2ZTAwZjg4ZDg5ZTllCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTc6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTkzNSw3ICYjNDM7MTkzNSw3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqCiAJCQkJRU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7CiAjaWZkZWYgQ09ORklHX1NNUAogCQkJCS8qIGFkZCAmbHQ7ZHN0Jmd0OywgZ3M6WyZsdDtvZmYmZ3Q7XSAqLwotCQkJCUVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTsKJiM0MzsJCQkJRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpOwogCQkJCUVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTsKIAkJCQlFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpJmFtcDt0aGlzX2NwdV9vZmYsIDQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA4MTEzZmVhN2JhODZjLi42NGFjNDlhZDY3ZTYzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTc5LDYgJiM0Mzs3OSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX25ldGZpbHRlcl9yZXRjb2RlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2JwZl9mYXN0Y2FsbC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9vcl9qbXAzMl9rLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9wZXJjcHVfYWRkci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9wcmVjaXNpb24uc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfcHJldmVudF9tYXBfbG9va3VwLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3ByaXZhdGVfc3RhY2suc2tlbC5oJiMzNDsKQEAgLTI0MCw2ICYjNDM7MjQxLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX25ldGZpbHRlcl9jdHgodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX25ldGZpbHRlcl9jdHgpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUodm9pZCkgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfYnBmX2Zhc3RjYWxsKHZvaWQpICAgICAgICAgeyBSVU4odmVyaWZpZXJfYnBmX2Zhc3RjYWxsKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX29yX2ptcDMyX2sodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX29yX2ptcDMyX2spOyB9CiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX3BlcmNwdV9hZGRyKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX3BlcmNwdV9hZGRyKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByZWNpc2lvbih2b2lkKSAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX3ByZWNpc2lvbik7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAodm9pZCkgICB7IFJVTih2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXApOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJpdmF0ZV9zdGFjayh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJpdmF0ZV9zdGFjayk7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTYyZmFlYThlZjkwMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jCkBAIC0wLDAgJiM0MzsxLDExNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztpbnQgcGVyY3B1X2RhdGEgU0VDKCYjMzQ7LnBlcmNwdSYjMzQ7KTsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdAomIzQzOyAqIHJldXNlcyB0aGUgc2FtZSByZWdpc3Rlciwgc28gdGhlIHJlZ2lzdGVyIHRoZSBhZGRyZXNzIGxhbmRzIGluIGRlY2lkZXMgaG93CiYjNDM7ICogdGhlIEpJVCBlbmNvZGVzIHRoZSBhZGQuIE9uIHg4NiBSNSwgUjcsIFI4IGFuZCBSOSBhcmUgdGhlIGV4dGVuZGVkCiYjNDM7ICogcmVnaXN0ZXJzLCB3aG9zZSBoaWdoIGJpdCBuZWVkcyBSRVguUiBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBzaXRzIGluCiYjNDM7ICogTW9kUk0ucmVnLiBDaGVjayBvbmUgcHJvZ3JhbSBwZXIgZXh0ZW5kZWQgcmVnaXN0ZXIsIHNpbmNlIGdldHRpbmcgdGhlCiYjNDM7ICogcHJlZml4IHdyb25nIHJlc29sdmVzIHRoZSBhZGRyZXNzIGludG8gd2hpY2hldmVyIHJlZ2lzdGVyIHNoYXJlcyB0aGUgbG93CiYjNDM7ICogdGhyZWUgYml0cyBpbnN0ZWFkLgomIzQzOyAqLwomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByNSYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJWdzOnt7Lip9fSwgJXI4JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjUodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjUgPSAlW3BlcmNwdV9kYXRhXSBsbDsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHI1ICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjcmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVnczp7ey4qfX0sICVyMTMmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yNyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyNyA9ICVbcGVyY3B1X2RhdGFdIGxsOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjcgJiM0MzsgMCk7CQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByOCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJWdzOnt7Lip9fSwgJXIxNCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I4KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXI4ID0gJVtwZXJjcHVfZGF0YV0gbGw7CQkJCVwKJiM0MzsJcjAgPSAqKHUzMiAqKShyOCAmIzQzOyAwKTsJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW1fYWRkcihwZXJjcHVfZGF0YSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHI5JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklZ3M6e3suKn19LCAlcjE1JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjkodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjkgPSAlW3BlcmNwdV9kYXRhXSBsbDsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHI5ICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIHJlZ2lzdGVyIHRoYXQgbmVlZHMgbm8gUkVYLlIsIHRvIGNhdGNoIGEgZml4IHRoYXQgb3ZlcmNvcnJlY3RzLiAqLwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByMSYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJWdzOnt7Lip9fSwgJXJkaSYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3IxKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXIxID0gJVtwZXJjcHVfZGF0YV0gbGw7CQkJCVwKJiM0MzsJcjAgPSAqKHUzMiAqKShyMSAmIzQzOyAwKTsJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW1fYWRkcihwZXJjcHVfZGF0YSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2Vsc2UKJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7cGVyY3B1IGFkZHIgZHVtbXkmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgZHVtbXlfdGVzdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5MwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFg4NiBCUEYgSklUIENvbXBpbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQmIzM5O3MgdGhlIHg4NiBCUEYgSnVzdC1Jbi1UaW1lIGNvbXBpbGVyLCByaWdodD8gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIHBlci1DUFUgYWRkcmVzcyBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbiB0aGUgYGRvX2ppdGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHJpZ2h0IGhlcmU6IGEgc3VidGxlIGFsdGVyYXRpb24gaW4gdGhlIGFzc2VtYmx5IG91dHB1dC4gSSBzZWUgYSBjaGFuZ2UgZnJvbSBgRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpYCB0byBgRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpYC4gUmlnaHQgYXdheSBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHg4NiBvcGNvZGVzIGFuZCBhZGRyZXNzaW5nIG1vZGVzLi4uIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBpcyBjcml0aWNhbC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGNoYW5naW5nIGhvdyB0aGUgY29tcGlsZXIgY2FsY3VsYXRlcyB0aGUgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgdGhlIHBlci1DUFUgdmFyaWFibGUuIFdoYXQmIzM5O3MgaXQgZG9pbmc/IEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB0aGUgc2VtYW50aWNzIG9mIHRoYXQgY29kZSBhbmQgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gYWNoaWV2ZS4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gT3IgbWF5YmUgaXQmIzM5O3MgZW5hYmxpbmcgc3VwcG9ydCBmb3IgYSBuZXcgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RU1JVDJcXCgweDY1LCBhZGRfMW1vZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwNQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQWZ0ZXJtYXRoIG9mIGEgQ29kZSBEZXBsb3ltZW50KioKClJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgYWxyZWFkeSBsaXZlIOKAkyBnb29kLiBTYXZlcyBtZSBhIHN0ZXAuIE5vdywgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBxdWlja2VzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEkmIzM5O2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHRoZSBzaWduYXR1cmUgYEVNSVQyKDB4NjUsIGFkZF8ybW9kYC4gVGhpcyBzcGVjaWZpYyBjb21iaW5hdGlvbiBvZiB0aGUgb3AtY29kZSBhbmQgdGhlIHN1YnJvdXRpbmUgbmFtZSBpcyB1c3VhbGx5IGEgZGVhZCBnaXZlYXdheSBmb3IgdGhlIHNlY3Rpb24gaW4gdGhlIGNvZGUgdGhhdCBjb25jZXJucyBtZS4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIGAweDY1YCB0eXBpY2FsbHkgaW5kaWNhdGVzIHRoYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29uZGl0aW9uYWwgYnJhbmNoaW5nLCBvciBwZXJoYXBzIGludGVycnVwdCBoYW5kbGluZyBoYXMgb2NjdXJyZWQuIFRoZSBmYWN0IHRoYXQgYGFkZF8ybW9kYCBpcyBpbnZvbHZlZCBzdWdnZXN0cyBhIGN1c3RvbSBtb2RpZmljYXRpb24gb2YgYSBzdGFuZGFyZCBtYXRoZW1hdGljYWwgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgYSByZWNlbnQgYnVnLiBUaGlzIHNlYXJjaCB3aWxsIGxpa2VseSBsYW5kIG1lIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgbW9zdCBjb25jZW50cmF0ZWQsIGFsbG93aW5nIG1lIHRvIHN0YXJ0IGV2YWx1YXRpbmcgdGhlaXIgZWZmZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VNSVQyXFwoMHg2NSwgYWRkXzJtb2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM3LVx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTM4Olx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzktXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxOAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBkb19qaXRgIEFyb3VuZCBMaW5lIDE5MzgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGRvX2ppdGAgYXJvdW5kIGxpbmUgMTkzOC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgc3BlY2lmaWMgbGluZSBpcyBhIGtleSBwb2ludCB0byBleGFtaW5lIHdpdGhpbiB0aGUgSnVzdC1Jbi1UaW1lIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3Igc29tZXRoaW5nIHNpZ25pZmljYW50IGhlcmU6IHBlcmhhcHMgYSBjcnVjaWFsIHRyYW5zZm9ybWF0aW9uIHN0ZXAsIGEgc3BlY2lmaWMgY29kZSBnZW5lcmF0aW9uIGNhbGwsIGEgYm91bmRhcnkgY29uZGl0aW9uIGNoZWNrLCBvciBtYXliZSBldmVuIGEgcGxhY2Ugd2hlcmUgYSBwYXJ0aWN1bGFyIG9wdGltaXphdGlvbiBpcyBiZWluZyBhcHBsaWVkIChvciwgbW9yZSBjb25jZXJuaW5nbHksICpub3QqIGJlaW5nIGFwcGxpZWQpLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgZHluYW1pYyBjb21waWxhdGlvbiBpdHNlbGYuIEkgd2lsbCBzdGFydCBieSB0cmFjaW5nIHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyB1c2VkIGF0IHRoYXQgbG9jYXRpb24gYW5kIHdoYXQgaXMgYmVpbmcgZG9uZSB3aXRoIHRoZSByZXN1bHRpbmcgZGF0YS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGNvbXBpbGVyJiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBpbnRlcm1lZGlhdGUgY29kZSBnZW5lcmF0aW9uLCBvciB0aGUgZmluYWwgbWFjaGluZSBjb2RlIG91dHB1dC4gVGltZSB0byBkaWcgaW4gYW5kIGRlY2lwaGVyIHRoZSBsb2dpYzsgYSBxdWljayBza2ltIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGxpbmVzIG1pZ2h0IGdpdmUgbWUgdGhlIGJyb2FkZXIgY29udGV4dCB0aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkyMDpcdFxuMTkyMTpcdFx0XHRcdFx0LyogeG9yIHIxMSwgcjExICovXG4xOTIyOlx0XHRcdFx0XHRFTUlUMygweDRELCAweDMxLCAweERCKTtcbjE5MjM6XHRcbjE5MjQ6XHRcdFx0XHRcdC8qIHRlc3QgZHN0X3JlZzMyLCBkc3RfcmVnMzI7IGNoZWNrIGlmIGxvd2VyIDMyLWJpdCBhcmUgemVybyAqL1xuMTkyNTpcdFx0XHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgZHN0X3JlZywgZHN0X3JlZywgZmFsc2UpO1xuMTkyNjpcdFx0XHRcdFx0RU1JVDIoMHg4NSwgYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xuMTkyNzpcdFxuMTkyODpcdFx0XHRcdFx0LyogY21vdmUgcjExLCBkc3RfcmVnOyBpZiBzbywgc2V0IGRzdF9yZWcgdG8gemVybyAqL1xuMTkyOTpcdFx0XHRcdFx0LyogV0FSTklORzogSW50ZWwgc3dhcHBlZCBzcmMvZHN0IHJlZ2lzdGVyIGVuY29kaW5nIGluIENNT1ZjYyAhISEgKi9cbjE5MzA6XHRcdFx0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIEFVWF9SRUcsIGRzdF9yZWcsIHRydWUpO1xuMTkzMTpcdFx0XHRcdFx0RU1JVDMoMHgwRiwgMHg0NCwgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgZHN0X3JlZykpO1xuMTkzMjpcdFx0XHRcdFx0YnJlYWs7XG4xOTMzOlx0XHRcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuMTkzNDpcdFx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4xOTM1Olx0XHRcdFx0XHRFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTtcbjE5MzY6XHQjaWZkZWYgQ09ORklHX1NNUFxuMTkzNzpcdFx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbjE5Mzg6XHRcdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcbjE5Mzk6XHRcdFx0XHRcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcbjE5NDA6XHRcdFx0XHRcdEVNSVQoKHUzMikodW5zaWduZWQgbG9uZylcdTAwMjZ0aGlzX2NwdV9vZmYsIDQpO1xuMTk0MTpcdCNlbmRpZlxuMTk0MjpcdFx0XHRcdFx0YnJlYWs7XG4xOTQzOlx0XHRcdFx0fVxuMTk0NDpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTk0NTpcdFx0XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XG4xOTQ2Olx0XHRcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDApXG4xOTQ3Olx0XHRcdFx0XHRlbWl0X21vdl9yZWcoXHUwMDI2cHJvZyxcbjE5NDg6XHRcdFx0XHRcdFx0ICAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXG4xOTQ5Olx0XHRcdFx0XHRcdCAgICAgZHN0X3JlZywgc3JjX3JlZyk7XG4xOTUwOlx0XHRcdFx0ZWxzZVxuMTk1MTpcdFx0XHRcdFx0ZW1pdF9tb3ZzeF9yZWcoXHUwMDI2cHJvZywgaW5zbi1cdTAwM2VvZmYsXG4xOTUyOlx0XHRcdFx0XHRcdCAgICAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXG4xOTUzOlx0XHRcdFx0XHRcdCAgICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcbjE5NTQ6XHRcdFx0XHRicmVhaztcbjE5NTU6XHRcbjE5NTY6XHRcdFx0XHQvKiBuZWcgZHN0ICovXG4xOTU3Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6XG4xOTU4Olx0XHRcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX05FRzpcbjE5NTk6XHRcdFx0XHRtYXliZV9lbWl0XzFtb2QoXHUwMDI2cHJvZywgZHN0X3JlZyxcbjE5NjA6XHRcdFx0XHRcdFx0QlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0KTtcbjE5NjE6XHRcdFx0XHRFTUlUMigweEY3LCBhZGRfMXJlZygweEQ4LCBkc3RfcmVnKSk7XG4xOTYyOlx0XHRcdFx0YnJlYWs7XG4xOTYzOlx0XG4xOTY0Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9BREQgfCBCUEZfSzpcbjE5NjU6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX1NVQiB8IEJQRl9LOlxuMTk2NjpcdFx0XHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX0s6XG4xOTY3Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9PUiB8IEJQRl9LOlxuMTk2ODpcdFx0XHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6XG4xOTY5Olx0XHRcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9LOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIHRoZSBSRVggUHJlZml4IEVuY29kaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgZG9faml0YCByZWxhdGVkIHRvIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAuIEl0JiMzOTtzIGEgc2ltcGxlLCBidXQgY3J1Y2lhbCwgYWRqdXN0bWVudC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHJlcGxhY2luZyBgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZylgIHdpdGggYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gVGhlIHJlYXNvbj8gRW5jb2RpbmcgdGhlIFJFWCBwcmVmaXggY29ycmVjdGx5LCBlc3BlY2lhbGx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMgbGlrZSByOCB0aHJvdWdoIHIxNSwgd2hpY2ggYXJlIGJleW9uZCB0aGUgdHlwaWNhbCA4IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuCgpUaGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGBhZGRfMW1vZGAgYXBwZWFycyB0byBvbmx5IHVzZSB0aGUgbG93ZXIgMyBiaXRzIG9mIHRoZSBgZHN0X3JlZ2AgdG8gc2V0IHRoZSBNb2RSL00gYnl0ZS4gQnV0IHdhaXQsIGFtIEkgcmlnaHQ/IERvZXMgYGFkZF8xbW9kYCBvbmx5IHNldCB0aGUgUkVYLkIgYml0PyBJdCBzZWVtcyBsaWtlIGBhZGRfMm1vZGAsIGJ5IGFjY2VwdGluZyBib3RoIGEgc291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWdpc3RlciwgaXMgdGhlIGJldHRlciBmaXQgaGVyZSBiZWNhdXNlIGl0IGNvcnJlY3RseSBzZXRzIGJvdGggdGhlIFJFWC5SIGFuZCBSRVguQiBiaXRzIGluIHRoZSBwcmVmaXguIFRoYXQmIzM5O3Mga2V5IGZvciB0aGUgZXh0ZW5kZWQgcmVnaXN0ZXJzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyBvZiBib3RoIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgdG8gdmVyaWZ5IGV4YWN0bHkgaG93IHRoZXkgaGFuZGxlIHRoZSBSRVggcHJlZml4IGFuZCB0aGUgcmVnaXN0ZXIgZW5jb2RpbmcuIEEgcXVpY2sgdmVyaWZpY2F0aW9uIHdpbGwgc29saWRpZnkgdGhlIHJlYXNvbmluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBhZGRfMW1vZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiB0aGVzZSB3ZXJlIG15IHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGBhZGRfMW1vZGAgaW4gdGhlIEJQRiBKSVQgQ29tcGlsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGFkZF8xbW9kYCB0aGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgdGhlIGhlY2sgaXMgdGhpcyBkZWZpbmVkPyYjMzQ7IEdpdmVuIHRoZSBjb250ZXh0LCBteSBtb25leSYjMzk7cyBvbiBpdCBiZWluZyBhIGZ1bmN0aW9uIG9yLCBtb3JlIGxpa2VseSwgYSBtYWNybywgdHVja2VkIGF3YXkgd2l0aGluIHRoZSB4ODYtc3BlY2lmaWMgQlBGIEpJVCBjb21waWxlciBjb2RlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBKSVQgY29tcGlsYXRpb24gaGVscGVycy4gQnV0LCBJIHdvbiYjMzk7dCBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgaXQgYmVpbmcgZGVjbGFyZWQgaW4gYSByZWxhdGVkIGhlYWRlciBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSBhcyB3ZWxsLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF8xbW9kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjQzPXN0YXRpYyBib29sIGlzX2F4cmVnKHUzMiByZWcpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0OC0vKiBBZGQgbW9kaWZpZXJzIGlmICYjMzk7cmVnJiMzOTsgbWFwcyB0byB4ODYtNjQgcmVnaXN0ZXJzIFI4Li5SMTUgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDk6c3RhdGljIHU4IGFkZF8xbW9kKHU4IGJ5dGUsIHUzMiByZWcpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjUwLXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk0OS1cdFx0LyogJiMzOTttb3YgJXJheCwgaW1tMzImIzM5OyBzaWduIGV4dGVuZHMgaW1tMzIgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NTA6XHRcdGIxID0gYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTUxLVx0XHRiMiA9IDB4Qzc7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk3MS1cdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk3MjpcdFx0RU1JVDEoYWRkXzFtb2QoMHg0MCwgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk3My1cdEVNSVQxX29mZjMyKGFkZF8xcmVnKDB4QjgsIGRzdF9yZWcpLCBpbW0zMik7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTk3OD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW02NCh1OCAqKnBwcm9nLCB1MzIgZHN0X3JlZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTk1LVx0XHQvKiBtb3ZhYnNxIHJheCwgaW1tNjQgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5OTY6XHRcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCBhZGRfMXJlZygweEI4LCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTk3LVx0XHRFTUlUKGltbTMyX2xvLCA0KTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTEwMj1zdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTA2LVx0aWYgKGlzNjQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEwNzpcdFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEwOC1cdGVsc2UgaWYgKGlzX2VyZWcocmVnKSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTA5Olx0XHRFTUlUMShhZGRfMW1vZCgweDQwLCByZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTEwLVx0KnBwcm9nID0gcHJvZztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMjEtXHRcdFx0XHQvKiBFbWl0ICYjMzk7YnN3YXAgcmF4JiMzOTsgdG8gc3dhcCA4IGJ5dGVzICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjIyMjpcdFx0XHRcdEVNSVQzKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweDBGLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMjMtXHRcdFx0XHQgICAgICBhZGRfMXJlZygweEM4LCBkc3RfcmVnKSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODItXHRcdFx0fVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyODM6XHRcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODQtXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM4MzM9c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODQyLVx0XHQgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODQzOlx0XHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcdC8qIGNtcCByZHgsZnVuYyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NDQtXHRcdGlmICghaXNfc2ltbTMyKHByb2dzW2FdKSlcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg2My1cdHBpdm90ID0gKGIgLSBhKSAvIDI7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzg2NDpcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1x0XHQvKiBjbXAgcmR4LGZ1bmMgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODY1LVx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYSAmIzQzOyBwaXZvdF0pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzM2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIE1vZHVsZSBEZWZpbml0aW9ucyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgc2FtZSBwYWdlIHdpdGggdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2Nrcy4gQmVmb3JlIEkgc3RhcnQgdHJ5aW5nIHRvIHJlYXNvbiBhYm91dCB0aGUgaW50ZXJhY3Rpb25zIG9yIGhpZ2hlci1sZXZlbCBsb2dpYywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGZvdW5kYXRpb25hbCBkZWZpbml0aW9ucyBhcmUgd2hhdCBJIGV4cGVjdC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUgYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBkZWZpbml0aW9ucy4gVGhpcyBmZWVscyBhbG1vc3QgdG9vIGJhc2ljLCBidXQgYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgYW5kIGl0IHdpbGwgcHJldmVudCBhbnkgbGF0ZXIsIGFuZCBlbWJhcnJhc3NpbmcsIG1pc3Rha2VzLiBXZSBuZWVkIHRoZSBkZXRhaWxzIHRvIGJlIGNsZWFyIGJlZm9yZSB3ZSBjYW4gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0XHRcdCAgQklUKEJQRl9SRUdfRlApKTtcbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0c3RhdGljIGJvb2wgaXNfYXhyZWcodTMyIHJlZylcbiAyNDQ6XHR7XG4gMjQ1Olx0XHRyZXR1cm4gcmVnID09IEJQRl9SRUdfMDtcbiAyNDY6XHR9XG4gMjQ3Olx0XG4gMjQ4Olx0LyogQWRkIG1vZGlmaWVycyBpZiAmIzM5O3JlZyYjMzk7IG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXG4gMjQ5Olx0c3RhdGljIHU4IGFkZF8xbW9kKHU4IGJ5dGUsIHUzMiByZWcpXG4gMjUwOlx0e1xuIDI1MTpcdFx0aWYgKGlzX2VyZWcocmVnKSlcbiAyNTI6XHRcdFx0Ynl0ZSB8PSAxO1xuIDI1MzpcdFx0cmV0dXJuIGJ5dGU7XG4gMjU0Olx0fVxuIDI1NTpcdFxuIDI1NjpcdHN0YXRpYyB1OCBhZGRfMm1vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMilcbiAyNTc6XHR7XG4gMjU4Olx0XHRpZiAoaXNfZXJlZyhyMSkpXG4gMjU5Olx0XHRcdGJ5dGUgfD0gMTtcbiAyNjA6XHRcdGlmIChpc19lcmVnKHIyKSlcbiAyNjE6XHRcdFx0Ynl0ZSB8PSA0O1xuIDI2MjpcdFx0cmV0dXJuIGJ5dGU7XG4gMjYzOlx0fVxuIDI2NDpcdFxuIDI2NTpcdHN0YXRpYyB1OCBhZGRfM21vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMiwgdTMyIGluZGV4KVxuIDI2NjpcdHtcbiAyNjc6XHRcdGlmIChpc19lcmVnKHIxKSlcbiAyNjg6XHRcdFx0Ynl0ZSB8PSAxO1xuIDI2OTpcdFx0aWYgKGlzX2VyZWcoaW5kZXgpKVxuIDI3MDpcdFx0XHRieXRlIHw9IDI7XG4gMjcxOlx0XHRpZiAoaXNfZXJlZyhyMikpXG4gMjcyOlx0XHRcdGJ5dGUgfD0gNDtcbiAyNzM6XHRcdHJldHVybiBieXRlO1xuIDI3NDpcdH1cbiAyNzU6XHRcbiAyNzY6XHQvKiBFbmNvZGUgJiMzOTtkc3RfcmVnJiMzOTsgcmVnaXN0ZXIgaW50byB4ODYtNjQgb3Bjb2RlICYjMzk7Ynl0ZSYjMzk7ICovXG4gMjc3Olx0c3RhdGljIHU4IGFkZF8xcmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnKVxuIDI3ODpcdHtcbiAyNzk6XHRcdHJldHVybiBieXRlICYjNDM7IHJlZzJoZXhbZHN0X3JlZ107XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMDIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlzc2VjdGluZyB0aGUgQXNzZW1ibHk6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFzc2VtYmx5IGdlbmVyYXRpb24sIGFuZCB0aGUgYGFkZF8xbW9kYCBmdW5jdGlvbiBpcyBpbW1lZGlhdGVseSBqdW1waW5nIG91dC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGl0IHNldHMgdGhlIFJFWC5CIGJpdCBpZiB0aGUgYHJlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHRoYXQmIzM5O3MgY3J1Y2lhbCBmb3IgYWRkcmVzc2luZyByZWdpc3RlcnMgYmV5b25kIHRoZSBzdGFuZGFyZCBvbmVzLCBhIGtleSBhc3BlY3Qgb2YgeDg2LTY0LgoKTm93LCBgYWRkXzJtb2RgIGlzIHNpbWlsYXIsIGhhbmRsaW5nIHRoZSBSRVggcHJlZml4IGJ1dCBzbGlnaHRseSBtb3JlIGNvbXBsZXg7IGl0IHNldHMgYm90aCBSRVguQiBpZiBgcjFgIGlzIGV4dGVuZGVkICphbmQqIFJFWC5SIGlmIGByMmAgaXMuIFRoZSBvcmlnaW5hbCBDIGNvZGUgc25pcHBldCBpcyB0aGUgY3J1eDoKCmBgYGMKCQkJCS8qIGFkZCAmbHQ7ZHN0Jmd0OywgZ3M6WyZsdDtvZmYmZ3Q7XSAqLwoJCQkJRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpOwoJCQkJRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpOwoJCQkJRU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKSZhbXA7dGhpc19jcHVfb2ZmLCA0KTsKYGBgCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgYXNzZW1ibGluZyBhbiBgYWRkIGRzdCwgZ3M6W29mZl1gIGluc3RydWN0aW9uIC0gdGhlICYjMzQ7ZHN0JiMzNDsgaXMgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLCBhbmQgJiMzNDtnczpbb2ZmXSYjMzQ7IGlzIG1lbW9yeSBhZGRyZXNzZWQgcmVsYXRpdmUgdG8gdGhlIEdTIHNlZ21lbnQuIFRoZSBvcGNvZGUgZm9yIGFuIGBBREQgci9tNjQgdG8gcjY0YCBpbnN0cnVjdGlvbiBpcyBgMHgwM2AuIFRoZSBrZXkgdG8gdGhlIGluc3RydWN0aW9uIGlzIGluIHRoZSBzZWNvbmQgbGluZSBvZiBjb2RlLCB0aGUgYEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KWAgY2FsbCwgd2hlcmUgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBjYWxjdWxhdGVzIHRoZSBNb2RSL00gYnl0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBgYWRkXzJyZWdgIGZ1bmN0aW9uIHByZWNpc2VseS4gSXQmIzM5O3MgdGhlIGtleSB0byBjb3JyZWN0bHkgZW5jb2RpbmcgdGhpcyBpbnN0cnVjdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBleHRlbmRlZCByZWdpc3RlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzY6XHQvKiBFbmNvZGUgJiMzOTtkc3RfcmVnJiMzOTsgcmVnaXN0ZXIgaW50byB4ODYtNjQgb3Bjb2RlICYjMzk7Ynl0ZSYjMzk7ICovXG4gMjc3Olx0c3RhdGljIHU4IGFkZF8xcmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnKVxuIDI3ODpcdHtcbiAyNzk6XHRcdHJldHVybiBieXRlICYjNDM7IHJlZzJoZXhbZHN0X3JlZ107XG4gMjgwOlx0fVxuIDI4MTpcdFxuIDI4MjpcdC8qIEVuY29kZSAmIzM5O2RzdF9yZWcmIzM5OyBhbmQgJiMzOTtzcmNfcmVnJiMzOTsgcmVnaXN0ZXJzIGludG8geDg2LTY0IG9wY29kZSAmIzM5O2J5dGUmIzM5OyAqL1xuIDI4MzpcdHN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXG4gMjg0Olx0e1xuIDI4NTpcdFx0cmV0dXJuIGJ5dGUgJiM0MzsgcmVnMmhleFtkc3RfcmVnXSAmIzQzOyAocmVnMmhleFtzcmNfcmVnXSBcdTAwM2NcdTAwM2MgMyk7XG4gMjg2Olx0fVxuIDI4NzpcdFxuIDI4ODpcdC8qIFNvbWUgMS1ieXRlIG9wY29kZXMgZm9yIGJpbmFyeSBBTFUgb3BlcmF0aW9ucyAqL1xuIDI4OTpcdHN0YXRpYyB1OCBzaW1wbGVfYWx1X29wY29kZXNbXSA9IHtcbiAyOTA6XHRcdFtCUEZfQUREXSA9IDB4MDEsXG4gMjkxOlx0XHRbQlBGX1NVQl0gPSAweDI5LFxuIDI5MjpcdFx0W0JQRl9BTkRdID0gMHgyMSxcbiAyOTM6XHRcdFtCUEZfT1JdID0gMHgwOSxcbiAyOTQ6XHRcdFtCUEZfWE9SXSA9IDB4MzEsXG4gMjk1Olx0XHRbQlBGX0xTSF0gPSAweEUwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIwOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDYzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBKSVQgQnVnIGFuZCBJdHMgRml4KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSYjMzk7dmUgZ290IGEgbWFqb3IgaXNzdWUuIFRoZSBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgIGluc3RydWN0aW9uLi4uIHRoaXMgY2xlYXJseSBzZXRzIGBkc3RfcmVnYCBhcyB0aGUgZGVzdGluYXRpb24sIGJ1dCB0aGUga2V5IGlzIHRoYXQgYGRzdF9yZWdgIGVuZHMgdXAgaW4gdGhlIGByZWdgIGZpZWxkIG9mIHRoZSBNb2RSL00gYnl0ZS4gVGhhdCBmaWVsZCBpcyBleHRlbmRlZCBieSB0aGUgUkVYLlIgYml0LiBCdXQsIGxvb2tpbmcgYXQgdGhlICpvcmlnaW5hbCogY29kZSwgaXQgd2FzIHVzaW5nIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAuIFRoYXQgZnVuY3Rpb24gc2V0cyBSRVguQiBpZiBgZHN0X3JlZ2AgaXMgZXh0ZW5kZWQuIEJ1dCBob2xkIG9uLCBSRVguQiBleHRlbmRzIHRoZSAqci9tKiBmaWVsZCwgKm5vdCogdGhlIGByZWdgIGZpZWxkISBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIGNvbmZ1c2luZyBiZWNhdXNlIG9mIHRoZSBpbnRlcmFjdGlvbiBvZiBNb2RSL00gYW5kIFNJQiBieXRlcy4KCk5vdywgd2l0aCBhIE1vZFIvTSBvZiBgMHgwNGAsIHdlIGtub3cgdGhlcmUmIzM5O3MgYSBTSUIgYnl0ZSAod2hpY2ggaXMgYDB4MjVgIGluIHRoaXMgY2FzZSkuIFRoZSBTSUIgYnl0ZSBtZWFucyBgZGlzcDMyYCB3aXRoIG5vIGJhc2Ugb3IgaW5kZXgsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBKSVQsIHNvIHRoZSBgci9tYCBmaWVsZCBpc24mIzM5O3QgYWN0dWFsbHkgYSByZWdpc3RlciwgaXQganVzdCBpbXBsaWVzIGAxMDBgIChTSUIpLiBTZXR0aW5nIFJFWC5CICp3b3VsZCogY2hhbmdlIHRoZSBTSUIgYnl0ZSYjMzk7cyBiYXNlIHJlZ2lzdGVyLCBJIHRoaW5rLiBJZiBSRVguQiBpcyBzZXQgd2l0aCBNb2RSL00gYDA0YCwgdGhlbiB0aGUgU0lCIGJhc2UgaXMgZXh0ZW5kZWQuIFRoZSBTSUIgYnl0ZSBpcyBgMHgyNWAgKDAwIDEwMCAxMDEpLCB3aGVyZSB0aGUgYmFzZSBpcyBgMTAxYCAoUkJQL2Rpc3AzMikuIElmIFJFWC5CIGlzIHNldCwgdGhpcyBiYXNlIGJlY29tZXMgYDExMDFgIChSMTMpLgoKU28sIHRoZSBpc3N1ZSBpcywgaW5zdGVhZCBvZiB3cml0aW5nIHRvL3JlYWRpbmcgZnJvbSBgZGlzcDMyYCwgaXQgd291bGQgYmUgd3JpdGluZyB0by9yZWFkaW5nIGZyb20gYFtSMTMgJiM0MzsgZGlzcDMyXWAhIEFuZCwgcmVtZW1iZXIsIFJFWC5SICp3YXNuJiMzOTt0KiBzZXQsIHNvIGBkc3RfcmVnYCBnb3QgdHJ1bmNhdGVkIHRvIGl0cyBsb3dlciAzIGJpdHMuIFRoaXMgaXMgYSBkaXNhc3RlciEgRm9yIGV4YW1wbGUsIGlmIGBkc3RfcmVnYCBpcyBSOCAoZXh0ZW5kZWQgUjApLCB0aGUgY29kZSB3b3VsZCBpbmNvcnJlY3RseSB3cml0ZSB0byBSMCAoUkFYKSwgYW5kIHRoZSByZWFkIHdvdWxkIGJlIGZyb20gYGdzOltSMTMgJiM0MzsgZGlzcDMyXWAgaW5zdGVhZCBvZiBgZ3M6W2Rpc3AzMl1gLiBUaGlzIGlzIGEgaHVnZSBidWcgaW4gdGhlIEpJVCEKClRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHVzaW5nIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIGBhZGRfMm1vZGAgaXMgbXVjaCBiZXR0ZXIgYmVjYXVzZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgUkVYIHByZWZpeGVzLiBJdCBzZXRzIFJFWC5CIGlmIHRoZSBmaXJzdCByZWdpc3RlciAoYHIxYCwgd2hpY2ggaXMgMCkgaXMgZXh0ZW5kZWQsICphbmQqIFJFWC5SIGlmIHRoZSBzZWNvbmQgcmVnaXN0ZXIgKGBkc3RfcmVnYCkgaXMgZXh0ZW5kZWQuIFRoaXMgaXMgdGhlIGNvcnJlY3QgYmVoYXZpb3IgYmVjYXVzZSBSRVguUiBpcyBuZWVkZWQgZm9yIGBkc3RfcmVnYCBpbiB0aGlzIGNhc2UsIGFuZCBSRVguQiBpcyBjb3JyZWN0bHkgbm90IHNldC4KClRoaXMgaXMgYWJzb2x1dGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBBbnkgaW5zdHJ1Y3Rpb24gYmVpbmcgSklUdGVkIHZpYSB0aGlzIGNvZGUgY291bGQgYmUgYnJva2VuLiBEZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmchIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAgaXMsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBpbnN0cnVjdGlvbiB0aGlzIGJ1ZyBpbXBhY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG1vcmUgYnJvYWRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19tb3ZfcGVyY3B1X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVx0XHRcdFx0YnJlYWs7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkzMzpcdFx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzNC1cdFx0XHRcdC8qIG1vdiBcdTAwM2Nkc3RcdTAwM2UsIFx1MDAzY3NyY1x1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIERvd24gYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgLiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbiwgb3IgcG9zc2libHkgYSBtYWNybywgcmVsYXRlZCB0byBpbnN0cnVjdGlvbiBhbmFseXNpcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbW92YCBpbnN0cnVjdGlvbnMgYW5kIHBvdGVudGlhbGx5IHNvbWV0aGluZyB0byBkbyB3aXRoIHBlci1DUFUgYWRkcmVzc2luZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8ganVzdCAqZmluZCogdGhlIGRhbW4gdGhpbmcuIFdoZXJlIGlzIGl0IGRlZmluZWQ/IElzIGl0IGluIGEgaGVhZGVyIGZpbGU/IEEgQyBmaWxlPyBJcyBpdCBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZT8gSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyAtIGBncmVwYCwgYGZpbmRgLCBvciBtYXliZSBhIHNvdXJjZSBjb2RlIG5hdmlnYXRpb24gdG9vbCB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24uIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCAqaG93KiB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCAqd2hhdCogaXQmIzM5O3MgYWN0dWFsbHkgbG9va2luZyBmb3IgaW4gYW4gaW5zdHJ1Y3Rpb24uIE9uY2UgSSBoYXZlIHRoZSBkZWZpbml0aW9uLCBJIGNhbiBzdGFydCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19tb3ZfcGVyY3B1X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTMwMj1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUtXHRcdFx0YnJlYWs7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMzU2Olx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU3LVx0XHRcdGlmIChkc3QgIT0gc3JjKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNjE6XHRcdFx0aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKFx1MDAyNmluc25baV0pKSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4NS1cdFx0XHRicmVhaztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVx0XHRcdGlmIChyZCAhPSBycylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXHRcdFx0XHRicmVhaztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjAyOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODE1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEluc3RydWN0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIG1hY3JvLiBJIGtub3cgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UgaGFuZGxlIHBlci1DUFUgdmFyaWFibGVzIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgd29yayB3aXRoLi4uIHdlbGwsIHlvdSBrbm93LCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gZWZmaWNpZW50IEJQRiBieXRlY29kZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb24uIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHNwZWNpZmljYWxseSwgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIG1hY3JvIHRvIGVuY2Fwc3VsYXRlIHRoZSBsb2dpYyBmb3IgaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBCUEYgaW5zdHJ1Y3Rpb25zIHRoYXQgcmVwcmVzZW50IGEgbW92ZSBvcGVyYXRpb24gaW52b2x2aW5nIGEgcGVyLUNQVSB2YXJpYWJsZSYjMzk7cyBhZGRyZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHByb3Blcmx5IGludGVycHJldCBCUEYgYnl0ZWNvZGUuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCBtYXliZSBjaGVja2luZyBmb3Igc3BlY2lmaWMgb3Bjb2RlIGNvbWJpbmF0aW9ucyBhbmQgcmVnaXN0ZXIgdXNhZ2UuIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMgd2l0aCB0aGlzIHN0dWZmLCBvZiBjb3Vyc2UsIHNvIEkmIzM5O20gcHJlcGFyZWQgZm9yIHNvbWUgcG90ZW50aWFsIGJpdHdpc2Ugb3BlcmF0aW9ucyBvciBwb2ludGVyIGFyaXRobWV0aWMgY2hlY2tzIHdpdGhpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGlzIGhhbmRsZXMgdGhlIGRpZmZlcmVudCB2YXJpYXRpb25zIG9mIHBlci1jcHUgYWNjZXNzLCBzdWNoIGFzIHZpYSB0aGUgYFBFUkNQVV9HRVRgIG1hY3JvLCBvciBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIGFycmF5IGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdFx0LmltbSAgID0gMCB9KVxuIDIwMTpcdFxuIDIwMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gMjAzOlx0e1xuIDIwNDpcdFx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xuIDIwNTpcdH1cbiAyMDY6XHRcbiAyMDc6XHQvKiBTaG9ydCBmb3JtIG9mIG1vdiwgZHN0X3JlZyA9IGltbTMyICovXG4gMjA4Olx0XG4gMjA5Olx0I2RlZmluZSBCUEZfTU9WNjRfSU1NKERTVCwgSU1NKVx0XHRcdFx0XHRcXFxuIDIxMDpcdFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcdFx0XHRcdFx0XFxcbiAyMTE6XHRcdFx0LmNvZGUgID0gQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LLFx0XHRcXFxuIDIxMjpcdFx0XHQuZHN0X3JlZyA9IERTVCxcdFx0XHRcdFx0XFxcbiAyMTM6XHRcdFx0LnNyY19yZWcgPSAwLFx0XHRcdFx0XHRcXFxuIDIxNDpcdFx0XHQub2ZmICAgPSAwLFx0XHRcdFx0XHRcXFxuIDIxNTpcdFx0XHQuaW1tICAgPSBJTU0gfSlcbiAyMTY6XHRcbiAyMTc6XHQjZGVmaW5lIEJQRl9NT1YzMl9JTU0oRFNULCBJTU0pXHRcdFx0XHRcdFxcXG4gMjE4Olx0XHQoKHN0cnVjdCBicGZfaW5zbikge1x0XHRcdFx0XHRcXFxuIDIxOTpcdFx0XHQuY29kZSAgPSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9LLFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEluc3RydWN0aW9uIEdlbmVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQlBGIGluc3RydWN0aW9uLCBzcGVjaWZpY2FsbHkgYEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWGAgd2l0aCBgb2ZmID09IEJQRl9BRERSX1BFUkNQVWAuIEkgcmVjb2duaXplIHRoaXMgcGF0dGVybjsgaXQmIzM5O3Mgc29tZXRoaW5nIHRoZSB2ZXJpZmllciBnZW5lcmF0ZXMgb3IgdXNlcyBpbnRlcm5hbGx5IHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoZSBjb250ZXh0IGlzIHRoaXMgbmV3IHRlc3QsIGB2ZXJpZmllcl9wZXJjcHVfYWRkci5jYCwgd2hpY2ggdXRpbGl6ZXMgYHI1ID0gJVtwZXJjcHVfZGF0YV0gbGw7IHIwID0gKih1MzIgKikocjUgJiM0MzsgMCk7YC4gV2FpdCBhIHNlY29uZOKApiB0aGF0IGByNSA9ICVbcGVyY3B1X2RhdGFdIGxsYCBsb29rcyBhIGxvdCBsaWtlIGFuIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb24uCgpUaGUgdGVzdCYjMzk7cyBjb21tZW50IGlzIGtleSBoZXJlOiAmIzM0O0FuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvdyB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4mIzM0OyBTbywgdGhlIHZlcmlmaWVyIGlzIGVpdGhlciByZXBsYWNpbmcgdGhlIGBsZF9pbW02NGAgb3IgZm9sbG93aW5nIGl0IHdpdGggdGhpcyBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbi4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHdoZXJlIGBCUEZfQUREUl9QRVJDUFVgIGlzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSB2ZXJpZmllciYjMzk7cyBjb2RlLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHNlcXVlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQUREUl9QRVJDUFUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Rpc2FzbS5jPTE2OT1zdGF0aWMgYm9vbCBpc19hZGRyX3NwYWNlX2Nhc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZGlzYXNtLmMtMTc2LSAqIGRzdF9yZWcgPSBzcmNfcmVnICYjNDM7IFx1MDAzY3BlcmNwdV9iYXNlX29mZlx1MDAzZVxua2VybmVsL2JwZi9kaXNhc20uYzoxNzc6ICogQlBGX0FERFJfUEVSQ1BVIGlzIHVzZWQgYXMgYSBzcGVjaWFsIGluc24tXHUwMDNlb2ZmIHZhbHVlLlxua2VybmVsL2JwZi9kaXNhc20uYy0xNzgtICovXG5rZXJuZWwvYnBmL2Rpc2FzbS5jOjE3OTojZGVmaW5lIEJQRl9BRERSX1BFUkNQVVx0KC0xKVxua2VybmVsL2JwZi9kaXNhc20uYy0xODAtXG5rZXJuZWwvYnBmL2Rpc2FzbS5jPTE4MT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvZGlzYXNtLmMtMTgyLXtcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTgzOlx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xua2VybmVsL2JwZi9kaXNhc20uYy0xODQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgQlBGIHZlcmlmaWVyIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBwZXItQ1BVIGFkZHJlc3MgbWFuaXB1bGF0aW9uLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIHByZXNlbmNlIG9mIGBCUEZfQUREUl9QRVJDUFVgIG9yLCBldmVuIGJldHRlciwgYSBmdW5jdGlvbiBsaWtlIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAuIFRob3NlIHdpbGwgYmUgbXkga2V5IGluZGljYXRvcnMuIFRoaXMgc2hvdWxkIGdldCBtZSByaWdodCB0byB0aGUgaGVhcnQgb2YgaG93IGl0IHZhbGlkYXRlcyBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBwZXItQ1BVIGRhdGEuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gc3RhcnQsIGFzIEkga25vdyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0FERFJfUEVSQ1BVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEJQRiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gZm9yIGBCUEZfQUREUl9QRVJDUFVgLiBJICp0aG91Z2h0KiBpdCB3YXMgaW4gYGtlcm5lbC9icGYvZGlzYXNtLmNgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgaXQmIzM5O3MgbW9yZSBsaWtlbHkgaW4gb25lIG9mIHRoZSBoZWFkZXIgZmlsZXMsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkmIzM5O2QgYmV0IGl0JiMzOTtzIHR1Y2tlZCBhd2F5IGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBvciwgZXZlbiBtb3JlIGxpa2VseSwgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAuIEdvdHRhIGNoZWNrIHRob3NlIGxvY2F0aW9ucyBmaXJzdC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGZ1bmRhbWVudGFsIEJQRiBkZWZpbml0aW9ucyB1c3VhbGx5IHJlc2lkZSwgYXQgdGhlIHZlcnkgY29yZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aG9zZSBpbmNsdWRlcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQUREUl9QRVJDUFUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTg5LSAqIGRzdF9yZWcgPSBzcmNfcmVnICYjNDM7IFx1MDAzY3BlcmNwdV9iYXNlX29mZlx1MDAzZVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxOTA6ICogQlBGX0FERFJfUEVSQ1BVIGlzIHVzZWQgYXMgYSBzcGVjaWFsIGluc24tXHUwMDNlb2ZmIHZhbHVlLlxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xOTEtICovXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjE5MjojZGVmaW5lIEJQRl9BRERSX1BFUkNQVVx0KC0xKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xOTMtXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xOTgtXHRcdC5zcmNfcmVnID0gU1JDLFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxOTk6XHRcdC5vZmYgICA9IEJQRl9BRERSX1BFUkNQVSxcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDAtXHRcdC5pbW0gICA9IDAgfSlcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTIwMj1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDMte1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDQ6XHRyZXR1cm4gaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTk1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgQlBGX01PVjY0X1BFUkNQVV9SRUcgVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBpcyBiZWluZyBsZXZlcmFnZWQuIEkgd2FudCB0byBzZWUgdGhpcyBpbnN0cnVjdGlvbiBpbiBhY3Rpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgZ29pbmcgdG8gYmUgYSBxdWljaywgdGFyZ2V0ZWQgY29kZSBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBsaWtlbHkgaW50ZXJhY3Rpbmcgd2l0aCBwZXItQ1BVIGRhdGEsIHdoaWNoIGlzIHdoYXQgdGhpcyBvcGNvZGUgc2lnbmlmaWVzLiBJIHNob3VsZCBleHBlY3QgdG8gZmluZCB0aGlzIGluc3RydWN0aW9uIGluIHBsYWNlcyB0aGF0IGFyZSBkZWFsaW5nIHdpdGggbWV0cmljcyBjb2xsZWN0aW9uLCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHBlci1DUFUgcmVzb3VyY2UgdHJhY2tpbmcgYW5kIGFjY2Vzcy4gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBpbnRvIHRyYWNpbmcgcHJvZ3JhbXMsIG5ldHdvcmsgZmlsdGVyIHByb2dyYW1zLiBUaGlzIG9wY29kZSBpcyBwcmV0dHkgc3BlY2lmaWMsIHNvIGEgc3RyYWlnaHRmb3J3YXJkIGdyZXAgc2hvdWxkIGRvIHRoZSB0cmljayB0byBzZWUgd2hhdCBpbnRlcmVzdGluZyBwcm9ncmFtcyBhcmUgd3JpdHRlbiB0aGF0IG1ha2UgdXNlIG9mIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTU9WNjRfUEVSQ1BVX1JFRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJyYXltYXAuYz0yOTQ9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzE4LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MzE5Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTMyMC1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTAzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjMtXHRcdFx0aW5zbl9idWZbMF0gPSBpbnNuWzFdO1xua2VybmVsL2JwZi9maXh1cHMuYzoxODY0Olx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVx0XHRcdGNudCA9IDI7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTc2LVx0XHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3B1X251bWJlcik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxNzc6XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzgtXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5OC1cdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmN1cnJlbnRfdGFzayk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxOTk6XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMDAtXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDE0PXN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDI3LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDI4Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjQyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyODAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEpJVCBDb21waWxlciBCdWcgaW4geDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGFuZCBpdCBzZWVtcyBsaWtlIGBCUEZfTU9WNjRfUEVSQ1BVX1JFR2AgaXMgY3J1Y2lhbCBpbiBgYnBmX2RvX21pc2NfZml4dXBzYC4gSXQmIzM5O3MgcmlnaHQgdGhlcmUsIHBhdGNoaW5nIHVwIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBlci1DUFUgbWFwcy4gVGhlIHRlc3QgY29kZSBjb21tZW50LCAmIzM0O0FuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsJiMzNDsgcGVyZmVjdGx5IGxpbmVzIHVwIHdpdGggdGhpcy4KClNvLCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgaGFwcGVuaW5nOiBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtb3ZfcGVyY3B1X2FkZHJgIGlzIEpJVHRlZCwgYW5kIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBoYXBwZW5zIHRvIGJlIGFuIGV4dGVuZGVkIHJlZ2lzdGVyLCBsaWtlIFI4LVIxNSwgdGhlIGdlbmVyYXRlZCBpbnN0cnVjdGlvbiBpcyBtZXNzZWQgdXAuIEluc3RlYWQgb2YgYWRkaW5nIHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgaW50ZW5kZWQgZXh0ZW5kZWQgcmVnaXN0ZXIsIGl0JiMzOTtzIGFkZGluZyBpdCB0byB0aGUgbG93ZXIgcGFydCBvZiB0aGF0IHJlZ2lzdGVyIChSQVggaW5zdGVhZCBvZiBSOCwgZm9yIGV4YW1wbGUpLiBUaGlzIG1lYW5zIHRoZSBKSVQgY29tcGlsZXIgaXMgcmVhZGluZyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIGFuZCBpdCYjMzk7cyBhbHNvIGNoYW5naW5nIHRoZSBTSUIgYmFzZSByZWdpc3RlciB3aGljaCBvbmx5IGFtcGxpZmllcyB0aGlzIGlzc3VlLgoKVGhpcyBpcyBhIHNlcmlvdXMgaXNzdWUuIEl0IG1lYW5zIHRoZSBCUEYgcHJvZ3JhbSByZWFkcyBmcm9tIG9yIHdyaXRlcyB0byB0aGUgd3JvbmcgbWVtb3J5IGFkZHJlc3MsIHdoaWNoIGNhbiBjYXVzZSBhIGtlcm5lbCBjcmFzaCBvciwgd29yc2UsIGEgcHJpdmlsZWdlIGVzY2FsYXRpb24uIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBjb25maXJtIGFuZCBleHBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaXNzdWUuCgpUbyBmdXp6IHRoaXMgZWZmZWN0aXZlbHksIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gQlBGIHByb2dyYW1zIHRoYXQgYXJlIGxldmVyYWdpbmcgcGVyLUNQVSBtYXBzIG9yIHZhcmlhYmxlcy4gQW5kLCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzZXMgYXJlIGxvYWRlZCBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAoUjgtUjE1KS4gVGhlIGZpeCwgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHNob3VsZCBiZSBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGRvX2ppdGAgZnVuY3Rpb24sIGFuZCBtYXliZSBgYnBmX2ludF9qaXRfY29tcGlsZWAuCgpUaW1lIHRvIGNoZWNrIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgLiBJJiMzOTtsbCBuZWVkIGBDT05GSUdfQlBGX0pJVGAsIG9idmlvdXNseS4gQW5kIHNpbmNlIHRoZSBidWcgaXMgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX1NNUGAgYmxvY2ssIEkmIzM5O2xsIG5lZWQgYENPTkZJR19TTVBgIGVuYWJsZWQgdG9vLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvZGUgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgZm9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbnMgcmVsYXRlZCB0byBgI2lmZGVmIENPTkZJR19TTVBgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfU01QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjEzPXN0YXRpYyB2b2lkIGVtaXRfcHJpdl9mcmFtZV9wdHIodTggKipwcHJvZywgdm9pZCBfX3BlcmNwdSAqcHJpdl9mcmFtZV9wdHIpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MjAtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTYyMTojaWZkZWYgQ09ORklHX1NNUFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MjItXHQvKiBhZGQgXHUwMDNjcjlcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM1LVx0XHRcdFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkzNjojaWZkZWYgQ09ORklHX1NNUFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzctXHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYwMgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnMsIGZvcm11bGF0ZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IEJQRiBKSVQgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgY29uZmlybWluZyB0aGUgb2J2aW91czogYENPTkZJR19TTVBgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuIFdlIG5lZWQgYSBzeXN0ZW0gY2FwYWJsZSBvZiBoYW5kbGluZyBtdWx0aXBsZSBDUFVzIGZvciB0aGlzIHRvIGhhdmUgYW55IHJlYWwtd29ybGQgYmVuZWZpdC4gVGhlbiwgY29uc2lkZXJpbmcgd2hhdCB3ZSYjMzk7cmUgYWltaW5nIGZvciwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIGJ1aWxkaW5nIG9uLiBBbmQsIHRvIGFjdHVhbGx5ICpkbyogdGhlIEpJVCBjb21waWxhdGlvbiwgYENPTkZJR19CUEZfSklUYCBpcyBub24tbmVnb3RpYWJsZSwgb2YgY291cnNlLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IHN5bWJvbHMsIHRoZSBwb2ludHMgb2YgZm9jdXMuIEFscmlnaHQsIHRpbWUgdG8gY2hlY2sgYEZvY3VzU3ltYm9sc2AuLi4KCk9rYXksIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBjbGVhci4gYGRvX2ppdGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIG1ha2VzIHNlbnNlOyB3ZSBkb24mIzM5O3QgbmVlZCBnbG9iYWwgdmlzaWJpbGl0eSBmb3IgdGhhdC4gTm93LCB3aGVyZSBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSByZWFsIGhvb2sgaW50byB0aGUgSklUIHByb2Nlc3M/IEFoLCB0aGVyZSBpdCBpczogYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMuIE5vdyBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBKSVQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk1MD1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2MS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTYyOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkJQRiBDb2RlIEdlbmVyYXRpb246IFRoZSBDb3JlIEZsb3cqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgQlBGIEpJVCBjb21waWxhdGlvbiwgYW5kIGFzIEkgc3VzcGVjdGVkLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIHRoZSBnYXRlLCB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGFzIEkgcmVjYWxsLiBOb3csIHRoaW5raW5nIGFib3V0IGhvdyB3ZSBnZXQgdG8gdGhvc2Ugc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCBJIGNhbiBzZWUgdGhhdCB0aGUgdmVyaWZpZXIgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIGdlbmVyYXRpbmcgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYC4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCByZWNhbGxpbmcgdGhhdCBzcGVjaWZpYyBpbnN0cnVjdGlvbi4gQW5kLCBhcyBJIHJlbWVtYmVyLCB0aGUgZnVuY3Rpb24gYGJwZl9kb19taXNjX2ZpeHVwc2AgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgIGlzIHRoZSBwcmVjaXNlIHBvaW50IHdoZXJlIHRoaXMgcGFydGljdWxhciBpbnN0cnVjdGlvbiBpcyBhY3R1YWxseSBnZW5lcmF0ZWQuIFRoYXQgZnVuY3Rpb24gaGFuZGxlcyBtaXNjZWxsYW5lb3VzIGZpeHVwcyBhbmQgb3B0aW1pemF0aW9ucywgYW5kIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgdmVyaWZpZXImIzM5O3MgY2hlY2tzIGxlYWQgdG8gdGhlIGluc3RydWN0aW9uIGJlaW5nIGVtaXR0ZWQuIEl0JiMzOTtzIGFsbCBzdGFydGluZyB0byBjb21lIHRvZ2V0aGVyIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIEkgaGFkIGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc5Olx0LyogYWRkcmVzcyBzcGFjZSBjYXN0cyBjb252ZXJ0ZWQgdG8gQlBGX0FMVSwgc2VlIGJwZl9kb19taXNjX2ZpeHVwcygpICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwLVx0aWYgKGlzX2FkZHJfc3BhY2VfY2FzdDMyKHByb2csIGluc24pKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ3ND1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwMi0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwMzppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDE1Mz1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNzQtXHRpZiAocmV0ID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzNzU6XHRcdHJldCA9IGJwZl9kb19taXNjX2ZpeHVwcyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg1NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIENvbXBpbGVyIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyBhYm91dCB0aGUgQlBGIHZlcmlmaWVyIGVudHJ5IHBvaW50LCBgYnBmX2NoZWNrYC4gSSYjMzk7bSBzdGFydGluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHJlbGV2YW50IHN5bWJvbHMsIGFuZCBJJiMzOTtsbCBhZGQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2RvX21pc2NfZml4dXBzYCB0byBteSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGxpc3QuIFdhaXQgYSBzZWNvbmQsIEkgbmVlZCB0byBjb25maXJtIGBicGZfZG9fbWlzY19maXh1cHNgIGlzbiYjMzk7dCBzdGF0aWMuIFllcCwgZm91bmQgaXQgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLiBHb29kLCBpdCYjMzk7cyBnbG9iYWwuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBFc3NlbnRpYWxseSwgdGhpcyBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIEl0JiMzOTtzIGFib3V0IGhvdyB0aGUgUkVYIHByZWZpeCBpcyBiZWluZyBoYW5kbGVkIGZvciBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbnMgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRob3NlIGV4dGVuZGVkIHJlZ2lzdGVycywgUjggdGhyb3VnaCBSMTUuIFRoZSBwcm9ibGVtIGlzLCB0aGlzIGluY29ycmVjdCBlbmNvZGluZyBpcyBsZWFkaW5nIHRvIHRoZSBKSVQgZW1pdHRpbmcgY29kZSB0aGF0IHNjcmV3cyB1cCB0aGUgcGVyLUNQVSBvZmZzZXQgY2FsY3VsYXRpb24uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBkb2luZyB0aGUgYWRkIHRvIHRoZSB3cm9uZyByZWdpc3RlciBhbmQgdGhlbiByZWFkaW5nIHRoZSBkYXRhIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguCgpJbiB0ZXJtcyBvZiBpbXBhY3QsIGl0IGNvdWxkIGJlIGEgcG90ZW50aWFsIGV4cGxvaXQhIFRoYXQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gCgpJJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGZvciB0ZXN0aW5nOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgU01QYC4gQW5kIGFnYWluLCBteSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGFyZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBicGZfZG9fbWlzY19maXh1cHNgLgoKSnVzdCBhIHNhbml0eSBjaGVjazogSSBuZWVkIHRvIHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoYXQgYEJQRl9KSVRgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNTktXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQnVnIENvbnRleHQqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBzcG90LW9uIOKAkyB3ZSBkZWZpbml0ZWx5IG5lZWQgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIGZ1bmRhbWVudGFsIGZvciBKSVQgY29tcGlsYXRpb24sIGFuZCBgQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4gZm9yIHVzaW5nIEJQRiBpbiBnZW5lcmFsLiBUaGUgcHJlc2VuY2Ugb2YgYCNpZmRlZiBDT05GSUdfU01QYCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGJ1ZyBpcyBsaWtlbHkgU01QLXJlbGF0ZWQsIHBvaW50aW5nIHVzIHRvd2FyZHMgbXVsdGktcHJvY2Vzc29yIHN5c3RlbXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbG9vayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHRlc3QgY2FzZSB1dGlsaXplcyBgX19hcmNoX3g4Nl82NGAsIHdoaWNoIHN1Z2dlc3RzIHRoZSBwcm9ibGVtIGlzIHNwZWNpZmljIHRvIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlLiBJIHNlZSB0aGUgYnVnIGxpdmVzIHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgd2hpY2ggY29uZmlybXMgdGhpcy4gV2UgZG9uJiMzOTt0IHN0cmljdGx5ICpuZWVkKiB0byBleHBsaWNpdGx5IGRlY2xhcmUgdGhlIGFyY2hpdGVjdHVyZSBpbiBgRW5hYmxlQ29uZmlnc2AuIEFsdGhvdWdoLCBpbmNsdWRpbmcgYFg4Nl82NGAgaXNuJiMzOTt0IGEgYmFkIGlkZWEsIGFsdGhvdWdoIHR5cGljYWxseSBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gb3VyIHg4NiBmdXp6ZXJzLgoKSSYjMzk7bSBub3cgZ29pbmcgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIGlzIHV0aWxpemVkIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgaXRzIGJyb2FkZXIgdXNhZ2Ugd2lsbCBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQgaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19tb3ZfcGVyY3B1X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTMwMj1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUtXHRcdFx0YnJlYWs7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMzU2Olx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU3LVx0XHRcdGlmIChkc3QgIT0gc3JjKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNjE6XHRcdFx0aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKFx1MDAyNmluc25baV0pKSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4NS1cdFx0XHRicmVhaztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVx0XHRcdGlmIChyZCAhPSBycylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXHRcdFx0XHRicmVhaztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjAyOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTk2CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHg4NiBKSVQgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIGlzIHNwZWNpZmljYWxseSBhbiBpc3N1ZSB3aXRoaW4gdGhlIHg4NiBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsZXIuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIFRoZSBjb3JlIHByb2JsZW0gYXBwZWFycyB0byBiZSBhIGZsYXcgaW4gdGhlIHdheSB0aGUgUkVYIHByZWZpeCBpcyBiZWluZyBoYW5kbGVkIGR1cmluZyB0aGUgZW5jb2Rpbmcgb2YgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb25zLCBidXQgb25seSB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBvbmUgb2YgdGhlIGV4dGVuZGVkIHJlZ2lzdGVycyAoUjgtUjE1KS4gVGhpcyBtZWFucyB0aGUgSklUIGlzIG1pc2ludGVycHJldGluZyB3aGVyZSB0byB3cml0ZSB0aGUgcGVyLUNQVSBvZmZzZXQuCgpFc3NlbnRpYWxseSwgdGhlIGZpeCBpcyBjb3JyZWN0aW5nIGFuIGluY29ycmVjdCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIOKAkyBhZGRpbmcgdGhlIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIgYW5kIHN1YnNlcXVlbnRseSByZWFkaW5nIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24uIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgbmFzdHkgY29uc2VxdWVuY2VzIOKAkyBhIGtlcm5lbCBjcmFzaCwgb3IgZXZlbiB3b3JzZSwgYSBwb3RlbnRpYWwgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhICpyZWFsKiBidWcgZml4IHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIHRob3JvdWdoIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuCgpUaW1lIHRvIGxvZyB0aGlzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBSRVggcHJlZml4IGlzIGluY29ycmVjdGx5IGVuY29kZWQgZm9yIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gVGhpcyBjYXVzZXMgdGhlIEpJVCB0byBlbWl0IGFuIGluc3RydWN0aW9uIHRoYXQgYWRkcyB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVnIGluIEJQRiwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgd2hlcmUgdGhlIFJFWCBwcmVmaXggaXMgaW5jb3JyZWN0bHkgZW5jb2RlZCBmb3IgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGlzIGNhdXNlcyB0aGUgSklUIHRvIGVtaXQgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBhZGRzIHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIgYW5kIHJlYWRzIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY291bGQgbGVhZCB0byBhIGtlcm5lbCBjcmFzaCBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBidWcgaW4gQlBGLCBhbmQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gZm9yIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgcHJldmlvdXMgZW5jb2RpbmcgY2F1c2VkIHRoZSBKSVQgdG8gYXBwbHkgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3Rlci5cblxuVGhpcyBidWcgbGVhZHMgdG8gdGhlIEJQRiBwcm9ncmFtIGFjY2Vzc2luZyBpbmNvcnJlY3QgbWVtb3J5IGFkZHJlc3Nlcywgd2hpY2ggaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgb3IgYXJiaXRyYXJ5IG1lbW9yeSBhY2Nlc3MgdnVsbmVyYWJpbGl0eS4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbnMgYW5kIGludmFsaWQgYWNjZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG1pc3NpbmcgemVyb2luZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZlNjhhZDc5OTVmZDIyZGE5ZjM0ODc2NDJhMTZlMDBmODhkODllOWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAyMToxNzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkOTIwNzcyYWY3ZDVmLi4xYTlmYjUzMGFkYzNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xOTM1LDcgJiM0MzsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICoKIAkJCQlFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCQkJLyogYWRkICZsdDtkc3QmZ3Q7LCBnczpbJmx0O29mZiZndDtdICovCi0JCQkJRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpOwomIzQzOwkJCQlFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7CiAJCQkJRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpOwogCQkJCUVNSVQoKHUzMikodW5zaWduZWQgbG9uZykmYW1wO3RoaXNfY3B1X29mZiwgNCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCmluZGV4IDgxMTNmZWE3YmE4NmMuLjY0YWM0OWFkNjdlNjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwpAQCAtNzksNiAmIzQzOzc5LDcgQEAKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfYnBmX2Zhc3RjYWxsLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX29yX2ptcDMyX2suc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3BlcmNwdV9hZGRyLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3ByZWNpc2lvbi5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfcHJpdmF0ZV9zdGFjay5za2VsLmgmIzM0OwpAQCAtMjQwLDYgJiM0MzsyNDEsNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX2N0eCh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX2N0eCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZSh2b2lkKSAgICB7IFJVTih2ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZSk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9icGZfZmFzdGNhbGwodm9pZCkgICAgICAgICB7IFJVTih2ZXJpZmllcl9icGZfZmFzdGNhbGwpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfb3Jfam1wMzJfayh2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfb3Jfam1wMzJfayk7IH0KJiM0Mzt2b2lkIHRlc3RfdmVyaWZpZXJfcGVyY3B1X2FkZHIodm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfcGVyY3B1X2FkZHIpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJlY2lzaW9uKHZvaWQpICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJlY2lzaW9uKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCh2b2lkKSAgIHsgUlVOKHZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9wcml2YXRlX3N0YWNrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9wcml2YXRlX3N0YWNrKTsgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45NjJmYWVhOGVmOTAwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmMKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2ludCBwZXJjcHVfZGF0YSBTRUMoJiMzNDsucGVyY3B1JiMzNDspOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KQomIzQzOwomIzQzOy8qCiYjNDM7ICogQW4gbGRfaW1tNjQgb2YgYSBwZXItQ1BVIG1hcCB2YWx1ZSBpcyBmb2xsb3dlZCBieSBhIG1vdl9wZXJjcHVfYWRkciB0aGF0CiYjNDM7ICogcmV1c2VzIHRoZSBzYW1lIHJlZ2lzdGVyLCBzbyB0aGUgcmVnaXN0ZXIgdGhlIGFkZHJlc3MgbGFuZHMgaW4gZGVjaWRlcyBob3cKJiM0MzsgKiB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4gT24geDg2IFI1LCBSNywgUjggYW5kIFI5IGFyZSB0aGUgZXh0ZW5kZWQKJiM0MzsgKiByZWdpc3RlcnMsIHdob3NlIGhpZ2ggYml0IG5lZWRzIFJFWC5SIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIHNpdHMgaW4KJiM0MzsgKiBNb2RSTS5yZWcuIENoZWNrIG9uZSBwcm9ncmFtIHBlciBleHRlbmRlZCByZWdpc3Rlciwgc2luY2UgZ2V0dGluZyB0aGUKJiM0MzsgKiBwcmVmaXggd3JvbmcgcmVzb2x2ZXMgdGhlIGFkZHJlc3MgaW50byB3aGljaGV2ZXIgcmVnaXN0ZXIgc2hhcmVzIHRoZSBsb3cKJiM0MzsgKiB0aHJlZSBiaXRzIGluc3RlYWQuCiYjNDM7ICovCiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHI1JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklZ3M6e3suKn19LCAlcjgmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yNSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyNSA9ICVbcGVyY3B1X2RhdGFdIGxsOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjUgJiM0MzsgMCk7CQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByNyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJWdzOnt7Lip9fSwgJXIxMyYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I3KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXI3ID0gJVtwZXJjcHVfZGF0YV0gbGw7CQkJCVwKJiM0MzsJcjAgPSAqKHUzMiAqKShyNyAmIzQzOyAwKTsJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW1fYWRkcihwZXJjcHVfZGF0YSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHI4JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklZ3M6e3suKn19LCAlcjE0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjgodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjggPSAlW3BlcmNwdV9kYXRhXSBsbDsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHI4ICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjkmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVnczp7ey4qfX0sICVyMTUmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yOSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyOSA9ICVbcGVyY3B1X2RhdGFdIGxsOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjkgJiM0MzsgMCk7CQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEEgcmVnaXN0ZXIgdGhhdCBuZWVkcyBubyBSRVguUiwgdG8gY2F0Y2ggYSBmaXggdGhhdCBvdmVyY29ycmVjdHMuICovCiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHIxJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklZ3M6e3suKn19LCAlcmRpJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjEodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAlW3BlcmNwdV9kYXRhXSBsbDsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHIxICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXJjcHUgYWRkciBkdW1teSYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBkdW1teV90ZXN0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5MAoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAxMDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhpcyBpbnN0cnVjdGlvbiBlbmNvZGluZyBmaXg6IGBhZGRfMW1vZGAgaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBUaGlzIGlzIGEgY2xhc3NpYyBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgdGhhdCwgaWYgbm90IGFkZHJlc3NlZCwgd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY29kZSBnZW5lcmF0aW9uLiBJIGNhbiBzZWUgdGhhdCB0aGUgYnVnIGlzIGFib3V0IHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBjb3JyZWN0bHkgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIFRoZSBpbmNvcnJlY3QgZW5jb2Rpbmcgd291bGQgY2F1c2UgdGhlIG9mZnNldCB0byBiZSBhcHBsaWVkIHRvIHRoZSB3cm9uZyByZWdpc3RlciwgZXNzZW50aWFsbHkgcmVzdWx0aW5nIGluIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgbWVtb3J5IGF0IGFuIGluY29ycmVjdCBhZGRyZXNzLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidXQgaXQmIzM5O3MgbW9yZSBvZiBhIG1lbW9yeSBjb3JydXB0aW9uL291dC1vZi1ib3VuZHMgYWNjZXNzIGlzc3VlLiBUaGUgQlBGIHByb2dyYW0gd291bGQgYmUgcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gYW4gYXJiaXRyYXJ5IG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY291bGQgYmUgYW55dGhpbmcuIEEgZGVlcGVyIGxvb2sgY29uZmlybXMgdGhhdCB0aGUgYnVnIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHdheSBLTVNBTiB3b3VsZCBiZSByZXF1aXJlZCB0byBkZXRlY3QuIFRoaXMgaXMgYW4gZW5jb2RpbmcgYnVnIHdoZXJlIHRoZSBKSVQgZ2VuZXJhdGVzIGFuIGluY29ycmVjdCBpbnN0cnVjdGlvbiBzZXF1ZW5jZTsgdGhlIHJlc3VsdGluZyBpbmNvcnJlY3QgcHJvZ3JhbSB3b3VsZCB0aGVuIGNhdXNlIHRoZSBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBhY2Nlc3MuIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nIHRob3NlIG1lbW9yeSBhY2Nlc3Nlcy4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsaWtlIG1pc3NpbmcgYG1lbXNldGAgY2FsbHMsIHdoaWNoIGlzbiYjMzk7dCB0aGUgY29uY2VybiBoZXJlLgoKR29pbmcgYmFjayB0byB0aGUgY29kZSwgSSBzZWUgdGhhdCBgYWRkXzFtb2RgIGxpa2VseSBoYWQgYSBwcm9ibGVtIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgUkVYIHByZWZpeCBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXJzLiBUaGUgcmVwbGFjZW1lbnQgd2l0aCBgYWRkXzJtb2RgIGNsZWFybHkgcHJvdmlkZXMgYSBwcm9wZXIgZW5jb2RpbmcuIEkgZG9uJiMzOTt0IG5lZWQgdG8gZGlnIHRvbyBkZWVwIGludG8gdGhlIG1pbnV0aWFlIG9mIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGA7IHRoZSBjb3JlIG9mIGl0IGlzIGEgZnVuZGFtZW50YWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZml4LiBUaGUgbWFpbiB0aGluZyBpcyB0aGF0IHRoaXMgaXMgYSBKSVQgYnVnLiBUaGlzIGtpbmQgb2YgYnVnIGxlYWRzIHRvIGluY29ycmVjdCBleGVjdXRpb24gb2YgdGhlIGdlbmVyYXRlZCBCUEYgY29kZS4gVGhpcyBjYW4gbGVhZCB0byBjcmFzaGVzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgZXRjLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyB0aGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbnMuIFRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOID0gZmFsc2UuCgpNeSBmaW5hbCByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGNydWNpYWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZmxhdyBpbiB0aGUgeDg2IEJQRiBKSVQuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gd2l0aGluIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgb3JpZ2luYWwgaW5jb3JyZWN0IGVuY29kaW5nIGNhdXNlZCB0aGUgSklUIHRvIGFwcGx5IHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIsIHdoaWNoIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMuIEJlY2F1c2UgaXQgZG9lcyBub3QgY3JlYXRlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBJbnN0ZWFkLCBzdWNoIG1lbW9yeSBjb3JydXB0aW9ucyBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFNvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gZm9yIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgcHJldmlvdXMgZW5jb2RpbmcgY2F1c2VkIHRoZSBKSVQgdG8gYXBwbHkgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3Rlci5cblxuVGhpcyBidWcgbGVhZHMgdG8gdGhlIEJQRiBwcm9ncmFtIGFjY2Vzc2luZyBpbmNvcnJlY3QgbWVtb3J5IGFkZHJlc3Nlcywgd2hpY2ggaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgb3IgYXJiaXRyYXJ5IG1lbW9yeSBhY2Nlc3MgdnVsbmVyYWJpbGl0eS4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbnMgYW5kIGludmFsaWQgYWNjZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG1pc3NpbmcgemVyb2luZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBTcGVjaWZpY2FsbHksIGl0IGNvcnJlY3RzIHRoZSBSRVggcHJlZml4IGVtaXNzaW9uIGZvciB0aGUgYGFkZGAgaW5zdHJ1Y3Rpb24gd2hlbiByZXNvbHZpbmcgcGVyLUNQVSBhZGRyZXNzZXMgaW50byBleHRlbmRlZCByZWdpc3RlcnMgKGxpa2UgcjgtcjE1KS4gVGhlIHByZXZpb3VzIGVuY29kaW5nIGNhdXNlZCB0aGUgSklUIHRvIGFwcGx5IHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIuXG5cblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNzo1Mi44ODYzNjQ1NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE2NTg0ODc5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCBpdCBjb3JyZWN0cyB0aGUgUkVYIHByZWZpeCBlbWlzc2lvbiBmb3IgdGhlIGBhZGRgIGluc3RydWN0aW9uIHdoZW4gcmVzb2x2aW5nIHBlci1DUFUgYWRkcmVzc2VzIGludG8gZXh0ZW5kZWQgcmVnaXN0ZXJzIChsaWtlIHI4LXIxNSkuIFRoZSBwcmV2aW91cyBlbmNvZGluZyBjYXVzZWQgdGhlIEpJVCB0byBhcHBseSB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyLlxcblxcblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgUkVYIHByZWZpeCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkIGZvciBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIFRoaXMgY2F1c2VzIHRoZSBKSVQgdG8gZW1pdCBhbiBpbnN0cnVjdGlvbiB0aGF0IGFkZHMgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3RlciBhbmQgcmVhZHMgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjb3VsZCBsZWFkIHRvIGEga2VybmVsIGNyYXNoIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBhIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGJ1ZyBpbiBCUEYsIGFuZCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE3OjUyLjg4NjM3MDExOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NzYwNDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZlNjhhZDc5OTVmZDIyZGE5ZjM0ODc2NDJhMTZlMDBmODhkODllOWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTc6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtMTkzNSw3ICsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcXG4gXFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuICNpZmRlZiBDT05GSUdfU01QXFxuIFxcdFxcdFxcdFxcdC8qIGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXSAqL1xcbi1cXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XFxuK1xcdFxcdFxcdFxcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcXG4gXFx0XFx0XFx0XFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xcbiBcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbmluZGV4IDgxMTNmZWE3YmE4NmMuLjY0YWM0OWFkNjdlNjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtNzksNiArNzksNyBAQFxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYnBmX2Zhc3RjYWxsLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX29yX2ptcDMyX2suc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidmVyaWZpZXJfcGVyY3B1X2FkZHIuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfcHJlY2lzaW9uLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cC5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9wcml2YXRlX3N0YWNrLnNrZWwuaFxcXCJcXG5AQCAtMjQwLDYgKzI0MSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9uZXRmaWx0ZXJfY3R4KHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9uZXRmaWx0ZXJfY3R4KTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUodm9pZCkgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9icGZfZmFzdGNhbGwodm9pZCkgICAgICAgICB7IFJVTih2ZXJpZmllcl9icGZfZmFzdGNhbGwpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9vcl9qbXAzMl9rKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9vcl9qbXAzMl9rKTsgfVxcbit2b2lkIHRlc3RfdmVyaWZpZXJfcGVyY3B1X2FkZHIodm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfcGVyY3B1X2FkZHIpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmVjaXNpb24odm9pZCkgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9wcmVjaXNpb24pOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAodm9pZCkgICB7IFJVTih2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXApOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcml2YXRlX3N0YWNrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9wcml2YXRlX3N0YWNrKTsgfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45NjJmYWVhOGVmOTAwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXFxuQEAgLTAsMCArMSwxMTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitpbnQgcGVyY3B1X2RhdGEgU0VDKFxcXCIucGVyY3B1XFxcIik7XFxuK1xcbisjaWYgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NilcXG4rXFxuKy8qXFxuKyAqIEFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdFxcbisgKiByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvd1xcbisgKiB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4gT24geDg2IFI1LCBSNywgUjggYW5kIFI5IGFyZSB0aGUgZXh0ZW5kZWRcXG4rICogcmVnaXN0ZXJzLCB3aG9zZSBoaWdoIGJpdCBuZWVkcyBSRVguUiBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBzaXRzIGluXFxuKyAqIE1vZFJNLnJlZy4gQ2hlY2sgb25lIHByb2dyYW0gcGVyIGV4dGVuZGVkIHJlZ2lzdGVyLCBzaW5jZSBnZXR0aW5nIHRoZVxcbisgKiBwcmVmaXggd3JvbmcgcmVzb2x2ZXMgdGhlIGFkZHJlc3MgaW50byB3aGljaGV2ZXIgcmVnaXN0ZXIgc2hhcmVzIHRoZSBsb3dcXG4rICogdGhyZWUgYml0cyBpbnN0ZWFkLlxcbisgKi9cXG4rXFxuK1NFQyhcXFwicmF3X3RwXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjVcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JWdzOnt7Lip9fSwgJXI4XFxcIilcXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjUodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI1ID0gJVtwZXJjcHVfZGF0YV0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTMyICopKHI1ICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcInBlci1DUFUgYWRkcmVzcyBpbnRvIHI3XFxcIilcXG4rX19zdWNjZXNzXFxuK19fYXJjaF94ODZfNjRcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVnczp7ey4qfX0sICVyMTNcXFwiKVxcbitfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yNyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjcgPSAlW3BlcmNwdV9kYXRhXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gKih1MzIgKikocjcgKyAwKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjhcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JWdzOnt7Lip9fSwgJXIxNFxcXCIpXFxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I4KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9ICVbcGVyY3B1X2RhdGFdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHUzMiAqKShyOCArIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHBcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJwZXItQ1BVIGFkZHJlc3MgaW50byByOVxcXCIpXFxuK19fc3VjY2Vzc1xcbitfX2FyY2hfeDg2XzY0XFxuK19faml0ZWQoXFxcIlxcdGFkZHFcXHQlZ3M6e3suKn19LCAlcjE1XFxcIilcXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjkodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI5ID0gJVtwZXJjcHVfZGF0YV0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTMyICopKHI5ICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiBBIHJlZ2lzdGVyIHRoYXQgbmVlZHMgbm8gUkVYLlIsIHRvIGNhdGNoIGEgZml4IHRoYXQgb3ZlcmNvcnJlY3RzLiAqL1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcInBlci1DUFUgYWRkcmVzcyBpbnRvIHIxXFxcIilcXG4rX19zdWNjZXNzXFxuK19fYXJjaF94ODZfNjRcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVnczp7ey4qfX0sICVyZGlcXFwiKVxcbitfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yMSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW3BlcmNwdV9kYXRhXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gKih1MzIgKikocjEgKyAwKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKyNlbHNlXFxuK1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcInBlcmNwdSBhZGRyIGR1bW15XFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBkdW1teV90ZXN0KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNlbmRpZlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE3OjU0LjM3NDg5OTQ1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTk3MjE1NzY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBSRVggcHJlZml4IGlzIGluY29ycmVjdGx5IGVuY29kZWQgZm9yIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gVGhpcyBjYXVzZXMgdGhlIEpJVCB0byBlbWl0IGFuIGluc3RydWN0aW9uIHRoYXQgYWRkcyB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVnIGluIEJQRiwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmU2OGFkNzk5NWZkMjJkYTlmMzQ4NzY0MmExNmUwMGY4OGQ4OWU5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIxOjE3OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkOTIwNzcyYWY3ZDVmLi4xYTlmYjUzMGFkYzNjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xOTM1LDcgKzE5MzUsNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XG4gI2lmZGVmIENPTkZJR19TTVBcbiBcdFx0XHRcdC8qIGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG4tXHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XG4rXHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4gXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4gXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggODExM2ZlYTdiYTg2Yy4uNjRhYzQ5YWQ2N2U2MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC03OSw2ICs3OSw3IEBAXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZS5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfYnBmX2Zhc3RjYWxsLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9vcl9qbXAzMl9rLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ2ZXJpZmllcl9wZXJjcHVfYWRkci5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfcHJlY2lzaW9uLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX3ByaXZhdGVfc3RhY2suc2tlbC5oXCJcbkBAIC0yNDAsNiArMjQxLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX25ldGZpbHRlcl9jdHgodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX25ldGZpbHRlcl9jdHgpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX25ldGZpbHRlcl9yZXRjb2RlKHZvaWQpICAgIHsgUlVOKHZlcmlmaWVyX25ldGZpbHRlcl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9icGZfZmFzdGNhbGwodm9pZCkgICAgICAgICB7IFJVTih2ZXJpZmllcl9icGZfZmFzdGNhbGwpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX29yX2ptcDMyX2sodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX29yX2ptcDMyX2spOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX3BlcmNwdV9hZGRyKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX3BlcmNwdV9hZGRyKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmVjaXNpb24odm9pZCkgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9wcmVjaXNpb24pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCh2b2lkKSAgIHsgUlVOKHZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJpdmF0ZV9zdGFjayh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJpdmF0ZV9zdGFjayk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTYyZmFlYThlZjkwMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmNcbkBAIC0wLDAgKzEsMTE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4raW50IHBlcmNwdV9kYXRhIFNFQyhcIi5wZXJjcHVcIik7XG4rXG4rI2lmIGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpXG4rXG4rLypcbisgKiBBbiBsZF9pbW02NCBvZiBhIHBlci1DUFUgbWFwIHZhbHVlIGlzIGZvbGxvd2VkIGJ5IGEgbW92X3BlcmNwdV9hZGRyIHRoYXRcbisgKiByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvd1xuKyAqIHRoZSBKSVQgZW5jb2RlcyB0aGUgYWRkLiBPbiB4ODYgUjUsIFI3LCBSOCBhbmQgUjkgYXJlIHRoZSBleHRlbmRlZFxuKyAqIHJlZ2lzdGVycywgd2hvc2UgaGlnaCBiaXQgbmVlZHMgUkVYLlIgYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gc2l0cyBpblxuKyAqIE1vZFJNLnJlZy4gQ2hlY2sgb25lIHByb2dyYW0gcGVyIGV4dGVuZGVkIHJlZ2lzdGVyLCBzaW5jZSBnZXR0aW5nIHRoZVxuKyAqIHByZWZpeCB3cm9uZyByZXNvbHZlcyB0aGUgYWRkcmVzcyBpbnRvIHdoaWNoZXZlciByZWdpc3RlciBzaGFyZXMgdGhlIGxvd1xuKyAqIHRocmVlIGJpdHMgaW5zdGVhZC5cbisgKi9cbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjVcIilcbitfX3N1Y2Nlc3NcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIlx0YWRkcVx0JWdzOnt7Lip9fSwgJXI4XCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjUodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyNSA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjUgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInJhd190cFwiKVxuK19fZGVzY3JpcHRpb24oXCJwZXItQ1BVIGFkZHJlc3MgaW50byByN1wiKVxuK19fc3VjY2Vzc1xuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiXHRhZGRxXHQlZ3M6e3suKn19LCAlcjEzXCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjcodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyNyA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjcgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInJhd190cFwiKVxuK19fZGVzY3JpcHRpb24oXCJwZXItQ1BVIGFkZHJlc3MgaW50byByOFwiKVxuK19fc3VjY2Vzc1xuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiXHRhZGRxXHQlZ3M6e3suKn19LCAlcjE0XCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjgodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyOCA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjggKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInJhd190cFwiKVxuK19fZGVzY3JpcHRpb24oXCJwZXItQ1BVIGFkZHJlc3MgaW50byByOVwiKVxuK19fc3VjY2Vzc1xuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiXHRhZGRxXHQlZ3M6e3suKn19LCAlcjE1XCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjkodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyOSA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjkgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIEEgcmVnaXN0ZXIgdGhhdCBuZWVkcyBubyBSRVguUiwgdG8gY2F0Y2ggYSBmaXggdGhhdCBvdmVyY29ycmVjdHMuICovXG4rU0VDKFwicmF3X3RwXCIpXG4rX19kZXNjcmlwdGlvbihcInBlci1DUFUgYWRkcmVzcyBpbnRvIHIxXCIpXG4rX19zdWNjZXNzXG4rX19hcmNoX3g4Nl82NFxuK19faml0ZWQoXCJcdGFkZHFcdCVnczp7ey4qfX0sICVyZGlcIilcbitfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yMSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gJVtwZXJjcHVfZGF0YV0gbGw7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHUzMiAqKShyMSArIDApO1x0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2Vsc2VcbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyY3B1IGFkZHIgZHVtbXlcIilcbitfX3N1Y2Nlc3NcbitpbnQgZHVtbXlfdGVzdCh2b2lkKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNzo1NC4zNzQ5MDA4ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg5MjAyMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogWDg2IEJQRiBKSVQgQ29tcGlsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCdzIG1vZGlmeWluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhhdCdzIHRoZSB4ODYgQlBGIEp1c3QtSW4tVGltZSBjb21waWxlciwgcmlnaHQ/IE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBwZXItQ1BVIGFkZHJlc3MgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBkb19qaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyByaWdodCBoZXJlOiBhIHN1YnRsZSBhbHRlcmF0aW9uIGluIHRoZSBhc3NlbWJseSBvdXRwdXQuIEkgc2VlIGEgY2hhbmdlIGZyb20gYEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKWAgdG8gYEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKWAuIFJpZ2h0IGF3YXkgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHg4NiBvcGNvZGVzIGFuZCBhZGRyZXNzaW5nIG1vZGVzLi4uIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBpcyBjcml0aWNhbC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGNoYW5naW5nIGhvdyB0aGUgY29tcGlsZXIgY2FsY3VsYXRlcyB0aGUgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgdGhlIHBlci1DUFUgdmFyaWFibGUuIFdoYXQncyBpdCBkb2luZz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHRoZSBzZW1hbnRpY3Mgb2YgdGhhdCBjb2RlIGFuZCB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFjaGlldmUuIElzIHRoaXMgYSBidWcgZml4PyBBbiBvcHRpbWl6YXRpb24/IE9yIG1heWJlIGl0J3MgZW5hYmxpbmcgc3VwcG9ydCBmb3IgYSBuZXcgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzkzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTc6NTkuMzY0MTA3MDg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTgzMzY0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRU1JVDJcXFxcKDB4NjUsIGFkZF8xbW9kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6MDAuMTY1OTQ5NjcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzAyMzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBZnRlcm1hdGggb2YgYSBDb2RlIERlcGxveW1lbnQqKlxuXG5SaWdodCwgc28gdGhlIHBhdGNoIGlzIGFscmVhZHkgbGl2ZSDigJMgZ29vZC4gU2F2ZXMgbWUgYSBzdGVwLiBOb3csIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBxdWlja2VzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEknbGwgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgdGhlIHNpZ25hdHVyZSBgRU1JVDIoMHg2NSwgYWRkXzJtb2RgLiBUaGlzIHNwZWNpZmljIGNvbWJpbmF0aW9uIG9mIHRoZSBvcC1jb2RlIGFuZCB0aGUgc3Vicm91dGluZSBuYW1lIGlzIHVzdWFsbHkgYSBkZWFkIGdpdmVhd2F5IGZvciB0aGUgc2VjdGlvbiBpbiB0aGUgY29kZSB0aGF0IGNvbmNlcm5zIG1lLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgYDB4NjVgIHR5cGljYWxseSBpbmRpY2F0ZXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBjb25kaXRpb25hbCBicmFuY2hpbmcsIG9yIHBlcmhhcHMgaW50ZXJydXB0IGhhbmRsaW5nIGhhcyBvY2N1cnJlZC4gVGhlIGZhY3QgdGhhdCBgYWRkXzJtb2RgIGlzIGludm9sdmVkIHN1Z2dlc3RzIGEgY3VzdG9tIG1vZGlmaWNhdGlvbiBvZiBhIHN0YW5kYXJkIG1hdGhlbWF0aWNhbCBmdW5jdGlvbiwgd2hpY2ggY291bGQgYmUgdGhlIHNvdXJjZSBvZiBhIHJlY2VudCBidWcuIFRoaXMgc2VhcmNoIHdpbGwgbGlrZWx5IGxhbmQgbWUgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBtb3N0IGNvbmNlbnRyYXRlZCwgYWxsb3dpbmcgbWUgdG8gc3RhcnQgZXZhbHVhdGluZyB0aGVpciBlZmZlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDUsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODowMy40Nzg5NzU1MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjUzMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVNSVQyXFxcXCgweDY1LCBhZGRfMm1vZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzctXFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5Mzg6XFx0XFx0XFx0XFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM5LVxcdFxcdFxcdFxcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6MDMuNTgxNjUyNzQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwNzAxMzQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYGRvX2ppdGAgQXJvdW5kIExpbmUgMTkzOCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgZG9faml0YCBhcm91bmQgbGluZSAxOTM4LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBsaW5lIGlzIGEga2V5IHBvaW50IHRvIGV4YW1pbmUgd2l0aGluIHRoZSBKdXN0LUluLVRpbWUgY29tcGlsYXRpb24gcHJvY2Vzcy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzaWduaWZpY2FudCBoZXJlOiBwZXJoYXBzIGEgY3J1Y2lhbCB0cmFuc2Zvcm1hdGlvbiBzdGVwLCBhIHNwZWNpZmljIGNvZGUgZ2VuZXJhdGlvbiBjYWxsLCBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBjaGVjaywgb3IgbWF5YmUgZXZlbiBhIHBsYWNlIHdoZXJlIGEgcGFydGljdWxhciBvcHRpbWl6YXRpb24gaXMgYmVpbmcgYXBwbGllZCAob3IsIG1vcmUgY29uY2VybmluZ2x5LCAqbm90KiBiZWluZyBhcHBsaWVkKS4gR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgZHluYW1pYyBjb21waWxhdGlvbiBpdHNlbGYuIEkgd2lsbCBzdGFydCBieSB0cmFjaW5nIHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyB1c2VkIGF0IHRoYXQgbG9jYXRpb24gYW5kIHdoYXQgaXMgYmVpbmcgZG9uZSB3aXRoIHRoZSByZXN1bHRpbmcgZGF0YS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY29tcGlsZXIncyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgaW50ZXJtZWRpYXRlIGNvZGUgZ2VuZXJhdGlvbiwgb3IgdGhlIGZpbmFsIG1hY2hpbmUgY29kZSBvdXRwdXQuIFRpbWUgdG8gZGlnIGluIGFuZCBkZWNpcGhlciB0aGUgbG9naWM7IGEgcXVpY2sgc2tpbSB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBtaWdodCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgdGhhdCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODowNy42ODg2NzAwNTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MjA6XFx0XFxuMTkyMTpcXHRcXHRcXHRcXHRcXHQvKiB4b3IgcjExLCByMTEgKi9cXG4xOTIyOlxcdFxcdFxcdFxcdFxcdEVNSVQzKDB4NEQsIDB4MzEsIDB4REIpO1xcbjE5MjM6XFx0XFxuMTkyNDpcXHRcXHRcXHRcXHRcXHQvKiB0ZXN0IGRzdF9yZWczMiwgZHN0X3JlZzMyOyBjaGVjayBpZiBsb3dlciAzMi1iaXQgYXJlIHplcm8gKi9cXG4xOTI1OlxcdFxcdFxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCBkc3RfcmVnLCBkc3RfcmVnLCBmYWxzZSk7XFxuMTkyNjpcXHRcXHRcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XFxuMTkyNzpcXHRcXG4xOTI4OlxcdFxcdFxcdFxcdFxcdC8qIGNtb3ZlIHIxMSwgZHN0X3JlZzsgaWYgc28sIHNldCBkc3RfcmVnIHRvIHplcm8gKi9cXG4xOTI5OlxcdFxcdFxcdFxcdFxcdC8qIFdBUk5JTkc6IEludGVsIHN3YXBwZWQgc3JjL2RzdCByZWdpc3RlciBlbmNvZGluZyBpbiBDTU9WY2MgISEhICovXFxuMTkzMDpcXHRcXHRcXHRcXHRcXHRtYXliZV9lbWl0X21vZChcXHUwMDI2cHJvZywgQVVYX1JFRywgZHN0X3JlZywgdHJ1ZSk7XFxuMTkzMTpcXHRcXHRcXHRcXHRcXHRFTUlUMygweDBGLCAweDQ0LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBkc3RfcmVnKSk7XFxuMTkzMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xOTMzOlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG4xOTM0OlxcdFxcdFxcdFxcdFxcdC8qIG1vdiBcXHUwMDNjZHN0XFx1MDAzZSwgXFx1MDAzY3NyY1xcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cXG4xOTM1OlxcdFxcdFxcdFxcdFxcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xcbjE5MzY6XFx0I2lmZGVmIENPTkZJR19TTVBcXG4xOTM3OlxcdFxcdFxcdFxcdFxcdC8qIGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXSAqL1xcbjE5Mzg6XFx0XFx0XFx0XFx0XFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xcbjE5Mzk6XFx0XFx0XFx0XFx0XFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xcbjE5NDA6XFx0XFx0XFx0XFx0XFx0RU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKVxcdTAwMjZ0aGlzX2NwdV9vZmYsIDQpO1xcbjE5NDE6XFx0I2VuZGlmXFxuMTk0MjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xOTQzOlxcdFxcdFxcdFxcdH1cXG4xOTQ0OlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjE5NDU6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YOlxcbjE5NDY6XFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZW9mZiA9PSAwKVxcbjE5NDc6XFx0XFx0XFx0XFx0XFx0ZW1pdF9tb3ZfcmVnKFxcdTAwMjZwcm9nLFxcbjE5NDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0LFxcbjE5NDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcXG4xOTUwOlxcdFxcdFxcdFxcdGVsc2VcXG4xOTUxOlxcdFxcdFxcdFxcdFxcdGVtaXRfbW92c3hfcmVnKFxcdTAwMjZwcm9nLCBpbnNuLVxcdTAwM2VvZmYsXFxuMTk1MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCxcXG4xOTUzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcXG4xOTU0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NTU6XFx0XFxuMTk1NjpcXHRcXHRcXHRcXHQvKiBuZWcgZHN0ICovXFxuMTk1NzpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTkVHOlxcbjE5NTg6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTkVHOlxcbjE5NTk6XFx0XFx0XFx0XFx0bWF5YmVfZW1pdF8xbW9kKFxcdTAwMjZwcm9nLCBkc3RfcmVnLFxcbjE5NjA6XFx0XFx0XFx0XFx0XFx0XFx0QlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCk7XFxuMTk2MTpcXHRcXHRcXHRcXHRFTUlUMigweEY3LCBhZGRfMXJlZygweEQ4LCBkc3RfcmVnKSk7XFxuMTk2MjpcXHRcXHRcXHRcXHRicmVhaztcXG4xOTYzOlxcdFxcbjE5NjQ6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOlxcbjE5NjU6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX1NVQiB8IEJQRl9LOlxcbjE5NjY6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FORCB8IEJQRl9LOlxcbjE5Njc6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX09SIHwgQlBGX0s6XFxuMTk2ODpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6XFxuMTk2OTpcXHRcXHRcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BREQgfCBCUEZfSzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6MDcuNjg4OTEyNDE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMDE2MTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgdGhlIFJFWCBQcmVmaXggRW5jb2RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgZG9faml0YCByZWxhdGVkIHRvIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAuIEl0J3MgYSBzaW1wbGUsIGJ1dCBjcnVjaWFsLCBhZGp1c3RtZW50LiBFc3NlbnRpYWxseSwgaXQncyByZXBsYWNpbmcgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCB3aXRoIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIFRoZSByZWFzb24/IEVuY29kaW5nIHRoZSBSRVggcHJlZml4IGNvcnJlY3RseSwgZXNwZWNpYWxseSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMgbGlrZSByOCB0aHJvdWdoIHIxNSwgd2hpY2ggYXJlIGJleW9uZCB0aGUgdHlwaWNhbCA4IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuXG5cblRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgYGFkZF8xbW9kYCBhcHBlYXJzIHRvIG9ubHkgdXNlIHRoZSBsb3dlciAzIGJpdHMgb2YgdGhlIGBkc3RfcmVnYCB0byBzZXQgdGhlIE1vZFIvTSBieXRlLiBCdXQgd2FpdCwgYW0gSSByaWdodD8gRG9lcyBgYWRkXzFtb2RgIG9ubHkgc2V0IHRoZSBSRVguQiBiaXQ/IEl0IHNlZW1zIGxpa2UgYGFkZF8ybW9kYCwgYnkgYWNjZXB0aW5nIGJvdGggYSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLCBpcyB0aGUgYmV0dGVyIGZpdCBoZXJlIGJlY2F1c2UgaXQgY29ycmVjdGx5IHNldHMgYm90aCB0aGUgUkVYLlIgYW5kIFJFWC5CIGJpdHMgaW4gdGhlIHByZWZpeC4gVGhhdCdzIGtleSBmb3IgdGhlIGV4dGVuZGVkIHJlZ2lzdGVycy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZy4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCB0byB2ZXJpZnkgZXhhY3RseSBob3cgdGhleSBoYW5kbGUgdGhlIFJFWCBwcmVmaXggYW5kIHRoZSByZWdpc3RlciBlbmNvZGluZy4gQSBxdWljayB2ZXJpZmljYXRpb24gd2lsbCBzb2xpZGlmeSB0aGUgcmVhc29uaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoxMi4zMTkwNzg4MTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTU4NDI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgYWRkXzFtb2RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoxMi4zODgyNDQyNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxNzM0NzA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgYWRkXzFtb2RgIGluIHRoZSBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYWRkXzFtb2RgIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSB0aGUgaGVjayBpcyB0aGlzIGRlZmluZWQ/XCIgR2l2ZW4gdGhlIGNvbnRleHQsIG15IG1vbmV5J3Mgb24gaXQgYmVpbmcgYSBmdW5jdGlvbiBvciwgbW9yZSBsaWtlbHksIGEgbWFjcm8sIHR1Y2tlZCBhd2F5IHdpdGhpbiB0aGUgeDg2LXNwZWNpZmljIEJQRiBKSVQgY29tcGlsZXIgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBmaXJzdC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIGZvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgSklUIGNvbXBpbGF0aW9uIGhlbHBlcnMuIEJ1dCwgSSB3b24ndCBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgaXQgYmVpbmcgZGVjbGFyZWQgaW4gYSByZWxhdGVkIGhlYWRlciBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSBhcyB3ZWxsLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoxNS40MDU1OTQ2NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODMyNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZF8xbW9kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI0Mz1zdGF0aWMgYm9vbCBpc19heHJlZyh1MzIgcmVnKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0OC0vKiBBZGQgbW9kaWZpZXJzIGlmICdyZWcnIG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0OTpzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjUwLXtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz05Mzg9c3RhdGljIHZvaWQgZW1pdF9tb3ZfaW1tMzIodTggKipwcHJvZywgYm9vbCBzaWduX3Byb3BhZ2F0ZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NDktXFx0XFx0LyogJ21vdiAlcmF4LCBpbW0zMicgc2lnbiBleHRlbmRzIGltbTMyICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk1MDpcXHRcXHRiMSA9IGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NTEtXFx0XFx0YjIgPSAweEM3O1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk3MS1cXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTcyOlxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDAsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTczLVxcdEVNSVQxX29mZjMyKGFkZF8xcmVnKDB4QjgsIGRzdF9yZWcpLCBpbW0zMik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTc4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTY0KHU4ICoqcHByb2csIHUzMiBkc3RfcmVnLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk5NS1cXHRcXHQvKiBtb3ZhYnNxIHJheCwgaW1tNjQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTk2OlxcdFxcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCBhZGRfMXJlZygweEI4LCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk5Ny1cXHRcXHRFTUlUKGltbTMyX2xvLCA0KTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTAyPXN0YXRpYyB2b2lkIG1heWJlX2VtaXRfMW1vZCh1OCAqKnBwcm9nLCB1MzIgcmVnLCBib29sIGlzNjQpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEwNi1cXHRpZiAoaXM2NClcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEwNzpcXHRcXHRFTUlUMShhZGRfMW1vZCgweDQ4LCByZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEwOC1cXHRlbHNlIGlmIChpc19lcmVnKHJlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMDk6XFx0XFx0RU1JVDEoYWRkXzFtb2QoMHg0MCwgcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMTAtXFx0KnBwcm9nID0gcHJvZztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjIxLVxcdFxcdFxcdFxcdC8qIEVtaXQgJ2Jzd2FwIHJheCcgdG8gc3dhcCA4IGJ5dGVzICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMjI6XFx0XFx0XFx0XFx0RU1JVDMoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4MEYsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMjMtXFx0XFx0XFx0XFx0ICAgICAgYWRkXzFyZWcoMHhDOCwgZHN0X3JlZykpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODItXFx0XFx0XFx0fVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjgzOlxcdFxcdFxcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweEM3KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4NC1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODMzPXN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1ZilcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODQyLVxcdFxcdCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODQzOlxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdC8qIGNtcCByZHgsZnVuYyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODQ0LVxcdFxcdGlmICghaXNfc2ltbTMyKHByb2dzW2FdKSlcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODYzLVxcdHBpdm90ID0gKGIgLSBhKSAvIDI7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NjQ6XFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XFx0XFx0LyogY21wIHJkeCxmdW5jICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NjUtXFx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYSArIHBpdm90XSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjE1LjQ4MDQzMTQ4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTAwNDg1MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgTW9kdWxlIERlZmluaXRpb25zKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIG9uIHRoZSBzYW1lIHBhZ2Ugd2l0aCB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzLiBCZWZvcmUgSSBzdGFydCB0cnlpbmcgdG8gcmVhc29uIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgb3IgaGlnaGVyLWxldmVsIGxvZ2ljLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm91bmRhdGlvbmFsIGRlZmluaXRpb25zIGFyZSB3aGF0IEkgZXhwZWN0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhlIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgZGVmaW5pdGlvbnMuIFRoaXMgZmVlbHMgYWxtb3N0IHRvbyBiYXNpYywgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnksIGFuZCBpdCB3aWxsIHByZXZlbnQgYW55IGxhdGVyLCBhbmQgZW1iYXJyYXNzaW5nLCBtaXN0YWtlcy4gV2UgbmVlZCB0aGUgZGV0YWlscyB0byBiZSBjbGVhciBiZWZvcmUgd2UgY2FuIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoxOC4zODA5MTkyNTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0XFx0XFx0XFx0ICBCSVQoQlBGX1JFR19GUCkpO1xcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHRzdGF0aWMgYm9vbCBpc19heHJlZyh1MzIgcmVnKVxcbiAyNDQ6XFx0e1xcbiAyNDU6XFx0XFx0cmV0dXJuIHJlZyA9PSBCUEZfUkVHXzA7XFxuIDI0NjpcXHR9XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdC8qIEFkZCBtb2RpZmllcnMgaWYgJ3JlZycgbWFwcyB0byB4ODYtNjQgcmVnaXN0ZXJzIFI4Li5SMTUgKi9cXG4gMjQ5OlxcdHN0YXRpYyB1OCBhZGRfMW1vZCh1OCBieXRlLCB1MzIgcmVnKVxcbiAyNTA6XFx0e1xcbiAyNTE6XFx0XFx0aWYgKGlzX2VyZWcocmVnKSlcXG4gMjUyOlxcdFxcdFxcdGJ5dGUgfD0gMTtcXG4gMjUzOlxcdFxcdHJldHVybiBieXRlO1xcbiAyNTQ6XFx0fVxcbiAyNTU6XFx0XFxuIDI1NjpcXHRzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXFxuIDI1NzpcXHR7XFxuIDI1ODpcXHRcXHRpZiAoaXNfZXJlZyhyMSkpXFxuIDI1OTpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI2MDpcXHRcXHRpZiAoaXNfZXJlZyhyMikpXFxuIDI2MTpcXHRcXHRcXHRieXRlIHw9IDQ7XFxuIDI2MjpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjYzOlxcdH1cXG4gMjY0OlxcdFxcbiAyNjU6XFx0c3RhdGljIHU4IGFkZF8zbW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyLCB1MzIgaW5kZXgpXFxuIDI2NjpcXHR7XFxuIDI2NzpcXHRcXHRpZiAoaXNfZXJlZyhyMSkpXFxuIDI2ODpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI2OTpcXHRcXHRpZiAoaXNfZXJlZyhpbmRleCkpXFxuIDI3MDpcXHRcXHRcXHRieXRlIHw9IDI7XFxuIDI3MTpcXHRcXHRpZiAoaXNfZXJlZyhyMikpXFxuIDI3MjpcXHRcXHRcXHRieXRlIHw9IDQ7XFxuIDI3MzpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjc0OlxcdH1cXG4gMjc1OlxcdFxcbiAyNzY6XFx0LyogRW5jb2RlICdkc3RfcmVnJyByZWdpc3RlciBpbnRvIHg4Ni02NCBvcGNvZGUgJ2J5dGUnICovXFxuIDI3NzpcXHRzdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXFxuIDI3ODpcXHR7XFxuIDI3OTpcXHRcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ107XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjE4LjM4MTEzNTA4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk4MDcyMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpc3NlY3RpbmcgdGhlIEFzc2VtYmx5OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYXNzZW1ibHkgZ2VuZXJhdGlvbiwgYW5kIHRoZSBgYWRkXzFtb2RgIGZ1bmN0aW9uIGlzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0LiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhhdCBpdCBzZXRzIHRoZSBSRVguQiBiaXQgaWYgdGhlIGByZWdgIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyLCB0aGF0J3MgY3J1Y2lhbCBmb3IgYWRkcmVzc2luZyByZWdpc3RlcnMgYmV5b25kIHRoZSBzdGFuZGFyZCBvbmVzLCBhIGtleSBhc3BlY3Qgb2YgeDg2LTY0LlxuXG5Ob3csIGBhZGRfMm1vZGAgaXMgc2ltaWxhciwgaGFuZGxpbmcgdGhlIFJFWCBwcmVmaXggYnV0IHNsaWdodGx5IG1vcmUgY29tcGxleDsgaXQgc2V0cyBib3RoIFJFWC5CIGlmIGByMWAgaXMgZXh0ZW5kZWQgKmFuZCogUkVYLlIgaWYgYHIyYCBpcy4gVGhlIG9yaWdpbmFsIEMgY29kZSBzbmlwcGV0IGlzIHRoZSBjcnV4OlxuXG5gYGBjXG5cdFx0XHRcdC8qIGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG5cdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtcblx0XHRcdFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xuXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbmBgYFxuXG5MZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGFzc2VtYmxpbmcgYW4gYGFkZCBkc3QsIGdzOltvZmZdYCBpbnN0cnVjdGlvbiAtIHRoZSBcImRzdFwiIGlzIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciwgYW5kIFwiZ3M6W29mZl1cIiBpcyBtZW1vcnkgYWRkcmVzc2VkIHJlbGF0aXZlIHRvIHRoZSBHUyBzZWdtZW50LiBUaGUgb3Bjb2RlIGZvciBhbiBgQUREIHIvbTY0IHRvIHI2NGAgaW5zdHJ1Y3Rpb24gaXMgYDB4MDNgLiBUaGUga2V5IHRvIHRoZSBpbnN0cnVjdGlvbiBpcyBpbiB0aGUgc2Vjb25kIGxpbmUgb2YgY29kZSwgdGhlIGBFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSlgIGNhbGwsIHdoZXJlIGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAgY2FsY3VsYXRlcyB0aGUgTW9kUi9NIGJ5dGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYGFkZF8ycmVnYCBmdW5jdGlvbiBwcmVjaXNlbHkuIEl0J3MgdGhlIGtleSB0byBjb3JyZWN0bHkgZW5jb2RpbmcgdGhpcyBpbnN0cnVjdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBleHRlbmRlZCByZWdpc3RlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMDIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoyMy44NzkyMDkzOTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzY6XFx0LyogRW5jb2RlICdkc3RfcmVnJyByZWdpc3RlciBpbnRvIHg4Ni02NCBvcGNvZGUgJ2J5dGUnICovXFxuIDI3NzpcXHRzdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXFxuIDI3ODpcXHR7XFxuIDI3OTpcXHRcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ107XFxuIDI4MDpcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdC8qIEVuY29kZSAnZHN0X3JlZycgYW5kICdzcmNfcmVnJyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICdieXRlJyAqL1xcbiAyODM6XFx0c3RhdGljIHU4IGFkZF8ycmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG4gMjg0OlxcdHtcXG4gMjg1OlxcdFxcdHJldHVybiBieXRlICsgcmVnMmhleFtkc3RfcmVnXSArIChyZWcyaGV4W3NyY19yZWddIFxcdTAwM2NcXHUwMDNjIDMpO1xcbiAyODY6XFx0fVxcbiAyODc6XFx0XFxuIDI4ODpcXHQvKiBTb21lIDEtYnl0ZSBvcGNvZGVzIGZvciBiaW5hcnkgQUxVIG9wZXJhdGlvbnMgKi9cXG4gMjg5OlxcdHN0YXRpYyB1OCBzaW1wbGVfYWx1X29wY29kZXNbXSA9IHtcXG4gMjkwOlxcdFxcdFtCUEZfQUREXSA9IDB4MDEsXFxuIDI5MTpcXHRcXHRbQlBGX1NVQl0gPSAweDI5LFxcbiAyOTI6XFx0XFx0W0JQRl9BTkRdID0gMHgyMSxcXG4gMjkzOlxcdFxcdFtCUEZfT1JdID0gMHgwOSxcXG4gMjk0OlxcdFxcdFtCUEZfWE9SXSA9IDB4MzEsXFxuIDI5NTpcXHRcXHRbQlBGX0xTSF0gPSAweEUwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoyMy44Nzk0NTY1MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MDAwNDc2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgSklUIEJ1ZyBhbmQgSXRzIEZpeCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJJ3ZlIGdvdCBhIG1ham9yIGlzc3VlLiBUaGUgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBpbnN0cnVjdGlvbi4uLiB0aGlzIGNsZWFybHkgc2V0cyBgZHN0X3JlZ2AgYXMgdGhlIGRlc3RpbmF0aW9uLCBidXQgdGhlIGtleSBpcyB0aGF0IGBkc3RfcmVnYCBlbmRzIHVwIGluIHRoZSBgcmVnYCBmaWVsZCBvZiB0aGUgTW9kUi9NIGJ5dGUuIFRoYXQgZmllbGQgaXMgZXh0ZW5kZWQgYnkgdGhlIFJFWC5SIGJpdC4gQnV0LCBsb29raW5nIGF0IHRoZSAqb3JpZ2luYWwqIGNvZGUsIGl0IHdhcyB1c2luZyBgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZylgLiBUaGF0IGZ1bmN0aW9uIHNldHMgUkVYLkIgaWYgYGRzdF9yZWdgIGlzIGV4dGVuZGVkLiBCdXQgaG9sZCBvbiwgUkVYLkIgZXh0ZW5kcyB0aGUgKnIvbSogZmllbGQsICpub3QqIHRoZSBgcmVnYCBmaWVsZCEgVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCBjb25mdXNpbmcgYmVjYXVzZSBvZiB0aGUgaW50ZXJhY3Rpb24gb2YgTW9kUi9NIGFuZCBTSUIgYnl0ZXMuXG5cbk5vdywgd2l0aCBhIE1vZFIvTSBvZiBgMHgwNGAsIHdlIGtub3cgdGhlcmUncyBhIFNJQiBieXRlICh3aGljaCBpcyBgMHgyNWAgaW4gdGhpcyBjYXNlKS4gVGhlIFNJQiBieXRlIG1lYW5zIGBkaXNwMzJgIHdpdGggbm8gYmFzZSBvciBpbmRleCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEpJVCwgc28gdGhlIGByL21gIGZpZWxkIGlzbid0IGFjdHVhbGx5IGEgcmVnaXN0ZXIsIGl0IGp1c3QgaW1wbGllcyBgMTAwYCAoU0lCKS4gU2V0dGluZyBSRVguQiAqd291bGQqIGNoYW5nZSB0aGUgU0lCIGJ5dGUncyBiYXNlIHJlZ2lzdGVyLCBJIHRoaW5rLiBJZiBSRVguQiBpcyBzZXQgd2l0aCBNb2RSL00gYDA0YCwgdGhlbiB0aGUgU0lCIGJhc2UgaXMgZXh0ZW5kZWQuIFRoZSBTSUIgYnl0ZSBpcyBgMHgyNWAgKDAwIDEwMCAxMDEpLCB3aGVyZSB0aGUgYmFzZSBpcyBgMTAxYCAoUkJQL2Rpc3AzMikuIElmIFJFWC5CIGlzIHNldCwgdGhpcyBiYXNlIGJlY29tZXMgYDExMDFgIChSMTMpLlxuXG5TbywgdGhlIGlzc3VlIGlzLCBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8vcmVhZGluZyBmcm9tIGBkaXNwMzJgLCBpdCB3b3VsZCBiZSB3cml0aW5nIHRvL3JlYWRpbmcgZnJvbSBgW1IxMyArIGRpc3AzMl1gISBBbmQsIHJlbWVtYmVyLCBSRVguUiAqd2Fzbid0KiBzZXQsIHNvIGBkc3RfcmVnYCBnb3QgdHJ1bmNhdGVkIHRvIGl0cyBsb3dlciAzIGJpdHMuIFRoaXMgaXMgYSBkaXNhc3RlciEgRm9yIGV4YW1wbGUsIGlmIGBkc3RfcmVnYCBpcyBSOCAoZXh0ZW5kZWQgUjApLCB0aGUgY29kZSB3b3VsZCBpbmNvcnJlY3RseSB3cml0ZSB0byBSMCAoUkFYKSwgYW5kIHRoZSByZWFkIHdvdWxkIGJlIGZyb20gYGdzOltSMTMgKyBkaXNwMzJdYCBpbnN0ZWFkIG9mIGBnczpbZGlzcDMyXWAuIFRoaXMgaXMgYSBodWdlIGJ1ZyBpbiB0aGUgSklUIVxuXG5UaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSB1c2luZyBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBgYWRkXzJtb2RgIGlzIG11Y2ggYmV0dGVyIGJlY2F1c2UgaXQgY29ycmVjdGx5IGhhbmRsZXMgdGhlIFJFWCBwcmVmaXhlcy4gSXQgc2V0cyBSRVguQiBpZiB0aGUgZmlyc3QgcmVnaXN0ZXIgKGByMWAsIHdoaWNoIGlzIDApIGlzIGV4dGVuZGVkLCAqYW5kKiBSRVguUiBpZiB0aGUgc2Vjb25kIHJlZ2lzdGVyIChgZHN0X3JlZ2ApIGlzIGV4dGVuZGVkLiBUaGlzIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGJlY2F1c2UgUkVYLlIgaXMgbmVlZGVkIGZvciBgZHN0X3JlZ2AgaW4gdGhpcyBjYXNlLCBhbmQgUkVYLkIgaXMgY29ycmVjdGx5IG5vdCBzZXQuXG5cblRoaXMgaXMgYWJzb2x1dGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBBbnkgaW5zdHJ1Y3Rpb24gYmVpbmcgSklUdGVkIHZpYSB0aGlzIGNvZGUgY291bGQgYmUgYnJva2VuLiBEZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmchIE5vdywgbGV0J3Mgc2VlIHdoYXQgYGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pYCBpcywgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGluc3RydWN0aW9uIHRoaXMgYnVnIGltcGFjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgbW9yZSBicm9hZGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIwOSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjM0LjY3OTUwNjY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4OTE1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzNC1cXHRcXHRcXHRcXHQvKiBtb3YgXFx1MDAzY2RzdFxcdTAwM2UsIFxcdTAwM2NzcmNcXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjM0Ljc4MjQwMjcxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg2Njg3NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyBEb3duIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgLiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbiwgb3IgcG9zc2libHkgYSBtYWNybywgcmVsYXRlZCB0byBpbnN0cnVjdGlvbiBhbmFseXNpcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbW92YCBpbnN0cnVjdGlvbnMgYW5kIHBvdGVudGlhbGx5IHNvbWV0aGluZyB0byBkbyB3aXRoIHBlci1DUFUgYWRkcmVzc2luZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8ganVzdCAqZmluZCogdGhlIGRhbW4gdGhpbmcuIFdoZXJlIGlzIGl0IGRlZmluZWQ/IElzIGl0IGluIGEgaGVhZGVyIGZpbGU/IEEgQyBmaWxlPyBJcyBpdCBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZT8gSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIC0gYGdyZXBgLCBgZmluZGAsIG9yIG1heWJlIGEgc291cmNlIGNvZGUgbmF2aWdhdGlvbiB0b29sIHRvIHBpbnBvaW50IGl0cyBsb2NhdGlvbi4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kICpob3cqIHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYW5kICp3aGF0KiBpdCdzIGFjdHVhbGx5IGxvb2tpbmcgZm9yIGluIGFuIGluc3RydWN0aW9uLiBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzg5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6MzguNjY5MDkyNjA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ1ODIyNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc25faXNfbW92X3BlcmNwdV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMzAyPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU1LVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEzNTY6XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTctXFx0XFx0XFx0aWYgKGRzdCAhPSBzcmMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTY3PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjYxOlxcdFxcdFxcdGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihcXHUwMDI2aW5zbltpXSkpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU01QKSkge1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVxcdFxcdFxcdGlmIChyZCAhPSBycylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzNC1cXHRcXHRcXHRcXHQvKiBtb3YgXFx1MDAzY2RzdFxcdTAwM2UsIFxcdTAwM2NzcmNcXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDEtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDI6c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjQxLjAxNDk4MTI1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk3MTk5ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSW5zdHJ1Y3Rpb24gQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBtYWNyby4gSSBrbm93IGl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UgaGFuZGxlIHBlci1DUFUgdmFyaWFibGVzIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgd29yayB3aXRoLi4uIHdlbGwsIHlvdSBrbm93LCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gZWZmaWNpZW50IEJQRiBieXRlY29kZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb24uIExldCdzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgc3BlY2lmaWNhbGx5LCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEknbSBleHBlY3RpbmcgdGhpcyBtYWNybyB0byBlbmNhcHN1bGF0ZSB0aGUgbG9naWMgZm9yIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgc2VxdWVuY2Ugb2YgQlBGIGluc3RydWN0aW9ucyB0aGF0IHJlcHJlc2VudCBhIG1vdmUgb3BlcmF0aW9uIGludm9sdmluZyBhIHBlci1DUFUgdmFyaWFibGUncyBhZGRyZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHByb3Blcmx5IGludGVycHJldCBCUEYgYnl0ZWNvZGUuIEknbSBob3BpbmcgaXQncyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgbWF5YmUgY2hlY2tpbmcgZm9yIHNwZWNpZmljIG9wY29kZSBjb21iaW5hdGlvbnMgYW5kIHJlZ2lzdGVyIHVzYWdlLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggdGhpcyBzdHVmZiwgb2YgY291cnNlLCBzbyBJJ20gcHJlcGFyZWQgZm9yIHNvbWUgcG90ZW50aWFsIGJpdHdpc2Ugb3BlcmF0aW9ucyBvciBwb2ludGVyIGFyaXRobWV0aWMgY2hlY2tzIHdpdGhpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoaXMgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHZhcmlhdGlvbnMgb2YgcGVyLWNwdSBhY2Nlc3MsIHN1Y2ggYXMgdmlhIHRoZSBgUEVSQ1BVX0dFVGAgbWFjcm8sIG9yIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgYXJyYXkgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjQ2LjExMjE4NTM3OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0XFx0LmltbSAgID0gMCB9KVxcbiAyMDE6XFx0XFxuIDIwMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCkgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IEJQRl9BRERSX1BFUkNQVTtcXG4gMjA1OlxcdH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0LyogU2hvcnQgZm9ybSBvZiBtb3YsIGRzdF9yZWcgPSBpbW0zMiAqL1xcbiAyMDg6XFx0XFxuIDIwOTpcXHQjZGVmaW5lIEJQRl9NT1Y2NF9JTU0oRFNULCBJTU0pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTA6XFx0XFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMTpcXHRcXHRcXHQuY29kZSAgPSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX0ssXFx0XFx0XFxcXFxcbiAyMTI6XFx0XFx0XFx0LmRzdF9yZWcgPSBEU1QsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTM6XFx0XFx0XFx0LnNyY19yZWcgPSAwLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjE0OlxcdFxcdFxcdC5vZmYgICA9IDAsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTU6XFx0XFx0XFx0LmltbSAgID0gSU1NIH0pXFxuIDIxNjpcXHRcXG4gMjE3OlxcdCNkZWZpbmUgQlBGX01PVjMyX0lNTShEU1QsIElNTSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxODpcXHRcXHQoKHN0cnVjdCBicGZfaW5zbikge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjE5OlxcdFxcdFxcdC5jb2RlICA9IEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX0ssXFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODo0Ni4xMTIzNzE1MzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3NDQ3NjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIEluc3RydWN0aW9uIEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEJQRiBpbnN0cnVjdGlvbiwgc3BlY2lmaWNhbGx5IGBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1hgIHdpdGggYG9mZiA9PSBCUEZfQUREUl9QRVJDUFVgLiBJIHJlY29nbml6ZSB0aGlzIHBhdHRlcm47IGl0J3Mgc29tZXRoaW5nIHRoZSB2ZXJpZmllciBnZW5lcmF0ZXMgb3IgdXNlcyBpbnRlcm5hbGx5IHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoZSBjb250ZXh0IGlzIHRoaXMgbmV3IHRlc3QsIGB2ZXJpZmllcl9wZXJjcHVfYWRkci5jYCwgd2hpY2ggdXRpbGl6ZXMgYHI1ID0gJVtwZXJjcHVfZGF0YV0gbGw7IHIwID0gKih1MzIgKikocjUgKyAwKTtgLiBXYWl0IGEgc2Vjb25k4oCmIHRoYXQgYHI1ID0gJVtwZXJjcHVfZGF0YV0gbGxgIGxvb2tzIGEgbG90IGxpa2UgYW4gYGxkX2ltbTY0YCBpbnN0cnVjdGlvbi5cblxuVGhlIHRlc3QncyBjb21tZW50IGlzIGtleSBoZXJlOiBcIkFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvdyB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC5cIiBTbywgdGhlIHZlcmlmaWVyIGlzIGVpdGhlciByZXBsYWNpbmcgdGhlIGBsZF9pbW02NGAgb3IgZm9sbG93aW5nIGl0IHdpdGggdGhpcyBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbi4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyB0aGlzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gd2hlcmUgYEJQRl9BRERSX1BFUkNQVWAgaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gdGhlIHZlcmlmaWVyJ3MgY29kZS4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHNlcXVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjUxLjU4Njg1MTU4MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzODY1MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9BRERSX1BFUkNQVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Rpc2FzbS5jPTE2OT1zdGF0aWMgYm9vbCBpc19hZGRyX3NwYWNlX2Nhc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9kaXNhc20uYy0xNzYtICogZHN0X3JlZyA9IHNyY19yZWcgKyBcXHUwMDNjcGVyY3B1X2Jhc2Vfb2ZmXFx1MDAzZVxcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTc3OiAqIEJQRl9BRERSX1BFUkNQVSBpcyB1c2VkIGFzIGEgc3BlY2lhbCBpbnNuLVxcdTAwM2VvZmYgdmFsdWUuXFxua2VybmVsL2JwZi9kaXNhc20uYy0xNzgtICovXFxua2VybmVsL2JwZi9kaXNhc20uYzoxNzk6I2RlZmluZSBCUEZfQUREUl9QRVJDUFVcXHQoLTEpXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODAtXFxua2VybmVsL2JwZi9kaXNhc20uYz0xODE9c3RhdGljIGlubGluZSBib29sIGlzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODIte1xcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTgzOlxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XFxua2VybmVsL2JwZi9kaXNhc20uYy0xODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODo1Mi4yODA3MjE1NTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMDk3MjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIEJQRiB2ZXJpZmllciBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IGl0IGhhbmRsZXMgcGVyLUNQVSBhZGRyZXNzIG1hbmlwdWxhdGlvbiwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgcHJlc2VuY2Ugb2YgYEJQRl9BRERSX1BFUkNQVWAgb3IsIGV2ZW4gYmV0dGVyLCBhIGZ1bmN0aW9uIGxpa2UgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYC4gVGhvc2Ugd2lsbCBiZSBteSBrZXkgaW5kaWNhdG9ycy4gVGhpcyBzaG91bGQgZ2V0IG1lIHJpZ2h0IHRvIHRoZSBoZWFydCBvZiBob3cgaXQgdmFsaWRhdGVzIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVhbGluZyB3aXRoIHBlci1DUFUgZGF0YS4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHN0YXJ0LCBhcyBJIGtub3cgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvciBpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6NTUuODgxNjk3MTc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODc3NjE0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0FERFJfUEVSQ1BVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6NTUuOTcwNDg0MDA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTAxMDg1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQlBGIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIGZvciBgQlBGX0FERFJfUEVSQ1BVYC4gSSAqdGhvdWdodCogaXQgd2FzIGluIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYCwgYnV0IHRoYXQgZG9lc24ndCBmZWVsIHJpZ2h0LiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgaXQncyBtb3JlIGxpa2VseSBpbiBvbmUgb2YgdGhlIGhlYWRlciBmaWxlcywgcmlnaHQ/IFNwZWNpZmljYWxseSwgSSdkIGJldCBpdCdzIHR1Y2tlZCBhd2F5IGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBvciwgZXZlbiBtb3JlIGxpa2VseSwgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAuIEdvdHRhIGNoZWNrIHRob3NlIGxvY2F0aW9ucyBmaXJzdC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgQlBGIGRlZmluaXRpb25zIHVzdWFsbHkgcmVzaWRlLCBhdCB0aGUgdmVyeSBjb3JlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRob3NlIGluY2x1ZGVzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6NTkuODIwNTk2MDUxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDI0MzY1MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0FERFJfUEVSQ1BVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmg9NDA9c3RydWN0IGN0bF90YWJsZV9oZWFkZXI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE4OS0gKiBkc3RfcmVnID0gc3JjX3JlZyArIFxcdTAwM2NwZXJjcHVfYmFzZV9vZmZcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxOTA6ICogQlBGX0FERFJfUEVSQ1BVIGlzIHVzZWQgYXMgYSBzcGVjaWFsIGluc24tXFx1MDAzZW9mZiB2YWx1ZS5cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE5MS0gKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjE5MjojZGVmaW5lIEJQRl9BRERSX1BFUkNQVVxcdCgtMSlcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE5My1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTk4LVxcdFxcdC5zcmNfcmVnID0gU1JDLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjE5OTpcXHRcXHQub2ZmICAgPSBCUEZfQUREUl9QRVJDUFUsXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAwLVxcdFxcdC5pbW0gICA9IDAgfSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MjAyPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDMte1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjA0OlxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxOTowMC43NjMwNDAwMDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMTUzMTk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGX01PVjY0X1BFUkNQVV9SRUcgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgQlBGX01PVjY0X1BFUkNQVV9SRUdgIGlzIGJlaW5nIGxldmVyYWdlZC4gSSB3YW50IHRvIHNlZSB0aGlzIGluc3RydWN0aW9uIGluIGFjdGlvbi4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBnb2luZyB0byBiZSBhIHF1aWNrLCB0YXJnZXRlZCBjb2RlIHNlYXJjaC4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBCUEYgcHJvZ3JhbXMgdGhhdCBhcmUgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggcGVyLUNQVSBkYXRhLCB3aGljaCBpcyB3aGF0IHRoaXMgb3Bjb2RlIHNpZ25pZmllcy4gSSBzaG91bGQgZXhwZWN0IHRvIGZpbmQgdGhpcyBpbnN0cnVjdGlvbiBpbiBwbGFjZXMgdGhhdCBhcmUgZGVhbGluZyB3aXRoIG1ldHJpY3MgY29sbGVjdGlvbiwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgb3IgYW55dGhpbmcgcmVsYXRlZCB0byBwZXItQ1BVIHJlc291cmNlIHRyYWNraW5nIGFuZCBhY2Nlc3MuIEknbGwgcHJvYmFibHkgbG9vayBpbnRvIHRyYWNpbmcgcHJvZ3JhbXMsIG5ldHdvcmsgZmlsdGVyIHByb2dyYW1zLiBUaGlzIG9wY29kZSBpcyBwcmV0dHkgc3BlY2lmaWMsIHNvIGEgc3RyYWlnaHRmb3J3YXJkIGdyZXAgc2hvdWxkIGRvIHRoZSB0cmljayB0byBzZWUgd2hhdCBpbnRlcmVzdGluZyBwcm9ncmFtcyBhcmUgd3JpdHRlbiB0aGF0IG1ha2UgdXNlIG9mIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjA1LjA2NDU3NTA2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDM3ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NT1Y2NF9QRVJDUFVfUkVHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJyYXltYXAuYz0yOTQ9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zMTgtXFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzozMTk6XFx0Kmluc24rKyA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzIwLVxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNTAzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2My1cXHRcXHRcXHRpbnNuX2J1ZlswXSA9IGluc25bMV07XFxua2VybmVsL2JwZi9maXh1cHMuYzoxODY0OlxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVxcdFxcdFxcdGNudCA9IDI7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzYtXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgKHUzMikodW5zaWduZWQgbG9uZylcXHUwMDI2Y3B1X251bWJlcik7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTc3OlxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE3OC1cXHRcXHRcXHRpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxOTgtXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgKHUzMikodW5zaWduZWQgbG9uZylcXHUwMDI2Y3VycmVudF90YXNrKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxOTk6XFx0XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjAwLVxcdFxcdFxcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDE0PXN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MjctXFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0Mjg6XFx0Kmluc24rKyA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxOTowNS4xODE2MTY3MTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjM0MTA2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEpJVCBDb21waWxlciBCdWcgaW4geDg2IEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBhbmQgaXQgc2VlbXMgbGlrZSBgQlBGX01PVjY0X1BFUkNQVV9SRUdgIGlzIGNydWNpYWwgaW4gYGJwZl9kb19taXNjX2ZpeHVwc2AuIEl0J3MgcmlnaHQgdGhlcmUsIHBhdGNoaW5nIHVwIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBlci1DUFUgbWFwcy4gVGhlIHRlc3QgY29kZSBjb21tZW50LCBcIkFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsXCIgcGVyZmVjdGx5IGxpbmVzIHVwIHdpdGggdGhpcy5cblxuU28sIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nOiBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBTcGVjaWZpY2FsbHksIHdoZW4gYG1vdl9wZXJjcHVfYWRkcmAgaXMgSklUdGVkLCBhbmQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGhhcHBlbnMgdG8gYmUgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIGxpa2UgUjgtUjE1LCB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9uIGlzIG1lc3NlZCB1cC4gSW5zdGVhZCBvZiBhZGRpbmcgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSBpbnRlbmRlZCBleHRlbmRlZCByZWdpc3RlciwgaXQncyBhZGRpbmcgaXQgdG8gdGhlIGxvd2VyIHBhcnQgb2YgdGhhdCByZWdpc3RlciAoUkFYIGluc3RlYWQgb2YgUjgsIGZvciBleGFtcGxlKS4gVGhpcyBtZWFucyB0aGUgSklUIGNvbXBpbGVyIGlzIHJlYWRpbmcgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLCBhbmQgaXQncyBhbHNvIGNoYW5naW5nIHRoZSBTSUIgYmFzZSByZWdpc3RlciB3aGljaCBvbmx5IGFtcGxpZmllcyB0aGlzIGlzc3VlLlxuXG5UaGlzIGlzIGEgc2VyaW91cyBpc3N1ZS4gSXQgbWVhbnMgdGhlIEJQRiBwcm9ncmFtIHJlYWRzIGZyb20gb3Igd3JpdGVzIHRvIHRoZSB3cm9uZyBtZW1vcnkgYWRkcmVzcywgd2hpY2ggY2FuIGNhdXNlIGEga2VybmVsIGNyYXNoIG9yLCB3b3JzZSwgYSBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIGNvbmZpcm0gYW5kIGV4cGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpc3N1ZS5cblxuVG8gZnV6eiB0aGlzIGVmZmVjdGl2ZWx5LCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gQlBGIHByb2dyYW1zIHRoYXQgYXJlIGxldmVyYWdpbmcgcGVyLUNQVSBtYXBzIG9yIHZhcmlhYmxlcy4gQW5kLCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3NlcyBhcmUgbG9hZGVkIGludG8gZXh0ZW5kZWQgcmVnaXN0ZXJzIChSOC1SMTUpLiBUaGUgZml4LCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgc2hvdWxkIGJlIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZG9faml0YCBmdW5jdGlvbiwgYW5kIG1heWJlIGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuVGltZSB0byBjaGVjayB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYC4gSSdsbCBuZWVkIGBDT05GSUdfQlBGX0pJVGAsIG9idmlvdXNseS4gQW5kIHNpbmNlIHRoZSBidWcgaXMgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX1NNUGAgYmxvY2ssIEknbGwgbmVlZCBgQ09ORklHX1NNUGAgZW5hYmxlZCB0b28uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBmb3IgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyByZWxhdGVkIHRvIGAjaWZkZWYgQ09ORklHX1NNUGAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6MTUuMzQ1MDMwODExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzkzNzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX1NNUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2MTM9c3RhdGljIHZvaWQgZW1pdF9wcml2X2ZyYW1lX3B0cih1OCAqKnBwcm9nLCB2b2lkIF9fcGVyY3B1ICpwcml2X2ZyYW1lX3B0cilcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjIwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjIxOiNpZmRlZiBDT05GSUdfU01QXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MjItXFx0LyogYWRkIFxcdTAwM2NyOVxcdTAwM2UsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV0gKi9cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM1LVxcdFxcdFxcdFxcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTM2OiNpZmRlZiBDT05GSUdfU01QXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzctXFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjE1LjQyMjk4MjgzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDM5MDAxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zLCBmb3JtdWxhdGVkIGFzIGlmIHRoZXkncmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqTXkgQlBGIEpJVCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgY29uZmlybWluZyB0aGUgb2J2aW91czogYENPTkZJR19TTVBgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuIFdlIG5lZWQgYSBzeXN0ZW0gY2FwYWJsZSBvZiBoYW5kbGluZyBtdWx0aXBsZSBDUFVzIGZvciB0aGlzIHRvIGhhdmUgYW55IHJlYWwtd29ybGQgYmVuZWZpdC4gVGhlbiwgY29uc2lkZXJpbmcgd2hhdCB3ZSdyZSBhaW1pbmcgZm9yLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuOyBpdCdzIHRoZSBmb3VuZGF0aW9uIHdlJ3JlIGJ1aWxkaW5nIG9uLiBBbmQsIHRvIGFjdHVhbGx5ICpkbyogdGhlIEpJVCBjb21waWxhdGlvbiwgYENPTkZJR19CUEZfSklUYCBpcyBub24tbmVnb3RpYWJsZSwgb2YgY291cnNlLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBzeW1ib2xzLCB0aGUgcG9pbnRzIG9mIGZvY3VzLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIGBGb2N1c1N5bWJvbHNgLi4uXG5cbk9rYXksIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IGNsZWFyLiBgZG9faml0YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIGRvbid0IG5lZWQgZ2xvYmFsIHZpc2liaWxpdHkgZm9yIHRoYXQuIE5vdywgd2hlcmUgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgcmVhbCBob29rIGludG8gdGhlIEpJVCBwcm9jZXNzPyBBaCwgdGhlcmUgaXQgaXM6IGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMuIE5vdyBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBKSVQgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MDIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxOToyMS4zNjY4ODY1MDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTczNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTUwPXN0cnVjdCB4NjRfaml0X2RhdGEge1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5NjEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM5NjI6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjIxLjQ1MzA2ODU1M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUyMDAyMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqQlBGIENvZGUgR2VuZXJhdGlvbjogVGhlIENvcmUgRmxvdyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQlBGIEpJVCBjb21waWxhdGlvbiwgYW5kIGFzIEkgc3VzcGVjdGVkLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGVudHJ5IHBvaW50LiBUaGF0J3MgdGhlIGdhdGUsIHRoZSBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCBhcyBJIHJlY2FsbC4gTm93LCB0aGlua2luZyBhYm91dCBob3cgd2UgZ2V0IHRvIHRob3NlIHNwZWNpZmljIGluc3RydWN0aW9ucyB3ZSdyZSBpbnRlcmVzdGVkIGluLCBJIGNhbiBzZWUgdGhhdCB0aGUgdmVyaWZpZXIgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIGdlbmVyYXRpbmcgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYC4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUgYW5kIHJlY2FsbGluZyB0aGF0IHNwZWNpZmljIGluc3RydWN0aW9uLiBBbmQsIGFzIEkgcmVtZW1iZXIsIHRoZSBmdW5jdGlvbiBgYnBmX2RvX21pc2NfZml4dXBzYCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AgaXMgdGhlIHByZWNpc2UgcG9pbnQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIGlzIGFjdHVhbGx5IGdlbmVyYXRlZC4gVGhhdCBmdW5jdGlvbiBoYW5kbGVzIG1pc2NlbGxhbmVvdXMgZml4dXBzIGFuZCBvcHRpbWl6YXRpb25zLCBhbmQgaXQgc2VlbXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSB2ZXJpZmllcidzIGNoZWNrcyBsZWFkIHRvIHRoZSBpbnN0cnVjdGlvbiBiZWluZyBlbWl0dGVkLiBJdCdzIGFsbCBzdGFydGluZyB0byBjb21lIHRvZ2V0aGVyIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIEkgaGFkIGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6MjUuNjA1MDczOTQ1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjE2MDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9maXh1cHMuYz02Mz1zdGF0aWMgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc4LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6Nzk6XFx0LyogYWRkcmVzcyBzcGFjZSBjYXN0cyBjb252ZXJ0ZWQgdG8gQlBGX0FMVSwgc2VlIGJwZl9kb19taXNjX2ZpeHVwcygpICovXFxua2VybmVsL2JwZi9maXh1cHMuYy04MC1cXHRpZiAoaXNfYWRkcl9zcGFjZV9jYXN0MzIocHJvZywgaW5zbikpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0NzQ9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwMi0gKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MDM6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwNC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAxNTM9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNzQtXFx0aWYgKHJldCA9PSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM3NTpcXHRcXHRyZXQgPSBicGZfZG9fbWlzY19maXh1cHMoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjI1LjY3NzIzOTAzNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzM2OTUwODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCdzIGFib3V0IHRoZSBCUEYgdmVyaWZpZXIgZW50cnkgcG9pbnQsIGBicGZfY2hlY2tgLiBJJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSByZWxldmFudCBzeW1ib2xzLCBhbmQgSSdsbCBhZGQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2RvX21pc2NfZml4dXBzYCB0byBteSBcIkZvY3VzU3ltYm9sc1wiIGxpc3QuIFdhaXQgYSBzZWNvbmQsIEkgbmVlZCB0byBjb25maXJtIGBicGZfZG9fbWlzY19maXh1cHNgIGlzbid0IHN0YXRpYy4gWWVwLCBmb3VuZCBpdCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AuIEdvb2QsIGl0J3MgZ2xvYmFsLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEVzc2VudGlhbGx5LCB0aGlzIGZpeGVzIGFuIGlzc3VlIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gSXQncyBhYm91dCBob3cgdGhlIFJFWCBwcmVmaXggaXMgYmVpbmcgaGFuZGxlZCBmb3IgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb25zIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIHRob3NlIGV4dGVuZGVkIHJlZ2lzdGVycywgUjggdGhyb3VnaCBSMTUuIFRoZSBwcm9ibGVtIGlzLCB0aGlzIGluY29ycmVjdCBlbmNvZGluZyBpcyBsZWFkaW5nIHRvIHRoZSBKSVQgZW1pdHRpbmcgY29kZSB0aGF0IHNjcmV3cyB1cCB0aGUgcGVyLUNQVSBvZmZzZXQgY2FsY3VsYXRpb24uIEVzc2VudGlhbGx5LCBpdCdzIGRvaW5nIHRoZSBhZGQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCB0aGVuIHJlYWRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeC5cblxuSW4gdGVybXMgb2YgaW1wYWN0LCBpdCBjb3VsZCBiZSBhIHBvdGVudGlhbCBleHBsb2l0ISBUaGF0IGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFxuXG5JJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgZm9yIHRlc3Rpbmc6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBTTVBgLiBBbmQgYWdhaW4sIG15IFwiRm9jdXNTeW1ib2xzXCIgYXJlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9kb19taXNjX2ZpeHVwc2AuXG5cbkp1c3QgYSBzYW5pdHkgY2hlY2s6IEkgbmVlZCB0byBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGF0IGBCUEZfSklUYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxOTozMy4wMTQxOTMxNDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTk1OTE1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjM1LjI3Mzc4ODY1NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTMzOTI5OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEJ1ZyBDb250ZXh0KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBzcG90LW9uIOKAkyB3ZSBkZWZpbml0ZWx5IG5lZWQgYEJQRl9KSVRgLiBUaGF0J3MgZnVuZGFtZW50YWwgZm9yIEpJVCBjb21waWxhdGlvbiwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiBmb3IgdXNpbmcgQlBGIGluIGdlbmVyYWwuIFRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmIENPTkZJR19TTVBgIGluZGljYXRlcyB0aGF0IHRoaXMgYnVnIGlzIGxpa2VseSBTTVAtcmVsYXRlZCwgcG9pbnRpbmcgdXMgdG93YXJkcyBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGxvb2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSB0ZXN0IGNhc2UgdXRpbGl6ZXMgYF9fYXJjaF94ODZfNjRgLCB3aGljaCBzdWdnZXN0cyB0aGUgcHJvYmxlbSBpcyBzcGVjaWZpYyB0byB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZS4gSSBzZWUgdGhlIGJ1ZyBsaXZlcyB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoIGNvbmZpcm1zIHRoaXMuIFdlIGRvbid0IHN0cmljdGx5ICpuZWVkKiB0byBleHBsaWNpdGx5IGRlY2xhcmUgdGhlIGFyY2hpdGVjdHVyZSBpbiBgRW5hYmxlQ29uZmlnc2AuIEFsdGhvdWdoLCBpbmNsdWRpbmcgYFg4Nl82NGAgaXNuJ3QgYSBiYWQgaWRlYSwgYWx0aG91Z2ggdHlwaWNhbGx5IGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBvdXIgeDg2IGZ1enplcnMuXG5cbkknbSBub3cgZ29pbmcgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIGlzIHV0aWxpemVkIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgaXRzIGJyb2FkZXIgdXNhZ2Ugd2lsbCBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQgaW4gbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6NDEuNDA3NzIxOTk4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQzMjM0Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc25faXNfbW92X3BlcmNwdV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMzAyPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU1LVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEzNTY6XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTctXFx0XFx0XFx0aWYgKGRzdCAhPSBzcmMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTY3PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjYxOlxcdFxcdFxcdGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihcXHUwMDI2aW5zbltpXSkpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU01QKSkge1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVxcdFxcdFxcdGlmIChyZCAhPSBycylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzNC1cXHRcXHRcXHRcXHQvKiBtb3YgXFx1MDAzY2RzdFxcdTAwM2UsIFxcdTAwM2NzcmNcXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDEtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDI6c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjQzLjg1MDk2Mjk1NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzUxMzgyMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeDg2IEpJVCBCdWcgRml4KipcblxuT2theSwgc28gdGhpcyBpcyBzcGVjaWZpY2FsbHkgYW4gaXNzdWUgd2l0aGluIHRoZSB4ODYgSnVzdC1Jbi1UaW1lIChKSVQpIGNvbXBpbGVyLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LiBUaGUgY29yZSBwcm9ibGVtIGFwcGVhcnMgdG8gYmUgYSBmbGF3IGluIHRoZSB3YXkgdGhlIFJFWCBwcmVmaXggaXMgYmVpbmcgaGFuZGxlZCBkdXJpbmcgdGhlIGVuY29kaW5nIG9mIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucywgYnV0IG9ubHkgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgb25lIG9mIHRoZSBleHRlbmRlZCByZWdpc3RlcnMgKFI4LVIxNSkuIFRoaXMgbWVhbnMgdGhlIEpJVCBpcyBtaXNpbnRlcnByZXRpbmcgd2hlcmUgdG8gd3JpdGUgdGhlIHBlci1DUFUgb2Zmc2V0LlxuXG5Fc3NlbnRpYWxseSwgdGhlIGZpeCBpcyBjb3JyZWN0aW5nIGFuIGluY29ycmVjdCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIOKAkyBhZGRpbmcgdGhlIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIgYW5kIHN1YnNlcXVlbnRseSByZWFkaW5nIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24uIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgbmFzdHkgY29uc2VxdWVuY2VzIOKAkyBhIGtlcm5lbCBjcmFzaCwgb3IgZXZlbiB3b3JzZSwgYSBwb3RlbnRpYWwgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhICpyZWFsKiBidWcgZml4IHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIHRob3JvdWdoIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuXG5cblRpbWUgdG8gbG9nIHRoaXMgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5NiwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6NTAuMjAyMzQ4OTk2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NzAzMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBSRVggcHJlZml4IGlzIGluY29ycmVjdGx5IGVuY29kZWQgZm9yIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gVGhpcyBjYXVzZXMgdGhlIEpJVCB0byBlbWl0IGFuIGluc3RydWN0aW9uIHRoYXQgYWRkcyB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVnIGluIEJQRiwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBSRVggcHJlZml4IGlzIGluY29ycmVjdGx5IGVuY29kZWQgZm9yIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gVGhpcyBjYXVzZXMgdGhlIEpJVCB0byBlbWl0IGFuIGluc3RydWN0aW9uIHRoYXQgYWRkcyB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVnIGluIEJQRiwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6NTAuMzQ3MDYyOTU1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5Nzc1NDc2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjUwLjM0OTA2MTQxNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDE5NTc1MDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCBpdCBjb3JyZWN0cyB0aGUgUkVYIHByZWZpeCBlbWlzc2lvbiBmb3IgdGhlIGBhZGRgIGluc3RydWN0aW9uIHdoZW4gcmVzb2x2aW5nIHBlci1DUFUgYWRkcmVzc2VzIGludG8gZXh0ZW5kZWQgcmVnaXN0ZXJzIChsaWtlIHI4LXIxNSkuIFRoZSBwcmV2aW91cyBlbmNvZGluZyBjYXVzZWQgdGhlIEpJVCB0byBhcHBseSB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyLlxcblxcblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZlNjhhZDc5OTVmZDIyZGE5ZjM0ODc2NDJhMTZlMDBmODhkODllOWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAyMToxNzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTkzNSw3ICsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcbiBcdFx0XHRcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xuICNpZmRlZiBDT05GSUdfU01QXG4gXHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuLVx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpO1xuK1x0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuIFx0XHRcdFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xuIFx0XHRcdFx0RU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IDgxMTNmZWE3YmE4NmMuLjY0YWM0OWFkNjdlNjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtNzksNiArNzksNyBAQFxuICNpbmNsdWRlIFwidmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2JwZl9mYXN0Y2FsbC5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfb3Jfam1wMzJfay5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfcGVyY3B1X2FkZHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX3ByZWNpc2lvbi5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfcHJldmVudF9tYXBfbG9va3VwLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9wcml2YXRlX3N0YWNrLnNrZWwuaFwiXG5AQCAtMjQwLDYgKzI0MSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9uZXRmaWx0ZXJfY3R4KHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9uZXRmaWx0ZXJfY3R4KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZSh2b2lkKSAgICB7IFJVTih2ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnBmX2Zhc3RjYWxsKHZvaWQpICAgICAgICAgeyBSVU4odmVyaWZpZXJfYnBmX2Zhc3RjYWxsKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9vcl9qbXAzMl9rKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9vcl9qbXAzMl9rKTsgfVxuK3ZvaWQgdGVzdF92ZXJpZmllcl9wZXJjcHVfYWRkcih2b2lkKSAgICAgICAgICB7IFJVTih2ZXJpZmllcl9wZXJjcHVfYWRkcik7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJlY2lzaW9uKHZvaWQpICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJlY2lzaW9uKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAodm9pZCkgICB7IFJVTih2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXApOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByaXZhdGVfc3RhY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX3ByaXZhdGVfc3RhY2spOyB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk2MmZhZWE4ZWY5MDBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXG5AQCAtMCwwICsxLDExNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2ludCBwZXJjcHVfZGF0YSBTRUMoXCIucGVyY3B1XCIpO1xuK1xuKyNpZiBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KVxuK1xuKy8qXG4rICogQW4gbGRfaW1tNjQgb2YgYSBwZXItQ1BVIG1hcCB2YWx1ZSBpcyBmb2xsb3dlZCBieSBhIG1vdl9wZXJjcHVfYWRkciB0aGF0XG4rICogcmV1c2VzIHRoZSBzYW1lIHJlZ2lzdGVyLCBzbyB0aGUgcmVnaXN0ZXIgdGhlIGFkZHJlc3MgbGFuZHMgaW4gZGVjaWRlcyBob3dcbisgKiB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4gT24geDg2IFI1LCBSNywgUjggYW5kIFI5IGFyZSB0aGUgZXh0ZW5kZWRcbisgKiByZWdpc3RlcnMsIHdob3NlIGhpZ2ggYml0IG5lZWRzIFJFWC5SIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIHNpdHMgaW5cbisgKiBNb2RSTS5yZWcuIENoZWNrIG9uZSBwcm9ncmFtIHBlciBleHRlbmRlZCByZWdpc3Rlciwgc2luY2UgZ2V0dGluZyB0aGVcbisgKiBwcmVmaXggd3JvbmcgcmVzb2x2ZXMgdGhlIGFkZHJlc3MgaW50byB3aGljaGV2ZXIgcmVnaXN0ZXIgc2hhcmVzIHRoZSBsb3dcbisgKiB0aHJlZSBiaXRzIGluc3RlYWQuXG4rICovXG4rXG4rU0VDKFwicmF3X3RwXCIpXG4rX19kZXNjcmlwdGlvbihcInBlci1DUFUgYWRkcmVzcyBpbnRvIHI1XCIpXG4rX19zdWNjZXNzXG4rX19hcmNoX3g4Nl82NFxuK19faml0ZWQoXCJcdGFkZHFcdCVnczp7ey4qfX0sICVyOFwiKVxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I1KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjUgPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHI1ICsgMCk7XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjdcIilcbitfX3N1Y2Nlc3NcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIlx0YWRkcVx0JWdzOnt7Lip9fSwgJXIxM1wiKVxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I3KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjcgPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHI3ICsgMCk7XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjhcIilcbitfX3N1Y2Nlc3NcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIlx0YWRkcVx0JWdzOnt7Lip9fSwgJXIxNFwiKVxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I4KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjggPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHI4ICsgMCk7XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjlcIilcbitfX3N1Y2Nlc3NcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIlx0YWRkcVx0JWdzOnt7Lip9fSwgJXIxNVwiKVxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I5KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjkgPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHI5ICsgMCk7XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBBIHJlZ2lzdGVyIHRoYXQgbmVlZHMgbm8gUkVYLlIsIHRvIGNhdGNoIGEgZml4IHRoYXQgb3ZlcmNvcnJlY3RzLiAqL1xuK1NFQyhcInJhd190cFwiKVxuK19fZGVzY3JpcHRpb24oXCJwZXItQ1BVIGFkZHJlc3MgaW50byByMVwiKVxuK19fc3VjY2Vzc1xuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiXHRhZGRxXHQlZ3M6e3suKn19LCAlcmRpXCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjEodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMSA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjEgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKyNlbHNlXG4rXG4rU0VDKFwicmF3X3RwXCIpXG4rX19kZXNjcmlwdGlvbihcInBlcmNwdSBhZGRyIGR1bW15XCIpXG4rX19zdWNjZXNzXG4raW50IGR1bW15X3Rlc3Qodm9pZClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6NTAuMzQ5MDYzMTA1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTk1NzIyMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoaXMgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZml4OiBgYWRkXzFtb2RgIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gVGhpcyBpcyBhIGNsYXNzaWMgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIHRoYXQsIGlmIG5vdCBhZGRyZXNzZWQsIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNvZGUgZ2VuZXJhdGlvbi4gSSBjYW4gc2VlIHRoYXQgdGhlIGJ1ZyBpcyBhYm91dCByZXNvbHZpbmcgcGVyLUNQVSBhZGRyZXNzZXMgY29ycmVjdGx5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGUgaW5jb3JyZWN0IGVuY29kaW5nIHdvdWxkIGNhdXNlIHRoZSBvZmZzZXQgdG8gYmUgYXBwbGllZCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIsIGVzc2VudGlhbGx5IHJlc3VsdGluZyBpbiB0aGUgQlBGIHByb2dyYW0gYWNjZXNzaW5nIG1lbW9yeSBhdCBhbiBpbmNvcnJlY3QgYWRkcmVzcy5cblxuSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidXQgaXQncyBtb3JlIG9mIGEgbWVtb3J5IGNvcnJ1cHRpb24vb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaXNzdWUuIFRoZSBCUEYgcHJvZ3JhbSB3b3VsZCBiZSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byBhbiBhcmJpdHJhcnkgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjb3VsZCBiZSBhbnl0aGluZy4gQSBkZWVwZXIgbG9vayBjb25maXJtcyB0aGF0IHRoZSBidWcgZG9lc24ndCBkaXJlY3RseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSB3YXkgS01TQU4gd291bGQgYmUgcmVxdWlyZWQgdG8gZGV0ZWN0LiBUaGlzIGlzIGFuIGVuY29kaW5nIGJ1ZyB3aGVyZSB0aGUgSklUIGdlbmVyYXRlcyBhbiBpbmNvcnJlY3QgaW5zdHJ1Y3Rpb24gc2VxdWVuY2U7IHRoZSByZXN1bHRpbmcgaW5jb3JyZWN0IHByb2dyYW0gd291bGQgdGhlbiBjYXVzZSB0aGUgb3V0LW9mLWJvdW5kcyBvciBhcmJpdHJhcnkgYWNjZXNzLiBLQVNBTiBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aG9zZSBtZW1vcnkgYWNjZXNzZXMuIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbGlrZSBtaXNzaW5nIGBtZW1zZXRgIGNhbGxzLCB3aGljaCBpc24ndCB0aGUgY29uY2VybiBoZXJlLlxuXG5Hb2luZyBiYWNrIHRvIHRoZSBjb2RlLCBJIHNlZSB0aGF0IGBhZGRfMW1vZGAgbGlrZWx5IGhhZCBhIHByb2JsZW0gY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBSRVggcHJlZml4IGZvciBleHRlbmRlZCByZWdpc3RlcnMuIFRoZSByZXBsYWNlbWVudCB3aXRoIGBhZGRfMm1vZGAgY2xlYXJseSBwcm92aWRlcyBhIHByb3BlciBlbmNvZGluZy4gSSBkb24ndCBuZWVkIHRvIGRpZyB0b28gZGVlcCBpbnRvIHRoZSBtaW51dGlhZSBvZiBgYWRkXzFtb2RgIGFuZCBgYWRkXzJtb2RgOyB0aGUgY29yZSBvZiBpdCBpcyBhIGZ1bmRhbWVudGFsIGluc3RydWN0aW9uIGVuY29kaW5nIGZpeC4gVGhlIG1haW4gdGhpbmcgaXMgdGhhdCB0aGlzIGlzIGEgSklUIGJ1Zy4gVGhpcyBraW5kIG9mIGJ1ZyBsZWFkcyB0byBpbmNvcnJlY3QgZXhlY3V0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgQlBGIGNvZGUuIFRoaXMgY2FuIGxlYWQgdG8gY3Jhc2hlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIGV0Yy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgdGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLiBUaGlzIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLlxuXG5NeSBmaW5hbCByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGNydWNpYWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZmxhdyBpbiB0aGUgeDg2IEJQRiBKSVQuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gd2l0aGluIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgb3JpZ2luYWwgaW5jb3JyZWN0IGVuY29kaW5nIGNhdXNlZCB0aGUgSklUIHRvIGFwcGx5IHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIsIHdoaWNoIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMuIEJlY2F1c2UgaXQgZG9lcyBub3QgY3JlYXRlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBJbnN0ZWFkLCBzdWNoIG1lbW9yeSBjb3JydXB0aW9ucyBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFNvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTAsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjIwOjA0LjU0NDc4OTUwMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCBpdCBjb3JyZWN0cyB0aGUgUkVYIHByZWZpeCBlbWlzc2lvbiBmb3IgdGhlIGBhZGRgIGluc3RydWN0aW9uIHdoZW4gcmVzb2x2aW5nIHBlci1DUFUgYWRkcmVzc2VzIGludG8gZXh0ZW5kZWQgcmVnaXN0ZXJzIChsaWtlIHI4LXIxNSkuIFRoZSBwcmV2aW91cyBlbmNvZGluZyBjYXVzZWQgdGhlIEpJVCB0byBhcHBseSB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyLlxcblxcblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gZm9yIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgcHJldmlvdXMgZW5jb2RpbmcgY2F1c2VkIHRoZSBKSVQgdG8gYXBwbHkgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3Rlci5cXG5cXG5UaGlzIGJ1ZyBsZWFkcyB0byB0aGUgQlBGIHByb2dyYW0gYWNjZXNzaW5nIGluY29ycmVjdCBtZW1vcnkgYWRkcmVzc2VzLCB3aGljaCBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBvciBhcmJpdHJhcnkgbWVtb3J5IGFjY2VzcyB2dWxuZXJhYmlsaXR5LiBTdWNoIG1lbW9yeSBjb3JydXB0aW9ucyBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbWlzc2luZyB6ZXJvaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 20:42:56 +0000 UTC FinishedAt: 2026-08-14 21:20:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "409a9bda0429c63f326576cbe6c1f6c4430a8d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "409a9bda0429c63f326576cbe6c1f6c4430a8d09", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "BPF_JIT", "SMP" ], "series_id": "da54bf81-34b7-4796-b870-80e2d7fe6a4d" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_int_jit_compile", "bpf_do_misc_fixups" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBTcGVjaWZpY2FsbHksIGl0IGNvcnJlY3RzIHRoZSBSRVggcHJlZml4IGVtaXNzaW9uIGZvciB0aGUgYGFkZGAgaW5zdHJ1Y3Rpb24gd2hlbiByZXNvbHZpbmcgcGVyLUNQVSBhZGRyZXNzZXMgaW50byBleHRlbmRlZCByZWdpc3RlcnMgKGxpa2UgcjgtcjE1KS4gVGhlIHByZXZpb3VzIGVuY29kaW5nIGNhdXNlZCB0aGUgSklUIHRvIGFwcGx5IHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIuXG5cblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgd2hlcmUgdGhlIFJFWCBwcmVmaXggaXMgaW5jb3JyZWN0bHkgZW5jb2RlZCBmb3IgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGlzIGNhdXNlcyB0aGUgSklUIHRvIGVtaXQgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBhZGRzIHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIgYW5kIHJlYWRzIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY291bGQgbGVhZCB0byBhIGtlcm5lbCBjcmFzaCBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBidWcgaW4gQlBGLCBhbmQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmU2OGFkNzk5NWZkMjJkYTlmMzQ4NzY0MmExNmUwMGY4OGQ4OWU5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIxOjE3OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTkzNSw3ICYjNDM7MTkzNSw3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqXG4gXHRcdFx0XHRFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTtcbiAjaWZkZWYgQ09ORklHX1NNUFxuIFx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbi1cdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtcbiYjNDM7XHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4gXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4gXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggODExM2ZlYTdiYTg2Yy4uNjRhYzQ5YWQ2N2U2MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC03OSw2ICYjNDM7NzksNyBAQFxuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX25ldGZpbHRlcl9yZXRjb2RlLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX2JwZl9mYXN0Y2FsbC5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9vcl9qbXAzMl9rLnNrZWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9wZXJjcHVfYWRkci5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt2ZXJpZmllcl9wcmVjaXNpb24uc2tlbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dmVyaWZpZXJfcHJldmVudF9tYXBfbG9va3VwLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3ZlcmlmaWVyX3ByaXZhdGVfc3RhY2suc2tlbC5oXCYjMzQ7XG5AQCAtMjQwLDYgJiM0MzsyNDEsNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX2N0eCh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX2N0eCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUodm9pZCkgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX2JwZl9mYXN0Y2FsbCh2b2lkKSAgICAgICAgIHsgUlVOKHZlcmlmaWVyX2JwZl9mYXN0Y2FsbCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfb3Jfam1wMzJfayh2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfb3Jfam1wMzJfayk7IH1cbiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX3BlcmNwdV9hZGRyKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX3BlcmNwdV9hZGRyKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmVjaXNpb24odm9pZCkgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9wcmVjaXNpb24pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCh2b2lkKSAgIHsgUlVOKHZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJpdmF0ZV9zdGFjayh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJpdmF0ZV9zdGFjayk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTYyZmFlYThlZjkwMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmNcbkBAIC0wLDAgJiM0MzsxLDExNCBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2ludCBwZXJjcHVfZGF0YSBTRUMoXCYjMzQ7LnBlcmNwdVwmIzM0Oyk7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NilcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdFxuJiM0MzsgKiByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvd1xuJiM0MzsgKiB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4gT24geDg2IFI1LCBSNywgUjggYW5kIFI5IGFyZSB0aGUgZXh0ZW5kZWRcbiYjNDM7ICogcmVnaXN0ZXJzLCB3aG9zZSBoaWdoIGJpdCBuZWVkcyBSRVguUiBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBzaXRzIGluXG4mIzQzOyAqIE1vZFJNLnJlZy4gQ2hlY2sgb25lIHByb2dyYW0gcGVyIGV4dGVuZGVkIHJlZ2lzdGVyLCBzaW5jZSBnZXR0aW5nIHRoZVxuJiM0MzsgKiBwcmVmaXggd3JvbmcgcmVzb2x2ZXMgdGhlIGFkZHJlc3MgaW50byB3aGljaGV2ZXIgcmVnaXN0ZXIgc2hhcmVzIHRoZSBsb3dcbiYjNDM7ICogdGhyZWUgYml0cyBpbnN0ZWFkLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjVcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlZ3M6e3suKn19LCAlcjhcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I1KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHI1ID0gJVtwZXJjcHVfZGF0YV0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1MzIgKikocjUgJiM0MzsgMCk7XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjdcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlZ3M6e3suKn19LCAlcjEzXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yNyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyNyA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9ICoodTMyICopKHI3ICYjNDM7IDApO1x0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7cmF3X3RwXCYjMzQ7KVxuJiM0MztfX2Rlc2NyaXB0aW9uKFwmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHI4XCYjMzQ7KVxuJiM0MztfX3N1Y2Nlc3NcbiYjNDM7X19hcmNoX3g4Nl82NFxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkcVx0JWdzOnt7Lip9fSwgJXIxNFwmIzM0OylcbiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjgodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjggPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjAgPSAqKHUzMiAqKShyOCAmIzQzOyAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByOVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO19fYXJjaF94ODZfNjRcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZHFcdCVnczp7ey4qfX0sICVyMTVcJiMzNDspXG4mIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFwmIzM0O1x0XHRcdFx0XHRcXFxuJiM0MztcdHI5ID0gJVtwZXJjcHVfZGF0YV0gbGw7XHRcdFx0XHRcXFxuJiM0MztcdHIwID0gKih1MzIgKikocjkgJiM0MzsgMCk7XHRcdFx0XHRcXFxuJiM0MztcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XCYjMzQ7XHQ6XG4mIzQzO1x0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEEgcmVnaXN0ZXIgdGhhdCBuZWVkcyBubyBSRVguUiwgdG8gY2F0Y2ggYSBmaXggdGhhdCBvdmVyY29ycmVjdHMuICovXG4mIzQzO1NFQyhcJiMzNDtyYXdfdHBcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjFcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRxXHQlZ3M6e3suKn19LCAlcmRpXCYjMzQ7KVxuJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yMSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcJiMzNDtcdFx0XHRcdFx0XFxcbiYjNDM7XHRyMSA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbiYjNDM7XHRyMCA9ICoodTMyICopKHIxICYjNDM7IDApO1x0XHRcdFx0XFxcbiYjNDM7XHRleGl0O1x0XHRcdFx0XHRcdFxcXG4mIzQzO1wmIzM0O1x0OlxuJiM0MztcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3Jhd190cFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDtwZXJjcHUgYWRkciBkdW1teVwmIzM0OylcbiYjNDM7X19zdWNjZXNzXG4mIzQzO2ludCBkdW1teV90ZXN0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAgICYjMzQ7YnBmX2RvX21pc2NfZml4dXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgUkVYIHByZWZpeCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkIGZvciBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIFRoaXMgY2F1c2VzIHRoZSBKSVQgdG8gZW1pdCBhbiBpbnN0cnVjdGlvbiB0aGF0IGFkZHMgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3RlciBhbmQgcmVhZHMgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjb3VsZCBsZWFkIHRvIGEga2VybmVsIGNyYXNoIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBhIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGJ1ZyBpbiBCUEYsIGFuZCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmZTY4YWQ3OTk1ZmQyMmRhOWYzNDg3NjQyYTE2ZTAwZjg4ZDg5ZTllCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTc6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTkzNSw3ICYjNDM7MTkzNSw3IEBAIHN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqCiAJCQkJRU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7CiAjaWZkZWYgQ09ORklHX1NNUAogCQkJCS8qIGFkZCAmbHQ7ZHN0Jmd0OywgZ3M6WyZsdDtvZmYmZ3Q7XSAqLwotCQkJCUVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTsKJiM0MzsJCQkJRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpOwogCQkJCUVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTsKIAkJCQlFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpJmFtcDt0aGlzX2NwdV9vZmYsIDQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwppbmRleCA4MTEzZmVhN2JhODZjLi42NGFjNDlhZDY3ZTYzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKQEAgLTc5LDYgJiM0Mzs3OSw3IEBACiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX25ldGZpbHRlcl9yZXRjb2RlLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX2JwZl9mYXN0Y2FsbC5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9vcl9qbXAzMl9rLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9wZXJjcHVfYWRkci5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9wcmVjaXNpb24uc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfcHJldmVudF9tYXBfbG9va3VwLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3ByaXZhdGVfc3RhY2suc2tlbC5oJiMzNDsKQEAgLTI0MCw2ICYjNDM7MjQxLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX25ldGZpbHRlcl9jdHgodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX25ldGZpbHRlcl9jdHgpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUodm9pZCkgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfYnBmX2Zhc3RjYWxsKHZvaWQpICAgICAgICAgeyBSVU4odmVyaWZpZXJfYnBmX2Zhc3RjYWxsKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX29yX2ptcDMyX2sodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX29yX2ptcDMyX2spOyB9CiYjNDM7dm9pZCB0ZXN0X3ZlcmlmaWVyX3BlcmNwdV9hZGRyKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX3BlcmNwdV9hZGRyKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByZWNpc2lvbih2b2lkKSAgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX3ByZWNpc2lvbik7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAodm9pZCkgICB7IFJVTih2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXApOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJpdmF0ZV9zdGFjayh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJpdmF0ZV9zdGFjayk7IH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uOTYyZmFlYThlZjkwMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jCkBAIC0wLDAgJiM0MzsxLDExNCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O3ZtbGludXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9oZWxwZXJzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsKJiM0MztpbnQgcGVyY3B1X2RhdGEgU0VDKCYjMzQ7LnBlcmNwdSYjMzQ7KTsKJiM0MzsKJiM0MzsjaWYgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NikKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdAomIzQzOyAqIHJldXNlcyB0aGUgc2FtZSByZWdpc3Rlciwgc28gdGhlIHJlZ2lzdGVyIHRoZSBhZGRyZXNzIGxhbmRzIGluIGRlY2lkZXMgaG93CiYjNDM7ICogdGhlIEpJVCBlbmNvZGVzIHRoZSBhZGQuIE9uIHg4NiBSNSwgUjcsIFI4IGFuZCBSOSBhcmUgdGhlIGV4dGVuZGVkCiYjNDM7ICogcmVnaXN0ZXJzLCB3aG9zZSBoaWdoIGJpdCBuZWVkcyBSRVguUiBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBzaXRzIGluCiYjNDM7ICogTW9kUk0ucmVnLiBDaGVjayBvbmUgcHJvZ3JhbSBwZXIgZXh0ZW5kZWQgcmVnaXN0ZXIsIHNpbmNlIGdldHRpbmcgdGhlCiYjNDM7ICogcHJlZml4IHdyb25nIHJlc29sdmVzIHRoZSBhZGRyZXNzIGludG8gd2hpY2hldmVyIHJlZ2lzdGVyIHNoYXJlcyB0aGUgbG93CiYjNDM7ICogdGhyZWUgYml0cyBpbnN0ZWFkLgomIzQzOyAqLwomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByNSYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJWdzOnt7Lip9fSwgJXI4JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjUodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjUgPSAlW3BlcmNwdV9kYXRhXSBsbDsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHI1ICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjcmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVnczp7ey4qfX0sICVyMTMmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yNyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyNyA9ICVbcGVyY3B1X2RhdGFdIGxsOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjcgJiM0MzsgMCk7CQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByOCYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJWdzOnt7Lip9fSwgJXIxNCYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I4KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXI4ID0gJVtwZXJjcHVfZGF0YV0gbGw7CQkJCVwKJiM0MzsJcjAgPSAqKHUzMiAqKShyOCAmIzQzOyAwKTsJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW1fYWRkcihwZXJjcHVfZGF0YSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHI5JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklZ3M6e3suKn19LCAlcjE1JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjkodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjkgPSAlW3BlcmNwdV9kYXRhXSBsbDsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHI5ICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIHJlZ2lzdGVyIHRoYXQgbmVlZHMgbm8gUkVYLlIsIHRvIGNhdGNoIGEgZml4IHRoYXQgb3ZlcmNvcnJlY3RzLiAqLwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByMSYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJWdzOnt7Lip9fSwgJXJkaSYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3IxKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXIxID0gJVtwZXJjcHVfZGF0YV0gbGw7CQkJCVwKJiM0MzsJcjAgPSAqKHUzMiAqKShyMSAmIzQzOyAwKTsJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW1fYWRkcihwZXJjcHVfZGF0YSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2Vsc2UKJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7cGVyY3B1IGFkZHIgZHVtbXkmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztpbnQgZHVtbXlfdGVzdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5MwoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFg4NiBCUEYgSklUIENvbXBpbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyBtb2RpZnlpbmcgYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AuIFRoYXQmIzM5O3MgdGhlIHg4NiBCUEYgSnVzdC1Jbi1UaW1lIGNvbXBpbGVyLCByaWdodD8gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIHBlci1DUFUgYWRkcmVzcyBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbiB0aGUgYGRvX2ppdGAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIHJpZ2h0IGhlcmU6IGEgc3VidGxlIGFsdGVyYXRpb24gaW4gdGhlIGFzc2VtYmx5IG91dHB1dC4gSSBzZWUgYSBjaGFuZ2UgZnJvbSBgRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpYCB0byBgRU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpYC4gUmlnaHQgYXdheSBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHg4NiBvcGNvZGVzIGFuZCBhZGRyZXNzaW5nIG1vZGVzLi4uIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBpcyBjcml0aWNhbC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGNoYW5naW5nIGhvdyB0aGUgY29tcGlsZXIgY2FsY3VsYXRlcyB0aGUgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgdGhlIHBlci1DUFUgdmFyaWFibGUuIFdoYXQmIzM5O3MgaXQgZG9pbmc/IEkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB0aGUgc2VtYW50aWNzIG9mIHRoYXQgY29kZSBhbmQgd2hhdCBpdCYjMzk7cyB0cnlpbmcgdG8gYWNoaWV2ZS4gSXMgdGhpcyBhIGJ1ZyBmaXg/IEFuIG9wdGltaXphdGlvbj8gT3IgbWF5YmUgaXQmIzM5O3MgZW5hYmxpbmcgc3VwcG9ydCBmb3IgYSBuZXcgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSB3aG9sZSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RU1JVDJcXCgweDY1LCBhZGRfMW1vZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwNQoJCQkJCQkJb3V0cHV0OiA0OQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgQWZ0ZXJtYXRoIG9mIGEgQ29kZSBEZXBsb3ltZW50KioKClJpZ2h0LCBzbyB0aGUgcGF0Y2ggaXMgYWxyZWFkeSBsaXZlIOKAkyBnb29kLiBTYXZlcyBtZSBhIHN0ZXAuIE5vdywgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBxdWlja2VzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEkmIzM5O2xsIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIHRoZSBzaWduYXR1cmUgYEVNSVQyKDB4NjUsIGFkZF8ybW9kYC4gVGhpcyBzcGVjaWZpYyBjb21iaW5hdGlvbiBvZiB0aGUgb3AtY29kZSBhbmQgdGhlIHN1YnJvdXRpbmUgbmFtZSBpcyB1c3VhbGx5IGEgZGVhZCBnaXZlYXdheSBmb3IgdGhlIHNlY3Rpb24gaW4gdGhlIGNvZGUgdGhhdCBjb25jZXJucyBtZS4gRGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUsIGAweDY1YCB0eXBpY2FsbHkgaW5kaWNhdGVzIHRoYXQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gY29uZGl0aW9uYWwgYnJhbmNoaW5nLCBvciBwZXJoYXBzIGludGVycnVwdCBoYW5kbGluZyBoYXMgb2NjdXJyZWQuIFRoZSBmYWN0IHRoYXQgYGFkZF8ybW9kYCBpcyBpbnZvbHZlZCBzdWdnZXN0cyBhIGN1c3RvbSBtb2RpZmljYXRpb24gb2YgYSBzdGFuZGFyZCBtYXRoZW1hdGljYWwgZnVuY3Rpb24sIHdoaWNoIGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgYSByZWNlbnQgYnVnLiBUaGlzIHNlYXJjaCB3aWxsIGxpa2VseSBsYW5kIG1lIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgY2hhbmdlcyBhcmUgbW9zdCBjb25jZW50cmF0ZWQsIGFsbG93aW5nIG1lIHRvIHN0YXJ0IGV2YWx1YXRpbmcgdGhlaXIgZWZmZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VNSVQyXFwoMHg2NSwgYWRkXzJtb2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM3LVx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTM4Olx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzktXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgxOAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbnZlc3RpZ2F0aW5nIGBkb19qaXRgIEFyb3VuZCBMaW5lIDE5MzgqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGRvX2ppdGAgYXJvdW5kIGxpbmUgMTkzOC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgc3BlY2lmaWMgbGluZSBpcyBhIGtleSBwb2ludCB0byBleGFtaW5lIHdpdGhpbiB0aGUgSnVzdC1Jbi1UaW1lIGNvbXBpbGF0aW9uIHByb2Nlc3MuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBmb3Igc29tZXRoaW5nIHNpZ25pZmljYW50IGhlcmU6IHBlcmhhcHMgYSBjcnVjaWFsIHRyYW5zZm9ybWF0aW9uIHN0ZXAsIGEgc3BlY2lmaWMgY29kZSBnZW5lcmF0aW9uIGNhbGwsIGEgYm91bmRhcnkgY29uZGl0aW9uIGNoZWNrLCBvciBtYXliZSBldmVuIGEgcGxhY2Ugd2hlcmUgYSBwYXJ0aWN1bGFyIG9wdGltaXphdGlvbiBpcyBiZWluZyBhcHBsaWVkIChvciwgbW9yZSBjb25jZXJuaW5nbHksICpub3QqIGJlaW5nIGFwcGxpZWQpLiBHaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgZHluYW1pYyBjb21waWxhdGlvbiBpdHNlbGYuIEkgd2lsbCBzdGFydCBieSB0cmFjaW5nIHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyB1c2VkIGF0IHRoYXQgbG9jYXRpb24gYW5kIHdoYXQgaXMgYmVpbmcgZG9uZSB3aXRoIHRoZSByZXN1bHRpbmcgZGF0YS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGNvbXBpbGVyJiMzOTtzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLCBpbnRlcm1lZGlhdGUgY29kZSBnZW5lcmF0aW9uLCBvciB0aGUgZmluYWwgbWFjaGluZSBjb2RlIG91dHB1dC4gVGltZSB0byBkaWcgaW4gYW5kIGRlY2lwaGVyIHRoZSBsb2dpYzsgYSBxdWljayBza2ltIHRocm91Z2ggdGhlIHN1cnJvdW5kaW5nIGxpbmVzIG1pZ2h0IGdpdmUgbWUgdGhlIGJyb2FkZXIgY29udGV4dCB0aGF0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkyMDpcdFxuMTkyMTpcdFx0XHRcdFx0LyogeG9yIHIxMSwgcjExICovXG4xOTIyOlx0XHRcdFx0XHRFTUlUMygweDRELCAweDMxLCAweERCKTtcbjE5MjM6XHRcbjE5MjQ6XHRcdFx0XHRcdC8qIHRlc3QgZHN0X3JlZzMyLCBkc3RfcmVnMzI7IGNoZWNrIGlmIGxvd2VyIDMyLWJpdCBhcmUgemVybyAqL1xuMTkyNTpcdFx0XHRcdFx0bWF5YmVfZW1pdF9tb2QoXHUwMDI2cHJvZywgZHN0X3JlZywgZHN0X3JlZywgZmFsc2UpO1xuMTkyNjpcdFx0XHRcdFx0RU1JVDIoMHg4NSwgYWRkXzJyZWcoMHhDMCwgZHN0X3JlZywgZHN0X3JlZykpO1xuMTkyNzpcdFxuMTkyODpcdFx0XHRcdFx0LyogY21vdmUgcjExLCBkc3RfcmVnOyBpZiBzbywgc2V0IGRzdF9yZWcgdG8gemVybyAqL1xuMTkyOTpcdFx0XHRcdFx0LyogV0FSTklORzogSW50ZWwgc3dhcHBlZCBzcmMvZHN0IHJlZ2lzdGVyIGVuY29kaW5nIGluIENNT1ZjYyAhISEgKi9cbjE5MzA6XHRcdFx0XHRcdG1heWJlX2VtaXRfbW9kKFx1MDAyNnByb2csIEFVWF9SRUcsIGRzdF9yZWcsIHRydWUpO1xuMTkzMTpcdFx0XHRcdFx0RU1JVDMoMHgwRiwgMHg0NCwgYWRkXzJyZWcoMHhDMCwgQVVYX1JFRywgZHN0X3JlZykpO1xuMTkzMjpcdFx0XHRcdFx0YnJlYWs7XG4xOTMzOlx0XHRcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuMTkzNDpcdFx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4xOTM1Olx0XHRcdFx0XHRFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTtcbjE5MzY6XHQjaWZkZWYgQ09ORklHX1NNUFxuMTkzNzpcdFx0XHRcdFx0LyogYWRkIFx1MDAzY2RzdFx1MDAzZSwgZ3M6W1x1MDAzY29mZlx1MDAzZV0gKi9cbjE5Mzg6XHRcdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcbjE5Mzk6XHRcdFx0XHRcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcbjE5NDA6XHRcdFx0XHRcdEVNSVQoKHUzMikodW5zaWduZWQgbG9uZylcdTAwMjZ0aGlzX2NwdV9vZmYsIDQpO1xuMTk0MTpcdCNlbmRpZlxuMTk0MjpcdFx0XHRcdFx0YnJlYWs7XG4xOTQzOlx0XHRcdFx0fVxuMTk0NDpcdFx0XHRcdGZhbGx0aHJvdWdoO1xuMTk0NTpcdFx0XHRjYXNlIEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX1g6XG4xOTQ2Olx0XHRcdFx0aWYgKGluc24tXHUwMDNlb2ZmID09IDApXG4xOTQ3Olx0XHRcdFx0XHRlbWl0X21vdl9yZWcoXHUwMDI2cHJvZyxcbjE5NDg6XHRcdFx0XHRcdFx0ICAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXG4xOTQ5Olx0XHRcdFx0XHRcdCAgICAgZHN0X3JlZywgc3JjX3JlZyk7XG4xOTUwOlx0XHRcdFx0ZWxzZVxuMTk1MTpcdFx0XHRcdFx0ZW1pdF9tb3ZzeF9yZWcoXHUwMDI2cHJvZywgaW5zbi1cdTAwM2VvZmYsXG4xOTUyOlx0XHRcdFx0XHRcdCAgICAgICBCUEZfQ0xBU1MoaW5zbi1cdTAwM2Vjb2RlKSA9PSBCUEZfQUxVNjQsXG4xOTUzOlx0XHRcdFx0XHRcdCAgICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcbjE5NTQ6XHRcdFx0XHRicmVhaztcbjE5NTU6XHRcbjE5NTY6XHRcdFx0XHQvKiBuZWcgZHN0ICovXG4xOTU3Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9ORUc6XG4xOTU4Olx0XHRcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX05FRzpcbjE5NTk6XHRcdFx0XHRtYXliZV9lbWl0XzFtb2QoXHUwMDI2cHJvZywgZHN0X3JlZyxcbjE5NjA6XHRcdFx0XHRcdFx0QlBGX0NMQVNTKGluc24tXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0KTtcbjE5NjE6XHRcdFx0XHRFTUlUMigweEY3LCBhZGRfMXJlZygweEQ4LCBkc3RfcmVnKSk7XG4xOTYyOlx0XHRcdFx0YnJlYWs7XG4xOTYzOlx0XG4xOTY0Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9BREQgfCBCUEZfSzpcbjE5NjU6XHRcdFx0Y2FzZSBCUEZfQUxVIHwgQlBGX1NVQiB8IEJQRl9LOlxuMTk2NjpcdFx0XHRjYXNlIEJQRl9BTFUgfCBCUEZfQU5EIHwgQlBGX0s6XG4xOTY3Olx0XHRcdGNhc2UgQlBGX0FMVSB8IEJQRl9PUiB8IEJQRl9LOlxuMTk2ODpcdFx0XHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6XG4xOTY5Olx0XHRcdGNhc2UgQlBGX0FMVTY0IHwgQlBGX0FERCB8IEJQRl9LOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIHRoZSBSRVggUHJlZml4IEVuY29kaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgZG9faml0YCByZWxhdGVkIHRvIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAuIEl0JiMzOTtzIGEgc2ltcGxlLCBidXQgY3J1Y2lhbCwgYWRqdXN0bWVudC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIHJlcGxhY2luZyBgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZylgIHdpdGggYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gVGhlIHJlYXNvbj8gRW5jb2RpbmcgdGhlIFJFWCBwcmVmaXggY29ycmVjdGx5LCBlc3BlY2lhbGx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMgbGlrZSByOCB0aHJvdWdoIHIxNSwgd2hpY2ggYXJlIGJleW9uZCB0aGUgdHlwaWNhbCA4IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuCgpUaGUgcHJvYmxlbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0aGF0IGBhZGRfMW1vZGAgYXBwZWFycyB0byBvbmx5IHVzZSB0aGUgbG93ZXIgMyBiaXRzIG9mIHRoZSBgZHN0X3JlZ2AgdG8gc2V0IHRoZSBNb2RSL00gYnl0ZS4gQnV0IHdhaXQsIGFtIEkgcmlnaHQ/IERvZXMgYGFkZF8xbW9kYCBvbmx5IHNldCB0aGUgUkVYLkIgYml0PyBJdCBzZWVtcyBsaWtlIGBhZGRfMm1vZGAsIGJ5IGFjY2VwdGluZyBib3RoIGEgc291cmNlIGFuZCBkZXN0aW5hdGlvbiByZWdpc3RlciwgaXMgdGhlIGJldHRlciBmaXQgaGVyZSBiZWNhdXNlIGl0IGNvcnJlY3RseSBzZXRzIGJvdGggdGhlIFJFWC5SIGFuZCBSRVguQiBiaXRzIGluIHRoZSBwcmVmaXguIFRoYXQmIzM5O3Mga2V5IGZvciB0aGUgZXh0ZW5kZWQgcmVnaXN0ZXJzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9ucyBvZiBib3RoIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgdG8gdmVyaWZ5IGV4YWN0bHkgaG93IHRoZXkgaGFuZGxlIHRoZSBSRVggcHJlZml4IGFuZCB0aGUgcmVnaXN0ZXIgZW5jb2RpbmcuIEEgcXVpY2sgdmVyaWZpY2F0aW9uIHdpbGwgc29saWRpZnkgdGhlIHJlYXNvbmluZyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBhZGRfMW1vZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2NzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiB0aGVzZSB3ZXJlIG15IHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGBhZGRfMW1vZGAgaW4gdGhlIEJQRiBKSVQgQ29tcGlsZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGFkZF8xbW9kYCB0aGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hlcmUgdGhlIGhlY2sgaXMgdGhpcyBkZWZpbmVkPyYjMzQ7IEdpdmVuIHRoZSBjb250ZXh0LCBteSBtb25leSYjMzk7cyBvbiBpdCBiZWluZyBhIGZ1bmN0aW9uIG9yLCBtb3JlIGxpa2VseSwgYSBtYWNybywgdHVja2VkIGF3YXkgd2l0aGluIHRoZSB4ODYtc3BlY2lmaWMgQlBGIEpJVCBjb21waWxlciBjb2RlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgIGZpcnN0LiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBKSVQgY29tcGlsYXRpb24gaGVscGVycy4gQnV0LCBJIHdvbiYjMzk7dCBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgaXQgYmVpbmcgZGVjbGFyZWQgaW4gYSByZWxhdGVkIGhlYWRlciBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSBhcyB3ZWxsLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FkZF8xbW9kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MjQzPXN0YXRpYyBib29sIGlzX2F4cmVnKHUzMiByZWcpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0OC0vKiBBZGQgbW9kaWZpZXJzIGlmICYjMzk7cmVnJiMzOTsgbWFwcyB0byB4ODYtNjQgcmVnaXN0ZXJzIFI4Li5SMTUgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyNDk6c3RhdGljIHU4IGFkZF8xbW9kKHU4IGJ5dGUsIHUzMiByZWcpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjUwLXtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTM4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTMyKHU4ICoqcHByb2csIGJvb2wgc2lnbl9wcm9wYWdhdGUsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk0OS1cdFx0LyogJiMzOTttb3YgJXJheCwgaW1tMzImIzM5OyBzaWduIGV4dGVuZHMgaW1tMzIgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5NTA6XHRcdGIxID0gYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTUxLVx0XHRiMiA9IDB4Qzc7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk3MS1cdGlmIChpc19lcmVnKGRzdF9yZWcpKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk3MjpcdFx0RU1JVDEoYWRkXzFtb2QoMHg0MCwgZHN0X3JlZykpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk3My1cdEVNSVQxX29mZjMyKGFkZF8xcmVnKDB4QjgsIGRzdF9yZWcpLCBpbW0zMik7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTk3OD1zdGF0aWMgdm9pZCBlbWl0X21vdl9pbW02NCh1OCAqKnBwcm9nLCB1MzIgZHN0X3JlZyxcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTk1LVx0XHQvKiBtb3ZhYnNxIHJheCwgaW1tNjQgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo5OTY6XHRcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCBhZGRfMXJlZygweEI4LCBkc3RfcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTk3LVx0XHRFTUlUKGltbTMyX2xvLCA0KTtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTEwMj1zdGF0aWMgdm9pZCBtYXliZV9lbWl0XzFtb2QodTggKipwcHJvZywgdTMyIHJlZywgYm9vbCBpczY0KVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTA2LVx0aWYgKGlzNjQpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEwNzpcdFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgcmVnKSk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEwOC1cdGVsc2UgaWYgKGlzX2VyZWcocmVnKSlcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxMTA5Olx0XHRFTUlUMShhZGRfMW1vZCgweDQwLCByZWcpKTtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xMTEwLVx0KnBwcm9nID0gcHJvZztcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMjEtXHRcdFx0XHQvKiBFbWl0ICYjMzk7YnN3YXAgcmF4JiMzOTsgdG8gc3dhcCA4IGJ5dGVzICovXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MjIyMjpcdFx0XHRcdEVNSVQzKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweDBGLFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMjMtXHRcdFx0XHQgICAgICBhZGRfMXJlZygweEM4LCBkc3RfcmVnKSk7XG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODItXHRcdFx0fVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyODM6XHRcdFx0RU1JVDIoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4QzcpO1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODQtXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTM4MzM9c3RhdGljIGludCBlbWl0X2JwZl9kaXNwYXRjaGVyKHU4ICoqcHByb2csIGludCBhLCBpbnQgYiwgczY0ICpwcm9ncywgdTggKmltYWdlLCB1OCAqYnVmKVxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODQyLVx0XHQgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODQzOlx0XHRFTUlUMShhZGRfMW1vZCgweDQ4LCBCUEZfUkVHXzMpKTtcdC8qIGNtcCByZHgsZnVuYyAqL1xuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NDQtXHRcdGlmICghaXNfc2ltbTMyKHByb2dzW2FdKSlcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzg2My1cdHBpdm90ID0gKGIgLSBhKSAvIDI7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6Mzg2NDpcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1x0XHQvKiBjbXAgcmR4LGZ1bmMgKi9cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODY1LVx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYSAmIzQzOyBwaXZvdF0pKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzM2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkNoZWNraW5nIE1vZHVsZSBEZWZpbml0aW9ucyoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgc2FtZSBwYWdlIHdpdGggdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2Nrcy4gQmVmb3JlIEkgc3RhcnQgdHJ5aW5nIHRvIHJlYXNvbiBhYm91dCB0aGUgaW50ZXJhY3Rpb25zIG9yIGhpZ2hlci1sZXZlbCBsb2dpYywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGZvdW5kYXRpb25hbCBkZWZpbml0aW9ucyBhcmUgd2hhdCBJIGV4cGVjdC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyB0aGUgYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBkZWZpbml0aW9ucy4gVGhpcyBmZWVscyBhbG1vc3QgdG9vIGJhc2ljLCBidXQgYmV0dGVyIHNhZmUgdGhhbiBzb3JyeSwgYW5kIGl0IHdpbGwgcHJldmVudCBhbnkgbGF0ZXIsIGFuZCBlbWJhcnJhc3NpbmcsIG1pc3Rha2VzLiBXZSBuZWVkIHRoZSBkZXRhaWxzIHRvIGJlIGNsZWFyIGJlZm9yZSB3ZSBjYW4gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0MDpcdFx0XHRcdCAgQklUKEJQRl9SRUdfRlApKTtcbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0c3RhdGljIGJvb2wgaXNfYXhyZWcodTMyIHJlZylcbiAyNDQ6XHR7XG4gMjQ1Olx0XHRyZXR1cm4gcmVnID09IEJQRl9SRUdfMDtcbiAyNDY6XHR9XG4gMjQ3Olx0XG4gMjQ4Olx0LyogQWRkIG1vZGlmaWVycyBpZiAmIzM5O3JlZyYjMzk7IG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXG4gMjQ5Olx0c3RhdGljIHU4IGFkZF8xbW9kKHU4IGJ5dGUsIHUzMiByZWcpXG4gMjUwOlx0e1xuIDI1MTpcdFx0aWYgKGlzX2VyZWcocmVnKSlcbiAyNTI6XHRcdFx0Ynl0ZSB8PSAxO1xuIDI1MzpcdFx0cmV0dXJuIGJ5dGU7XG4gMjU0Olx0fVxuIDI1NTpcdFxuIDI1NjpcdHN0YXRpYyB1OCBhZGRfMm1vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMilcbiAyNTc6XHR7XG4gMjU4Olx0XHRpZiAoaXNfZXJlZyhyMSkpXG4gMjU5Olx0XHRcdGJ5dGUgfD0gMTtcbiAyNjA6XHRcdGlmIChpc19lcmVnKHIyKSlcbiAyNjE6XHRcdFx0Ynl0ZSB8PSA0O1xuIDI2MjpcdFx0cmV0dXJuIGJ5dGU7XG4gMjYzOlx0fVxuIDI2NDpcdFxuIDI2NTpcdHN0YXRpYyB1OCBhZGRfM21vZCh1OCBieXRlLCB1MzIgcjEsIHUzMiByMiwgdTMyIGluZGV4KVxuIDI2NjpcdHtcbiAyNjc6XHRcdGlmIChpc19lcmVnKHIxKSlcbiAyNjg6XHRcdFx0Ynl0ZSB8PSAxO1xuIDI2OTpcdFx0aWYgKGlzX2VyZWcoaW5kZXgpKVxuIDI3MDpcdFx0XHRieXRlIHw9IDI7XG4gMjcxOlx0XHRpZiAoaXNfZXJlZyhyMikpXG4gMjcyOlx0XHRcdGJ5dGUgfD0gNDtcbiAyNzM6XHRcdHJldHVybiBieXRlO1xuIDI3NDpcdH1cbiAyNzU6XHRcbiAyNzY6XHQvKiBFbmNvZGUgJiMzOTtkc3RfcmVnJiMzOTsgcmVnaXN0ZXIgaW50byB4ODYtNjQgb3Bjb2RlICYjMzk7Ynl0ZSYjMzk7ICovXG4gMjc3Olx0c3RhdGljIHU4IGFkZF8xcmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnKVxuIDI3ODpcdHtcbiAyNzk6XHRcdHJldHVybiBieXRlICYjNDM7IHJlZzJoZXhbZHN0X3JlZ107XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMDIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlzc2VjdGluZyB0aGUgQXNzZW1ibHk6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFzc2VtYmx5IGdlbmVyYXRpb24sIGFuZCB0aGUgYGFkZF8xbW9kYCBmdW5jdGlvbiBpcyBpbW1lZGlhdGVseSBqdW1waW5nIG91dC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGl0IHNldHMgdGhlIFJFWC5CIGJpdCBpZiB0aGUgYHJlZ2AgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIHRoYXQmIzM5O3MgY3J1Y2lhbCBmb3IgYWRkcmVzc2luZyByZWdpc3RlcnMgYmV5b25kIHRoZSBzdGFuZGFyZCBvbmVzLCBhIGtleSBhc3BlY3Qgb2YgeDg2LTY0LgoKTm93LCBgYWRkXzJtb2RgIGlzIHNpbWlsYXIsIGhhbmRsaW5nIHRoZSBSRVggcHJlZml4IGJ1dCBzbGlnaHRseSBtb3JlIGNvbXBsZXg7IGl0IHNldHMgYm90aCBSRVguQiBpZiBgcjFgIGlzIGV4dGVuZGVkICphbmQqIFJFWC5SIGlmIGByMmAgaXMuIFRoZSBvcmlnaW5hbCBDIGNvZGUgc25pcHBldCBpcyB0aGUgY3J1eDoKCmBgYGMKCQkJCS8qIGFkZCAmbHQ7ZHN0Jmd0OywgZ3M6WyZsdDtvZmYmZ3Q7XSAqLwoJCQkJRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpOwoJCQkJRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpOwoJCQkJRU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKSZhbXA7dGhpc19jcHVfb2ZmLCA0KTsKYGBgCgpMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgYXNzZW1ibGluZyBhbiBgYWRkIGRzdCwgZ3M6W29mZl1gIGluc3RydWN0aW9uIC0gdGhlICYjMzQ7ZHN0JiMzNDsgaXMgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLCBhbmQgJiMzNDtnczpbb2ZmXSYjMzQ7IGlzIG1lbW9yeSBhZGRyZXNzZWQgcmVsYXRpdmUgdG8gdGhlIEdTIHNlZ21lbnQuIFRoZSBvcGNvZGUgZm9yIGFuIGBBREQgci9tNjQgdG8gcjY0YCBpbnN0cnVjdGlvbiBpcyBgMHgwM2AuIFRoZSBrZXkgdG8gdGhlIGluc3RydWN0aW9uIGlzIGluIHRoZSBzZWNvbmQgbGluZSBvZiBjb2RlLCB0aGUgYEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KWAgY2FsbCwgd2hlcmUgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBjYWxjdWxhdGVzIHRoZSBNb2RSL00gYnl0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBgYWRkXzJyZWdgIGZ1bmN0aW9uIHByZWNpc2VseS4gSXQmIzM5O3MgdGhlIGtleSB0byBjb3JyZWN0bHkgZW5jb2RpbmcgdGhpcyBpbnN0cnVjdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBleHRlbmRlZCByZWdpc3RlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzY6XHQvKiBFbmNvZGUgJiMzOTtkc3RfcmVnJiMzOTsgcmVnaXN0ZXIgaW50byB4ODYtNjQgb3Bjb2RlICYjMzk7Ynl0ZSYjMzk7ICovXG4gMjc3Olx0c3RhdGljIHU4IGFkZF8xcmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnKVxuIDI3ODpcdHtcbiAyNzk6XHRcdHJldHVybiBieXRlICYjNDM7IHJlZzJoZXhbZHN0X3JlZ107XG4gMjgwOlx0fVxuIDI4MTpcdFxuIDI4MjpcdC8qIEVuY29kZSAmIzM5O2RzdF9yZWcmIzM5OyBhbmQgJiMzOTtzcmNfcmVnJiMzOTsgcmVnaXN0ZXJzIGludG8geDg2LTY0IG9wY29kZSAmIzM5O2J5dGUmIzM5OyAqL1xuIDI4MzpcdHN0YXRpYyB1OCBhZGRfMnJlZyh1OCBieXRlLCB1MzIgZHN0X3JlZywgdTMyIHNyY19yZWcpXG4gMjg0Olx0e1xuIDI4NTpcdFx0cmV0dXJuIGJ5dGUgJiM0MzsgcmVnMmhleFtkc3RfcmVnXSAmIzQzOyAocmVnMmhleFtzcmNfcmVnXSBcdTAwM2NcdTAwM2MgMyk7XG4gMjg2Olx0fVxuIDI4NzpcdFxuIDI4ODpcdC8qIFNvbWUgMS1ieXRlIG9wY29kZXMgZm9yIGJpbmFyeSBBTFUgb3BlcmF0aW9ucyAqL1xuIDI4OTpcdHN0YXRpYyB1OCBzaW1wbGVfYWx1X29wY29kZXNbXSA9IHtcbiAyOTA6XHRcdFtCUEZfQUREXSA9IDB4MDEsXG4gMjkxOlx0XHRbQlBGX1NVQl0gPSAweDI5LFxuIDI5MjpcdFx0W0JQRl9BTkRdID0gMHgyMSxcbiAyOTM6XHRcdFtCUEZfT1JdID0gMHgwOSxcbiAyOTQ6XHRcdFtCUEZfWE9SXSA9IDB4MzEsXG4gMjk1Olx0XHRbQlBGX0xTSF0gPSAweEUwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIwOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDYzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBKSVQgQnVnIGFuZCBJdHMgRml4KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgSSYjMzk7dmUgZ290IGEgbWFqb3IgaXNzdWUuIFRoZSBgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZylgIGluc3RydWN0aW9uLi4uIHRoaXMgY2xlYXJseSBzZXRzIGBkc3RfcmVnYCBhcyB0aGUgZGVzdGluYXRpb24sIGJ1dCB0aGUga2V5IGlzIHRoYXQgYGRzdF9yZWdgIGVuZHMgdXAgaW4gdGhlIGByZWdgIGZpZWxkIG9mIHRoZSBNb2RSL00gYnl0ZS4gVGhhdCBmaWVsZCBpcyBleHRlbmRlZCBieSB0aGUgUkVYLlIgYml0LiBCdXQsIGxvb2tpbmcgYXQgdGhlICpvcmlnaW5hbCogY29kZSwgaXQgd2FzIHVzaW5nIGBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKWAuIFRoYXQgZnVuY3Rpb24gc2V0cyBSRVguQiBpZiBgZHN0X3JlZ2AgaXMgZXh0ZW5kZWQuIEJ1dCBob2xkIG9uLCBSRVguQiBleHRlbmRzIHRoZSAqci9tKiBmaWVsZCwgKm5vdCogdGhlIGByZWdgIGZpZWxkISBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcgYW5kIGNvbmZ1c2luZyBiZWNhdXNlIG9mIHRoZSBpbnRlcmFjdGlvbiBvZiBNb2RSL00gYW5kIFNJQiBieXRlcy4KCk5vdywgd2l0aCBhIE1vZFIvTSBvZiBgMHgwNGAsIHdlIGtub3cgdGhlcmUmIzM5O3MgYSBTSUIgYnl0ZSAod2hpY2ggaXMgYDB4MjVgIGluIHRoaXMgY2FzZSkuIFRoZSBTSUIgYnl0ZSBtZWFucyBgZGlzcDMyYCB3aXRoIG5vIGJhc2Ugb3IgaW5kZXgsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBKSVQsIHNvIHRoZSBgci9tYCBmaWVsZCBpc24mIzM5O3QgYWN0dWFsbHkgYSByZWdpc3RlciwgaXQganVzdCBpbXBsaWVzIGAxMDBgIChTSUIpLiBTZXR0aW5nIFJFWC5CICp3b3VsZCogY2hhbmdlIHRoZSBTSUIgYnl0ZSYjMzk7cyBiYXNlIHJlZ2lzdGVyLCBJIHRoaW5rLiBJZiBSRVguQiBpcyBzZXQgd2l0aCBNb2RSL00gYDA0YCwgdGhlbiB0aGUgU0lCIGJhc2UgaXMgZXh0ZW5kZWQuIFRoZSBTSUIgYnl0ZSBpcyBgMHgyNWAgKDAwIDEwMCAxMDEpLCB3aGVyZSB0aGUgYmFzZSBpcyBgMTAxYCAoUkJQL2Rpc3AzMikuIElmIFJFWC5CIGlzIHNldCwgdGhpcyBiYXNlIGJlY29tZXMgYDExMDFgIChSMTMpLgoKU28sIHRoZSBpc3N1ZSBpcywgaW5zdGVhZCBvZiB3cml0aW5nIHRvL3JlYWRpbmcgZnJvbSBgZGlzcDMyYCwgaXQgd291bGQgYmUgd3JpdGluZyB0by9yZWFkaW5nIGZyb20gYFtSMTMgJiM0MzsgZGlzcDMyXWAhIEFuZCwgcmVtZW1iZXIsIFJFWC5SICp3YXNuJiMzOTt0KiBzZXQsIHNvIGBkc3RfcmVnYCBnb3QgdHJ1bmNhdGVkIHRvIGl0cyBsb3dlciAzIGJpdHMuIFRoaXMgaXMgYSBkaXNhc3RlciEgRm9yIGV4YW1wbGUsIGlmIGBkc3RfcmVnYCBpcyBSOCAoZXh0ZW5kZWQgUjApLCB0aGUgY29kZSB3b3VsZCBpbmNvcnJlY3RseSB3cml0ZSB0byBSMCAoUkFYKSwgYW5kIHRoZSByZWFkIHdvdWxkIGJlIGZyb20gYGdzOltSMTMgJiM0MzsgZGlzcDMyXWAgaW5zdGVhZCBvZiBgZ3M6W2Rpc3AzMl1gLiBUaGlzIGlzIGEgaHVnZSBidWcgaW4gdGhlIEpJVCEKClRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHVzaW5nIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIGBhZGRfMm1vZGAgaXMgbXVjaCBiZXR0ZXIgYmVjYXVzZSBpdCBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgUkVYIHByZWZpeGVzLiBJdCBzZXRzIFJFWC5CIGlmIHRoZSBmaXJzdCByZWdpc3RlciAoYHIxYCwgd2hpY2ggaXMgMCkgaXMgZXh0ZW5kZWQsICphbmQqIFJFWC5SIGlmIHRoZSBzZWNvbmQgcmVnaXN0ZXIgKGBkc3RfcmVnYCkgaXMgZXh0ZW5kZWQuIFRoaXMgaXMgdGhlIGNvcnJlY3QgYmVoYXZpb3IgYmVjYXVzZSBSRVguUiBpcyBuZWVkZWQgZm9yIGBkc3RfcmVnYCBpbiB0aGlzIGNhc2UsIGFuZCBSRVguQiBpcyBjb3JyZWN0bHkgbm90IHNldC4KClRoaXMgaXMgYWJzb2x1dGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBBbnkgaW5zdHJ1Y3Rpb24gYmVpbmcgSklUdGVkIHZpYSB0aGlzIGNvZGUgY291bGQgYmUgYnJva2VuLiBEZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmchIE5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAgaXMsIHdoaWNoIHNlZW1zIHRvIGJlIHRoZSBpbnN0cnVjdGlvbiB0aGlzIGJ1ZyBpbXBhY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG1vcmUgYnJvYWRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19tb3ZfcGVyY3B1X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVx0XHRcdFx0YnJlYWs7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkzMzpcdFx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzNC1cdFx0XHRcdC8qIG1vdiBcdTAwM2Nkc3RcdTAwM2UsIFx1MDAzY3NyY1x1MDAzZSAoaWYgbmVjZXNzYXJ5KSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTc4OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIERvd24gYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgLiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbiwgb3IgcG9zc2libHkgYSBtYWNybywgcmVsYXRlZCB0byBpbnN0cnVjdGlvbiBhbmFseXNpcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbW92YCBpbnN0cnVjdGlvbnMgYW5kIHBvdGVudGlhbGx5IHNvbWV0aGluZyB0byBkbyB3aXRoIHBlci1DUFUgYWRkcmVzc2luZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8ganVzdCAqZmluZCogdGhlIGRhbW4gdGhpbmcuIFdoZXJlIGlzIGl0IGRlZmluZWQ/IElzIGl0IGluIGEgaGVhZGVyIGZpbGU/IEEgQyBmaWxlPyBJcyBpdCBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZT8gSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyAtIGBncmVwYCwgYGZpbmRgLCBvciBtYXliZSBhIHNvdXJjZSBjb2RlIG5hdmlnYXRpb24gdG9vbCB0byBwaW5wb2ludCBpdHMgbG9jYXRpb24uIFRoZSBnb2FsIGlzIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCAqaG93KiB0aGlzIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFuZCAqd2hhdCogaXQmIzM5O3MgYWN0dWFsbHkgbG9va2luZyBmb3IgaW4gYW4gaW5zdHJ1Y3Rpb24uIE9uY2UgSSBoYXZlIHRoZSBkZWZpbml0aW9uLCBJIGNhbiBzdGFydCB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19tb3ZfcGVyY3B1X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTMwMj1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUtXHRcdFx0YnJlYWs7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMzU2Olx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU3LVx0XHRcdGlmIChkc3QgIT0gc3JjKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNjE6XHRcdFx0aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKFx1MDAyNmluc25baV0pKSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4NS1cdFx0XHRicmVhaztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVx0XHRcdGlmIChyZCAhPSBycylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXHRcdFx0XHRicmVhaztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjAyOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODE1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEluc3RydWN0aW9uIEFuYWx5c2lzKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIG1hY3JvLiBJIGtub3cgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UgaGFuZGxlIHBlci1DUFUgdmFyaWFibGVzIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgd29yayB3aXRoLi4uIHdlbGwsIHlvdSBrbm93LCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gZWZmaWNpZW50IEJQRiBieXRlY29kZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb24uIExldCYjMzk7cyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHNwZWNpZmljYWxseSwgYGluY2x1ZGUvbGludXgvZmlsdGVyLmhgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIG1hY3JvIHRvIGVuY2Fwc3VsYXRlIHRoZSBsb2dpYyBmb3IgaWRlbnRpZnlpbmcgYSBzcGVjaWZpYyBzZXF1ZW5jZSBvZiBCUEYgaW5zdHJ1Y3Rpb25zIHRoYXQgcmVwcmVzZW50IGEgbW92ZSBvcGVyYXRpb24gaW52b2x2aW5nIGEgcGVyLUNQVSB2YXJpYWJsZSYjMzk7cyBhZGRyZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHByb3Blcmx5IGludGVycHJldCBCUEYgYnl0ZWNvZGUuIEkmIzM5O20gaG9waW5nIGl0JiMzOTtzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCBtYXliZSBjaGVja2luZyBmb3Igc3BlY2lmaWMgb3Bjb2RlIGNvbWJpbmF0aW9ucyBhbmQgcmVnaXN0ZXIgdXNhZ2UuIFRoZSBkZXZpbCBpcyBhbHdheXMgaW4gdGhlIGRldGFpbHMgd2l0aCB0aGlzIHN0dWZmLCBvZiBjb3Vyc2UsIHNvIEkmIzM5O20gcHJlcGFyZWQgZm9yIHNvbWUgcG90ZW50aWFsIGJpdHdpc2Ugb3BlcmF0aW9ucyBvciBwb2ludGVyIGFyaXRobWV0aWMgY2hlY2tzIHdpdGhpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiB0aGlzIGhhbmRsZXMgdGhlIGRpZmZlcmVudCB2YXJpYXRpb25zIG9mIHBlci1jcHUgYWNjZXNzLCBzdWNoIGFzIHZpYSB0aGUgYFBFUkNQVV9HRVRgIG1hY3JvLCBvciBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIGFycmF5IGl0c2VsZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdFx0LmltbSAgID0gMCB9KVxuIDIwMTpcdFxuIDIwMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4gMjAzOlx0e1xuIDIwNDpcdFx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xuIDIwNTpcdH1cbiAyMDY6XHRcbiAyMDc6XHQvKiBTaG9ydCBmb3JtIG9mIG1vdiwgZHN0X3JlZyA9IGltbTMyICovXG4gMjA4Olx0XG4gMjA5Olx0I2RlZmluZSBCUEZfTU9WNjRfSU1NKERTVCwgSU1NKVx0XHRcdFx0XHRcXFxuIDIxMDpcdFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcdFx0XHRcdFx0XFxcbiAyMTE6XHRcdFx0LmNvZGUgID0gQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9LLFx0XHRcXFxuIDIxMjpcdFx0XHQuZHN0X3JlZyA9IERTVCxcdFx0XHRcdFx0XFxcbiAyMTM6XHRcdFx0LnNyY19yZWcgPSAwLFx0XHRcdFx0XHRcXFxuIDIxNDpcdFx0XHQub2ZmICAgPSAwLFx0XHRcdFx0XHRcXFxuIDIxNTpcdFx0XHQuaW1tICAgPSBJTU0gfSlcbiAyMTY6XHRcbiAyMTc6XHQjZGVmaW5lIEJQRl9NT1YzMl9JTU0oRFNULCBJTU0pXHRcdFx0XHRcdFxcXG4gMjE4Olx0XHQoKHN0cnVjdCBicGZfaW5zbikge1x0XHRcdFx0XHRcXFxuIDIxOTpcdFx0XHQuY29kZSAgPSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9LLFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIEluc3RydWN0aW9uIEdlbmVyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQlBGIGluc3RydWN0aW9uLCBzcGVjaWZpY2FsbHkgYEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWGAgd2l0aCBgb2ZmID09IEJQRl9BRERSX1BFUkNQVWAuIEkgcmVjb2duaXplIHRoaXMgcGF0dGVybjsgaXQmIzM5O3Mgc29tZXRoaW5nIHRoZSB2ZXJpZmllciBnZW5lcmF0ZXMgb3IgdXNlcyBpbnRlcm5hbGx5IHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoZSBjb250ZXh0IGlzIHRoaXMgbmV3IHRlc3QsIGB2ZXJpZmllcl9wZXJjcHVfYWRkci5jYCwgd2hpY2ggdXRpbGl6ZXMgYHI1ID0gJVtwZXJjcHVfZGF0YV0gbGw7IHIwID0gKih1MzIgKikocjUgJiM0MzsgMCk7YC4gV2FpdCBhIHNlY29uZOKApiB0aGF0IGByNSA9ICVbcGVyY3B1X2RhdGFdIGxsYCBsb29rcyBhIGxvdCBsaWtlIGFuIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb24uCgpUaGUgdGVzdCYjMzk7cyBjb21tZW50IGlzIGtleSBoZXJlOiAmIzM0O0FuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvdyB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4mIzM0OyBTbywgdGhlIHZlcmlmaWVyIGlzIGVpdGhlciByZXBsYWNpbmcgdGhlIGBsZF9pbW02NGAgb3IgZm9sbG93aW5nIGl0IHdpdGggdGhpcyBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbi4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyB0aGlzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHdoZXJlIGBCUEZfQUREUl9QRVJDUFVgIGlzIGFjdHVhbGx5IHVzZWQgd2l0aGluIHRoZSB2ZXJpZmllciYjMzk7cyBjb2RlLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHNlcXVlbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQUREUl9QRVJDUFUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2Rpc2FzbS5jPTE2OT1zdGF0aWMgYm9vbCBpc19hZGRyX3NwYWNlX2Nhc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZGlzYXNtLmMtMTc2LSAqIGRzdF9yZWcgPSBzcmNfcmVnICYjNDM7IFx1MDAzY3BlcmNwdV9iYXNlX29mZlx1MDAzZVxua2VybmVsL2JwZi9kaXNhc20uYzoxNzc6ICogQlBGX0FERFJfUEVSQ1BVIGlzIHVzZWQgYXMgYSBzcGVjaWFsIGluc24tXHUwMDNlb2ZmIHZhbHVlLlxua2VybmVsL2JwZi9kaXNhc20uYy0xNzgtICovXG5rZXJuZWwvYnBmL2Rpc2FzbS5jOjE3OTojZGVmaW5lIEJQRl9BRERSX1BFUkNQVVx0KC0xKVxua2VybmVsL2JwZi9kaXNhc20uYy0xODAtXG5rZXJuZWwvYnBmL2Rpc2FzbS5jPTE4MT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbmtlcm5lbC9icGYvZGlzYXNtLmMtMTgyLXtcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTgzOlx0cmV0dXJuIGluc24tXHUwMDNlY29kZSA9PSAoQlBGX0FMVTY0IHwgQlBGX01PViB8IEJQRl9YKSBcdTAwMjZcdTAwMjYgaW5zbi1cdTAwM2VvZmYgPT0gQlBGX0FERFJfUEVSQ1BVO1xua2VybmVsL2JwZi9kaXNhc20uYy0xODQtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDM0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBCUEYgVmVyaWZpZXIqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgQlBGIHZlcmlmaWVyIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBwZXItQ1BVIGFkZHJlc3MgbWFuaXB1bGF0aW9uLCBzbyBJJiMzOTttIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIHByZXNlbmNlIG9mIGBCUEZfQUREUl9QRVJDUFVgIG9yLCBldmVuIGJldHRlciwgYSBmdW5jdGlvbiBsaWtlIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAuIFRob3NlIHdpbGwgYmUgbXkga2V5IGluZGljYXRvcnMuIFRoaXMgc2hvdWxkIGdldCBtZSByaWdodCB0byB0aGUgaGVhcnQgb2YgaG93IGl0IHZhbGlkYXRlcyBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBwZXItQ1BVIGRhdGEuIEl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gc3RhcnQsIGFzIEkga25vdyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0FERFJfUEVSQ1BVJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MDIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKk5hdmlnYXRpbmcgdGhlIEJQRiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gZm9yIGBCUEZfQUREUl9QRVJDUFVgLiBJICp0aG91Z2h0KiBpdCB3YXMgaW4gYGtlcm5lbC9icGYvZGlzYXNtLmNgLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgaXQmIzM5O3MgbW9yZSBsaWtlbHkgaW4gb25lIG9mIHRoZSBoZWFkZXIgZmlsZXMsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkmIzM5O2QgYmV0IGl0JiMzOTtzIHR1Y2tlZCBhd2F5IGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBvciwgZXZlbiBtb3JlIGxpa2VseSwgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAuIEdvdHRhIGNoZWNrIHRob3NlIGxvY2F0aW9ucyBmaXJzdC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGZ1bmRhbWVudGFsIEJQRiBkZWZpbml0aW9ucyB1c3VhbGx5IHJlc2lkZSwgYXQgdGhlIHZlcnkgY29yZS4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aG9zZSBpbmNsdWRlcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfQUREUl9QRVJDUFUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTg5LSAqIGRzdF9yZWcgPSBzcmNfcmVnICYjNDM7IFx1MDAzY3BlcmNwdV9iYXNlX29mZlx1MDAzZVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxOTA6ICogQlBGX0FERFJfUEVSQ1BVIGlzIHVzZWQgYXMgYSBzcGVjaWFsIGluc24tXHUwMDNlb2ZmIHZhbHVlLlxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xOTEtICovXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjE5MjojZGVmaW5lIEJQRl9BRERSX1BFUkNQVVx0KC0xKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xOTMtXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0xOTgtXHRcdC5zcmNfcmVnID0gU1JDLFx0XHRcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxOTk6XHRcdC5vZmYgICA9IEJQRl9BRERSX1BFUkNQVSxcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDAtXHRcdC5pbW0gICA9IDAgfSlcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTIwMj1zdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDMte1xuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDQ6XHRyZXR1cm4gaW5zbi1cdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFx1MDAyNlx1MDAyNiBpbnNuLVx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTk1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgQlBGX01PVjY0X1BFUkNQVV9SRUcgVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYCBpcyBiZWluZyBsZXZlcmFnZWQuIEkgd2FudCB0byBzZWUgdGhpcyBpbnN0cnVjdGlvbiBpbiBhY3Rpb24uIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgZ29pbmcgdG8gYmUgYSBxdWljaywgdGFyZ2V0ZWQgY29kZSBzZWFyY2guIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEJQRiBwcm9ncmFtcyB0aGF0IGFyZSBsaWtlbHkgaW50ZXJhY3Rpbmcgd2l0aCBwZXItQ1BVIGRhdGEsIHdoaWNoIGlzIHdoYXQgdGhpcyBvcGNvZGUgc2lnbmlmaWVzLiBJIHNob3VsZCBleHBlY3QgdG8gZmluZCB0aGlzIGluc3RydWN0aW9uIGluIHBsYWNlcyB0aGF0IGFyZSBkZWFsaW5nIHdpdGggbWV0cmljcyBjb2xsZWN0aW9uLCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLCBvciBhbnl0aGluZyByZWxhdGVkIHRvIHBlci1DUFUgcmVzb3VyY2UgdHJhY2tpbmcgYW5kIGFjY2Vzcy4gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBpbnRvIHRyYWNpbmcgcHJvZ3JhbXMsIG5ldHdvcmsgZmlsdGVyIHByb2dyYW1zLiBUaGlzIG9wY29kZSBpcyBwcmV0dHkgc3BlY2lmaWMsIHNvIGEgc3RyYWlnaHRmb3J3YXJkIGdyZXAgc2hvdWxkIGRvIHRoZSB0cmljayB0byBzZWUgd2hhdCBpbnRlcmVzdGluZyBwcm9ncmFtcyBhcmUgd3JpdHRlbiB0aGF0IG1ha2UgdXNlIG9mIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUEZfTU9WNjRfUEVSQ1BVX1JFRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYXJyYXltYXAuYz0yOTQ9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzE4LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5rZXJuZWwvYnBmL2FycmF5bWFwLmM6MzE5Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9hcnJheW1hcC5jLTMyMC1cdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KQSwgMCwgMCwgMSk7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYz0xNTAzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE4NjMtXHRcdFx0aW5zbl9idWZbMF0gPSBpbnNuWzFdO1xua2VybmVsL2JwZi9maXh1cHMuYzoxODY0Olx0XHRcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cdTAwM2Vkc3RfcmVnLCBpbnNuLVx1MDAzZWRzdF9yZWcpO1xua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVx0XHRcdGNudCA9IDI7XG4tLVxua2VybmVsL2JwZi9maXh1cHMuYy0yMTc2LVx0XHRcdGluc25fYnVmWzBdID0gQlBGX01PVjY0X0lNTShCUEZfUkVHXzAsICh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2Y3B1X251bWJlcik7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxNzc6XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzgtXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMjE5OC1cdFx0XHRpbnNuX2J1ZlswXSA9IEJQRl9NT1Y2NF9JTU0oQlBGX1JFR18wLCAodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNmN1cnJlbnRfdGFzayk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxOTk6XHRcdFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIyMDAtXHRcdFx0aW5zbl9idWZbMl0gPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDE0PXN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1Zilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDI3LVx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDI4Olx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjQyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyODAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIEpJVCBDb21waWxlciBCdWcgaW4geDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGFuZCBpdCBzZWVtcyBsaWtlIGBCUEZfTU9WNjRfUEVSQ1BVX1JFR2AgaXMgY3J1Y2lhbCBpbiBgYnBmX2RvX21pc2NfZml4dXBzYC4gSXQmIzM5O3MgcmlnaHQgdGhlcmUsIHBhdGNoaW5nIHVwIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBlci1DUFUgbWFwcy4gVGhlIHRlc3QgY29kZSBjb21tZW50LCAmIzM0O0FuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsJiMzNDsgcGVyZmVjdGx5IGxpbmVzIHVwIHdpdGggdGhpcy4KClNvLCBoZXJlJiMzOTtzIHdoYXQmIzM5O3MgaGFwcGVuaW5nOiBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCB3aGVuIGBtb3ZfcGVyY3B1X2FkZHJgIGlzIEpJVHRlZCwgYW5kIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBoYXBwZW5zIHRvIGJlIGFuIGV4dGVuZGVkIHJlZ2lzdGVyLCBsaWtlIFI4LVIxNSwgdGhlIGdlbmVyYXRlZCBpbnN0cnVjdGlvbiBpcyBtZXNzZWQgdXAuIEluc3RlYWQgb2YgYWRkaW5nIHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgaW50ZW5kZWQgZXh0ZW5kZWQgcmVnaXN0ZXIsIGl0JiMzOTtzIGFkZGluZyBpdCB0byB0aGUgbG93ZXIgcGFydCBvZiB0aGF0IHJlZ2lzdGVyIChSQVggaW5zdGVhZCBvZiBSOCwgZm9yIGV4YW1wbGUpLiBUaGlzIG1lYW5zIHRoZSBKSVQgY29tcGlsZXIgaXMgcmVhZGluZyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIGFuZCBpdCYjMzk7cyBhbHNvIGNoYW5naW5nIHRoZSBTSUIgYmFzZSByZWdpc3RlciB3aGljaCBvbmx5IGFtcGxpZmllcyB0aGlzIGlzc3VlLgoKVGhpcyBpcyBhIHNlcmlvdXMgaXNzdWUuIEl0IG1lYW5zIHRoZSBCUEYgcHJvZ3JhbSByZWFkcyBmcm9tIG9yIHdyaXRlcyB0byB0aGUgd3JvbmcgbWVtb3J5IGFkZHJlc3MsIHdoaWNoIGNhbiBjYXVzZSBhIGtlcm5lbCBjcmFzaCBvciwgd29yc2UsIGEgcHJpdmlsZWdlIGVzY2FsYXRpb24uIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBjb25maXJtIGFuZCBleHBhbmQgdW5kZXJzdGFuZGluZyBvZiB0aGUgaXNzdWUuCgpUbyBmdXp6IHRoaXMgZWZmZWN0aXZlbHksIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gQlBGIHByb2dyYW1zIHRoYXQgYXJlIGxldmVyYWdpbmcgcGVyLUNQVSBtYXBzIG9yIHZhcmlhYmxlcy4gQW5kLCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzZXMgYXJlIGxvYWRlZCBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAoUjgtUjE1KS4gVGhlIGZpeCwgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIHNob3VsZCBiZSBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGRvX2ppdGAgZnVuY3Rpb24sIGFuZCBtYXliZSBgYnBmX2ludF9qaXRfY29tcGlsZWAuCgpUaW1lIHRvIGNoZWNrIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgLiBJJiMzOTtsbCBuZWVkIGBDT05GSUdfQlBGX0pJVGAsIG9idmlvdXNseS4gQW5kIHNpbmNlIHRoZSBidWcgaXMgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX1NNUGAgYmxvY2ssIEkmIzM5O2xsIG5lZWQgYENPTkZJR19TTVBgIGVuYWJsZWQgdG9vLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvZGUgaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AgZm9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjb21waWxhdGlvbnMgcmVsYXRlZCB0byBgI2lmZGVmIENPTkZJR19TTVBgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfU01QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNjEzPXN0YXRpYyB2b2lkIGVtaXRfcHJpdl9mcmFtZV9wdHIodTggKipwcHJvZywgdm9pZCBfX3BlcmNwdSAqcHJpdl9mcmFtZV9wdHIpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MjAtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTYyMTojaWZkZWYgQ09ORklHX1NNUFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MjItXHQvKiBhZGQgXHUwMDNjcjlcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM1LVx0XHRcdFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTkzNjojaWZkZWYgQ09ORklHX1NNUFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzctXHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYwMgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnMsIGZvcm11bGF0ZWQgYXMgaWYgdGhleSYjMzk7cmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKk15IEJQRiBKSVQgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgY29uZmlybWluZyB0aGUgb2J2aW91czogYENPTkZJR19TTVBgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuIFdlIG5lZWQgYSBzeXN0ZW0gY2FwYWJsZSBvZiBoYW5kbGluZyBtdWx0aXBsZSBDUFVzIGZvciB0aGlzIHRvIGhhdmUgYW55IHJlYWwtd29ybGQgYmVuZWZpdC4gVGhlbiwgY29uc2lkZXJpbmcgd2hhdCB3ZSYjMzk7cmUgYWltaW5nIGZvciwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIGJ1aWxkaW5nIG9uLiBBbmQsIHRvIGFjdHVhbGx5ICpkbyogdGhlIEpJVCBjb21waWxhdGlvbiwgYENPTkZJR19CUEZfSklUYCBpcyBub24tbmVnb3RpYWJsZSwgb2YgY291cnNlLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IHN5bWJvbHMsIHRoZSBwb2ludHMgb2YgZm9jdXMuIEFscmlnaHQsIHRpbWUgdG8gY2hlY2sgYEZvY3VzU3ltYm9sc2AuLi4KCk9rYXksIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBjbGVhci4gYGRvX2ppdGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIG1ha2VzIHNlbnNlOyB3ZSBkb24mIzM5O3QgbmVlZCBnbG9iYWwgdmlzaWJpbGl0eSBmb3IgdGhhdC4gTm93LCB3aGVyZSBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSByZWFsIGhvb2sgaW50byB0aGUgSklUIHByb2Nlc3M/IEFoLCB0aGVyZSBpdCBpczogYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMuIE5vdyBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBKSVQgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9Mzk1MD1zdHJ1Y3QgeDY0X2ppdF9kYXRhIHtcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2MS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozOTYyOnN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2My17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkJQRiBDb2RlIEdlbmVyYXRpb246IFRoZSBDb3JlIEZsb3cqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgQlBGIEpJVCBjb21waWxhdGlvbiwgYW5kIGFzIEkgc3VzcGVjdGVkLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGVudHJ5IHBvaW50LiBUaGF0JiMzOTtzIHRoZSBnYXRlLCB0aGUgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIGFzIEkgcmVjYWxsLiBOb3csIHRoaW5raW5nIGFib3V0IGhvdyB3ZSBnZXQgdG8gdGhvc2Ugc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCBJIGNhbiBzZWUgdGhhdCB0aGUgdmVyaWZpZXIgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIGdlbmVyYXRpbmcgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYC4gSSYjMzk7bSBnb2luZyB0aHJvdWdoIHRoZSBjb2RlIGFuZCByZWNhbGxpbmcgdGhhdCBzcGVjaWZpYyBpbnN0cnVjdGlvbi4gQW5kLCBhcyBJIHJlbWVtYmVyLCB0aGUgZnVuY3Rpb24gYGJwZl9kb19taXNjX2ZpeHVwc2AgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgIGlzIHRoZSBwcmVjaXNlIHBvaW50IHdoZXJlIHRoaXMgcGFydGljdWxhciBpbnN0cnVjdGlvbiBpcyBhY3R1YWxseSBnZW5lcmF0ZWQuIFRoYXQgZnVuY3Rpb24gaGFuZGxlcyBtaXNjZWxsYW5lb3VzIGZpeHVwcyBhbmQgb3B0aW1pemF0aW9ucywgYW5kIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgdmVyaWZpZXImIzM5O3MgY2hlY2tzIGxlYWQgdG8gdGhlIGluc3RydWN0aW9uIGJlaW5nIGVtaXR0ZWQuIEl0JiMzOTtzIGFsbCBzdGFydGluZyB0byBjb21lIHRvZ2V0aGVyIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIEkgaGFkIGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvZml4dXBzLmM9NjM9c3RhdGljIGJvb2wgYnBmX2lzX3JlZzY0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtNzgtXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjc5Olx0LyogYWRkcmVzcyBzcGFjZSBjYXN0cyBjb252ZXJ0ZWQgdG8gQlBGX0FMVSwgc2VlIGJwZl9kb19taXNjX2ZpeHVwcygpICovXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTgwLVx0aWYgKGlzX2FkZHJfc3BhY2VfY2FzdDMyKHByb2csIGluc24pKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmM9MTQ3ND1zdGF0aWMgaW50IGFkZF9oaWRkZW5fc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKnBhdGNoLCBpbnQgbGVuKVxuLS1cbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwMi0gKi9cbmtlcm5lbC9icGYvZml4dXBzLmM6MTUwMzppbnQgYnBmX2RvX21pc2NfZml4dXBzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTE1MDQte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDE1Mz1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNzQtXHRpZiAocmV0ID09IDApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzNzU6XHRcdHJldCA9IGJwZl9kb19taXNjX2ZpeHVwcyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODg1NwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSklUIENvbXBpbGVyIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCYjMzk7cyBhYm91dCB0aGUgQlBGIHZlcmlmaWVyIGVudHJ5IHBvaW50LCBgYnBmX2NoZWNrYC4gSSYjMzk7bSBzdGFydGluZyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHJlbGV2YW50IHN5bWJvbHMsIGFuZCBJJiMzOTtsbCBhZGQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2RvX21pc2NfZml4dXBzYCB0byBteSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGxpc3QuIFdhaXQgYSBzZWNvbmQsIEkgbmVlZCB0byBjb25maXJtIGBicGZfZG9fbWlzY19maXh1cHNgIGlzbiYjMzk7dCBzdGF0aWMuIFllcCwgZm91bmQgaXQgaW4gYGtlcm5lbC9icGYvZml4dXBzLmNgLiBHb29kLCBpdCYjMzk7cyBnbG9iYWwuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBFc3NlbnRpYWxseSwgdGhpcyBmaXhlcyBhbiBpc3N1ZSBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIEl0JiMzOTtzIGFib3V0IGhvdyB0aGUgUkVYIHByZWZpeCBpcyBiZWluZyBoYW5kbGVkIGZvciBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbnMgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRob3NlIGV4dGVuZGVkIHJlZ2lzdGVycywgUjggdGhyb3VnaCBSMTUuIFRoZSBwcm9ibGVtIGlzLCB0aGlzIGluY29ycmVjdCBlbmNvZGluZyBpcyBsZWFkaW5nIHRvIHRoZSBKSVQgZW1pdHRpbmcgY29kZSB0aGF0IHNjcmV3cyB1cCB0aGUgcGVyLUNQVSBvZmZzZXQgY2FsY3VsYXRpb24uIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBkb2luZyB0aGUgYWRkIHRvIHRoZSB3cm9uZyByZWdpc3RlciBhbmQgdGhlbiByZWFkaW5nIHRoZSBkYXRhIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJ1ZyBmaXguCgpJbiB0ZXJtcyBvZiBpbXBhY3QsIGl0IGNvdWxkIGJlIGEgcG90ZW50aWFsIGV4cGxvaXQhIFRoYXQgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZy4gCgpJJiMzOTt2ZSBnb3QgdGhlIG5lY2Vzc2FyeSBjb25maWdzIGZvciB0ZXN0aW5nOiBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgU01QYC4gQW5kIGFnYWluLCBteSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGFyZSBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBicGZfZG9fbWlzY19maXh1cHNgLgoKSnVzdCBhIHNhbml0eSBjaGVjazogSSBuZWVkIHRvIHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoYXQgYEJQRl9KSVRgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfSklUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDEtXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcbmtlcm5lbC9icGYvS2NvbmZpZy00My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcJiMzNDtcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNTctXG5rZXJuZWwvYnBmL0tjb25maWc6NTg6Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG5rZXJuZWwvYnBmL0tjb25maWctNTktXHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTY4LVxua2VybmVsL2JwZi9LY29uZmlnOjY5OmNvbmZpZyBCUEZfSklUX0RFRkFVTFRfT05cbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cdGRlZl9ib29sIEFSQ0hfV0FOVF9ERUZBVUxUX0JQRl9KSVQgfHwgQlBGX0pJVF9BTFdBWVNfT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NzEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQnVnIENvbnRleHQqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBzcG90LW9uIOKAkyB3ZSBkZWZpbml0ZWx5IG5lZWQgYEJQRl9KSVRgLiBUaGF0JiMzOTtzIGZ1bmRhbWVudGFsIGZvciBKSVQgY29tcGlsYXRpb24sIGFuZCBgQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4gZm9yIHVzaW5nIEJQRiBpbiBnZW5lcmFsLiBUaGUgcHJlc2VuY2Ugb2YgYCNpZmRlZiBDT05GSUdfU01QYCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGJ1ZyBpcyBsaWtlbHkgU01QLXJlbGF0ZWQsIHBvaW50aW5nIHVzIHRvd2FyZHMgbXVsdGktcHJvY2Vzc29yIHN5c3RlbXMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbG9vayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIHRlc3QgY2FzZSB1dGlsaXplcyBgX19hcmNoX3g4Nl82NGAsIHdoaWNoIHN1Z2dlc3RzIHRoZSBwcm9ibGVtIGlzIHNwZWNpZmljIHRvIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlLiBJIHNlZSB0aGUgYnVnIGxpdmVzIHdpdGhpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCwgd2hpY2ggY29uZmlybXMgdGhpcy4gV2UgZG9uJiMzOTt0IHN0cmljdGx5ICpuZWVkKiB0byBleHBsaWNpdGx5IGRlY2xhcmUgdGhlIGFyY2hpdGVjdHVyZSBpbiBgRW5hYmxlQ29uZmlnc2AuIEFsdGhvdWdoLCBpbmNsdWRpbmcgYFg4Nl82NGAgaXNuJiMzOTt0IGEgYmFkIGlkZWEsIGFsdGhvdWdoIHR5cGljYWxseSBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gb3VyIHg4NiBmdXp6ZXJzLgoKSSYjMzk7bSBub3cgZ29pbmcgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIGlzIHV0aWxpemVkIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgaXRzIGJyb2FkZXIgdXNhZ2Ugd2lsbCBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQgaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zbl9pc19tb3ZfcGVyY3B1X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM9MTMwMj1zdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTUtXHRcdFx0YnJlYWs7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoxMzU2Olx0XHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU3LVx0XHRcdGlmIChkc3QgIT0gc3JjKVxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYz05Njc9aW50IGJwZl9qaXRfYnVpbGRfYm9keShzdHJ1Y3QgYnBmX3Byb2cgKmZwLCB1MzIgKmltYWdlLCB1MzIgKmZpbWFnZSwgc3RydWN0IGNvZGVnZW5fY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxuYXJjaC9wb3dlcnBjL25ldC9icGZfaml0X2NvbXA2NC5jOjEyNjE6XHRcdFx0aWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKFx1MDAyNmluc25baV0pKSB7XG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cdFx0XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTVApKSB7XG4tLVxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxuLS1cbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTM4NS1cdFx0XHRicmVhaztcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcdFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVx0XHRcdGlmIChyZCAhPSBycylcbi0tXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9MTcyOT1zdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKmFkZHJzLCB1OCAqaW1hZ2UsXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzItXHRcdFx0XHRicmVhaztcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlx0XHRcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM0LVx0XHRcdFx0LyogbW92IFx1MDAzY2RzdFx1MDAzZSwgXHUwMDNjc3JjXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXG4tLVxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD00MD1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjAyOnN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTk2CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHg4NiBKSVQgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGlzIGlzIHNwZWNpZmljYWxseSBhbiBpc3N1ZSB3aXRoaW4gdGhlIHg4NiBKdXN0LUluLVRpbWUgKEpJVCkgY29tcGlsZXIuIFRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIFRoZSBjb3JlIHByb2JsZW0gYXBwZWFycyB0byBiZSBhIGZsYXcgaW4gdGhlIHdheSB0aGUgUkVYIHByZWZpeCBpcyBiZWluZyBoYW5kbGVkIGR1cmluZyB0aGUgZW5jb2Rpbmcgb2YgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb25zLCBidXQgb25seSB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBvbmUgb2YgdGhlIGV4dGVuZGVkIHJlZ2lzdGVycyAoUjgtUjE1KS4gVGhpcyBtZWFucyB0aGUgSklUIGlzIG1pc2ludGVycHJldGluZyB3aGVyZSB0byB3cml0ZSB0aGUgcGVyLUNQVSBvZmZzZXQuCgpFc3NlbnRpYWxseSwgdGhlIGZpeCBpcyBjb3JyZWN0aW5nIGFuIGluY29ycmVjdCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIOKAkyBhZGRpbmcgdGhlIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIgYW5kIHN1YnNlcXVlbnRseSByZWFkaW5nIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24uIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgbmFzdHkgY29uc2VxdWVuY2VzIOKAkyBhIGtlcm5lbCBjcmFzaCwgb3IgZXZlbiB3b3JzZSwgYSBwb3RlbnRpYWwgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhICpyZWFsKiBidWcgZml4IHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIHRob3JvdWdoIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuCgpUaW1lIHRvIGxvZyB0aGlzIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2ludF9qaXRfY29tcGlsZSYjMzQ7LAogICAgJiMzNDticGZfZG9fbWlzY19maXh1cHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBSRVggcHJlZml4IGlzIGluY29ycmVjdGx5IGVuY29kZWQgZm9yIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gVGhpcyBjYXVzZXMgdGhlIEpJVCB0byBlbWl0IGFuIGluc3RydWN0aW9uIHRoYXQgYWRkcyB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVnIGluIEJQRiwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX0pJVCYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfaW50X2ppdF9jb21waWxlJiMzNDssCiAgICAmIzM0O2JwZl9kb19taXNjX2ZpeHVwcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIgd2hlcmUgdGhlIFJFWCBwcmVmaXggaXMgaW5jb3JyZWN0bHkgZW5jb2RlZCBmb3IgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGlzIGNhdXNlcyB0aGUgSklUIHRvIGVtaXQgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBhZGRzIHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIgYW5kIHJlYWRzIGZyb20gdGhlIHdyb25nIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY291bGQgbGVhZCB0byBhIGtlcm5lbCBjcmFzaCBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgZml4ZXMgYSBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSBidWcgaW4gQlBGLCBhbmQgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAyMToxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gZm9yIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgcHJldmlvdXMgZW5jb2RpbmcgY2F1c2VkIHRoZSBKSVQgdG8gYXBwbHkgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3Rlci5cblxuVGhpcyBidWcgbGVhZHMgdG8gdGhlIEJQRiBwcm9ncmFtIGFjY2Vzc2luZyBpbmNvcnJlY3QgbWVtb3J5IGFkZHJlc3Nlcywgd2hpY2ggaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgb3IgYXJiaXRyYXJ5IG1lbW9yeSBhY2Nlc3MgdnVsbmVyYWJpbGl0eS4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbnMgYW5kIGludmFsaWQgYWNjZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG1pc3NpbmcgemVyb2luZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZlNjhhZDc5OTVmZDIyZGE5ZjM0ODc2NDJhMTZlMDBmODhkODllOWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAxNCAyMToxNzo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkOTIwNzcyYWY3ZDVmLi4xYTlmYjUzMGFkYzNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xOTM1LDcgJiM0MzsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICoKIAkJCQlFTUlUX21vdihkc3RfcmVnLCBzcmNfcmVnKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCQkJLyogYWRkICZsdDtkc3QmZ3Q7LCBnczpbJmx0O29mZiZndDtdICovCi0JCQkJRU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpOwomIzQzOwkJCQlFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7CiAJCQkJRU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpOwogCQkJCUVNSVQoKHUzMikodW5zaWduZWQgbG9uZykmYW1wO3RoaXNfY3B1X29mZiwgNCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jCmluZGV4IDgxMTNmZWE3YmE4NmMuLjY0YWM0OWFkNjdlNjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYwpAQCAtNzksNiAmIzQzOzc5LDcgQEAKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfYnBmX2Zhc3RjYWxsLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX29yX2ptcDMyX2suc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3BlcmNwdV9hZGRyLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3ZlcmlmaWVyX3ByZWNpc2lvbi5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAuc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dmVyaWZpZXJfcHJpdmF0ZV9zdGFjay5za2VsLmgmIzM0OwpAQCAtMjQwLDYgJiM0MzsyNDEsNyBAQCB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX2N0eCh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX2N0eCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZSh2b2lkKSAgICB7IFJVTih2ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZSk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9icGZfZmFzdGNhbGwodm9pZCkgICAgICAgICB7IFJVTih2ZXJpZmllcl9icGZfZmFzdGNhbGwpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfb3Jfam1wMzJfayh2b2lkKSAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfb3Jfam1wMzJfayk7IH0KJiM0Mzt2b2lkIHRlc3RfdmVyaWZpZXJfcGVyY3B1X2FkZHIodm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfcGVyY3B1X2FkZHIpOyB9CiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJlY2lzaW9uKHZvaWQpICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJlY2lzaW9uKTsgfQogdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCh2b2lkKSAgIHsgUlVOKHZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCk7IH0KIHZvaWQgdGVzdF92ZXJpZmllcl9wcml2YXRlX3N0YWNrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9wcml2YXRlX3N0YWNrKTsgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45NjJmYWVhOGVmOTAwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmMKQEAgLTAsMCAmIzQzOzEsMTE0IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7dm1saW51eC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9taXNjLmgmIzM0OwomIzQzOwomIzQzO2ludCBwZXJjcHVfZGF0YSBTRUMoJiMzNDsucGVyY3B1JiMzNDspOwomIzQzOwomIzQzOyNpZiBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KQomIzQzOwomIzQzOy8qCiYjNDM7ICogQW4gbGRfaW1tNjQgb2YgYSBwZXItQ1BVIG1hcCB2YWx1ZSBpcyBmb2xsb3dlZCBieSBhIG1vdl9wZXJjcHVfYWRkciB0aGF0CiYjNDM7ICogcmV1c2VzIHRoZSBzYW1lIHJlZ2lzdGVyLCBzbyB0aGUgcmVnaXN0ZXIgdGhlIGFkZHJlc3MgbGFuZHMgaW4gZGVjaWRlcyBob3cKJiM0MzsgKiB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4gT24geDg2IFI1LCBSNywgUjggYW5kIFI5IGFyZSB0aGUgZXh0ZW5kZWQKJiM0MzsgKiByZWdpc3RlcnMsIHdob3NlIGhpZ2ggYml0IG5lZWRzIFJFWC5SIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIHNpdHMgaW4KJiM0MzsgKiBNb2RSTS5yZWcuIENoZWNrIG9uZSBwcm9ncmFtIHBlciBleHRlbmRlZCByZWdpc3Rlciwgc2luY2UgZ2V0dGluZyB0aGUKJiM0MzsgKiBwcmVmaXggd3JvbmcgcmVzb2x2ZXMgdGhlIGFkZHJlc3MgaW50byB3aGljaGV2ZXIgcmVnaXN0ZXIgc2hhcmVzIHRoZSBsb3cKJiM0MzsgKiB0aHJlZSBiaXRzIGluc3RlYWQuCiYjNDM7ICovCiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHI1JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklZ3M6e3suKn19LCAlcjgmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yNSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyNSA9ICVbcGVyY3B1X2RhdGFdIGxsOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjUgJiM0MzsgMCk7CQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXItQ1BVIGFkZHJlc3MgaW50byByNyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZHEJJWdzOnt7Lip9fSwgJXIxMyYjMzQ7KQomIzQzO19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I3KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKCYjMzQ7CQkJCQlcCiYjNDM7CXI3ID0gJVtwZXJjcHVfZGF0YV0gbGw7CQkJCVwKJiM0MzsJcjAgPSAqKHUzMiAqKShyNyAmIzQzOyAwKTsJCQkJXAomIzQzOwlleGl0OwkJCQkJCVwKJiM0MzsmIzM0Owk6CiYjNDM7CTogX19pbW1fYWRkcihwZXJjcHVfZGF0YSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHI4JiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklZ3M6e3suKn19LCAlcjE0JiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjgodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjggPSAlW3BlcmNwdV9kYXRhXSBsbDsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHI4ICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtyYXdfdHAmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7cGVyLUNQVSBhZGRyZXNzIGludG8gcjkmIzM0OykKJiM0MztfX3N1Y2Nlc3MKJiM0MztfX2FyY2hfeDg2XzY0CiYjNDM7X19qaXRlZCgmIzM0OwlhZGRxCSVnczp7ey4qfX0sICVyMTUmIzM0OykKJiM0MztfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yOSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyOSA9ICVbcGVyY3B1X2RhdGFdIGxsOwkJCQlcCiYjNDM7CXIwID0gKih1MzIgKikocjkgJiM0MzsgMCk7CQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEEgcmVnaXN0ZXIgdGhhdCBuZWVkcyBubyBSRVguUiwgdG8gY2F0Y2ggYSBmaXggdGhhdCBvdmVyY29ycmVjdHMuICovCiYjNDM7U0VDKCYjMzQ7cmF3X3RwJiMzNDspCiYjNDM7X19kZXNjcmlwdGlvbigmIzM0O3Blci1DUFUgYWRkcmVzcyBpbnRvIHIxJiMzNDspCiYjNDM7X19zdWNjZXNzCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19faml0ZWQoJiMzNDsJYWRkcQklZ3M6e3suKn19LCAlcmRpJiMzNDspCiYjNDM7X19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjEodm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAlW3BlcmNwdV9kYXRhXSBsbDsJCQkJXAomIzQzOwlyMCA9ICoodTMyICopKHIxICYjNDM7IDApOwkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO1NFQygmIzM0O3Jhd190cCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDtwZXJjcHUgYWRkciBkdW1teSYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBkdW1teV90ZXN0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7Owo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMjE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc5MAoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiAxMDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhpcyBpbnN0cnVjdGlvbiBlbmNvZGluZyBmaXg6IGBhZGRfMW1vZGAgaXMgYmVpbmcgcmVwbGFjZWQgd2l0aCBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBUaGlzIGlzIGEgY2xhc3NpYyBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgdGhhdCwgaWYgbm90IGFkZHJlc3NlZCwgd291bGQgbGVhZCB0byBpbmNvcnJlY3QgY29kZSBnZW5lcmF0aW9uLiBJIGNhbiBzZWUgdGhhdCB0aGUgYnVnIGlzIGFib3V0IHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBjb3JyZWN0bHkgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIFRoZSBpbmNvcnJlY3QgZW5jb2Rpbmcgd291bGQgY2F1c2UgdGhlIG9mZnNldCB0byBiZSBhcHBsaWVkIHRvIHRoZSB3cm9uZyByZWdpc3RlciwgZXNzZW50aWFsbHkgcmVzdWx0aW5nIGluIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgbWVtb3J5IGF0IGFuIGluY29ycmVjdCBhZGRyZXNzLgoKSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidXQgaXQmIzM5O3MgbW9yZSBvZiBhIG1lbW9yeSBjb3JydXB0aW9uL291dC1vZi1ib3VuZHMgYWNjZXNzIGlzc3VlLiBUaGUgQlBGIHByb2dyYW0gd291bGQgYmUgcmVhZGluZyBmcm9tIG9yIHdyaXRpbmcgdG8gYW4gYXJiaXRyYXJ5IG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY291bGQgYmUgYW55dGhpbmcuIEEgZGVlcGVyIGxvb2sgY29uZmlybXMgdGhhdCB0aGUgYnVnIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMgaW4gdGhlIHdheSBLTVNBTiB3b3VsZCBiZSByZXF1aXJlZCB0byBkZXRlY3QuIFRoaXMgaXMgYW4gZW5jb2RpbmcgYnVnIHdoZXJlIHRoZSBKSVQgZ2VuZXJhdGVzIGFuIGluY29ycmVjdCBpbnN0cnVjdGlvbiBzZXF1ZW5jZTsgdGhlIHJlc3VsdGluZyBpbmNvcnJlY3QgcHJvZ3JhbSB3b3VsZCB0aGVuIGNhdXNlIHRoZSBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBhY2Nlc3MuIEtBU0FOIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nIHRob3NlIG1lbW9yeSBhY2Nlc3Nlcy4gS01TQU4gaXMgZm9yIGRldGVjdGluZyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBsaWtlIG1pc3NpbmcgYG1lbXNldGAgY2FsbHMsIHdoaWNoIGlzbiYjMzk7dCB0aGUgY29uY2VybiBoZXJlLgoKR29pbmcgYmFjayB0byB0aGUgY29kZSwgSSBzZWUgdGhhdCBgYWRkXzFtb2RgIGxpa2VseSBoYWQgYSBwcm9ibGVtIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgUkVYIHByZWZpeCBmb3IgZXh0ZW5kZWQgcmVnaXN0ZXJzLiBUaGUgcmVwbGFjZW1lbnQgd2l0aCBgYWRkXzJtb2RgIGNsZWFybHkgcHJvdmlkZXMgYSBwcm9wZXIgZW5jb2RpbmcuIEkgZG9uJiMzOTt0IG5lZWQgdG8gZGlnIHRvbyBkZWVwIGludG8gdGhlIG1pbnV0aWFlIG9mIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGA7IHRoZSBjb3JlIG9mIGl0IGlzIGEgZnVuZGFtZW50YWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZml4LiBUaGUgbWFpbiB0aGluZyBpcyB0aGF0IHRoaXMgaXMgYSBKSVQgYnVnLiBUaGlzIGtpbmQgb2YgYnVnIGxlYWRzIHRvIGluY29ycmVjdCBleGVjdXRpb24gb2YgdGhlIGdlbmVyYXRlZCBCUEYgY29kZS4gVGhpcyBjYW4gbGVhZCB0byBjcmFzaGVzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgZXRjLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgZm9yIGRldGVjdGluZyB0aGVzZSB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbnMuIFRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4gVGhlcmVmb3JlLCBOZWVkc0tNU0FOID0gZmFsc2UuCgpNeSBmaW5hbCByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGNydWNpYWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZmxhdyBpbiB0aGUgeDg2IEJQRiBKSVQuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gd2l0aGluIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgb3JpZ2luYWwgaW5jb3JyZWN0IGVuY29kaW5nIGNhdXNlZCB0aGUgSklUIHRvIGFwcGx5IHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIsIHdoaWNoIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMuIEJlY2F1c2UgaXQgZG9lcyBub3QgY3JlYXRlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBJbnN0ZWFkLCBzdWNoIG1lbW9yeSBjb3JydXB0aW9ucyBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFNvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDIxOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gZm9yIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgcHJldmlvdXMgZW5jb2RpbmcgY2F1c2VkIHRoZSBKSVQgdG8gYXBwbHkgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3Rlci5cblxuVGhpcyBidWcgbGVhZHMgdG8gdGhlIEJQRiBwcm9ncmFtIGFjY2Vzc2luZyBpbmNvcnJlY3QgbWVtb3J5IGFkZHJlc3Nlcywgd2hpY2ggaXMgYSBjbGFzc2ljIG91dC1vZi1ib3VuZHMgb3IgYXJiaXRyYXJ5IG1lbW9yeSBhY2Nlc3MgdnVsbmVyYWJpbGl0eS4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbnMgYW5kIGludmFsaWQgYWNjZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIG1pc3NpbmcgemVyb2luZywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnN0cnVjdGlvbiBlbmNvZGluZyBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBTcGVjaWZpY2FsbHksIGl0IGNvcnJlY3RzIHRoZSBSRVggcHJlZml4IGVtaXNzaW9uIGZvciB0aGUgYGFkZGAgaW5zdHJ1Y3Rpb24gd2hlbiByZXNvbHZpbmcgcGVyLUNQVSBhZGRyZXNzZXMgaW50byBleHRlbmRlZCByZWdpc3RlcnMgKGxpa2UgcjgtcjE1KS4gVGhlIHByZXZpb3VzIGVuY29kaW5nIGNhdXNlZCB0aGUgSklUIHRvIGFwcGx5IHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIuXG5cblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNzo1Mi44ODYzNjQ1NDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE2NTg0ODc5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgICBcImJwZl9kb19taXNjX2ZpeHVwc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCBpdCBjb3JyZWN0cyB0aGUgUkVYIHByZWZpeCBlbWlzc2lvbiBmb3IgdGhlIGBhZGRgIGluc3RydWN0aW9uIHdoZW4gcmVzb2x2aW5nIHBlci1DUFUgYWRkcmVzc2VzIGludG8gZXh0ZW5kZWQgcmVnaXN0ZXJzIChsaWtlIHI4LXIxNSkuIFRoZSBwcmV2aW91cyBlbmNvZGluZyBjYXVzZWQgdGhlIEpJVCB0byBhcHBseSB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyLlxcblxcblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciB3aGVyZSB0aGUgUkVYIHByZWZpeCBpcyBpbmNvcnJlY3RseSBlbmNvZGVkIGZvciBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbnMgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIgKFI4LVIxNSkuIFRoaXMgY2F1c2VzIHRoZSBKSVQgdG8gZW1pdCBhbiBpbnN0cnVjdGlvbiB0aGF0IGFkZHMgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3RlciBhbmQgcmVhZHMgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjb3VsZCBsZWFkIHRvIGEga2VybmVsIGNyYXNoIG9yIHByaXZpbGVnZSBlc2NhbGF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBmaXhlcyBhIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGJ1ZyBpbiBCUEYsIGFuZCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE3OjUyLjg4NjM3MDExOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NzYwNDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZlNjhhZDc5OTVmZDIyZGE5ZjM0ODc2NDJhMTZlMDBmODhkODllOWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMTQgMjE6MTc6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXFxuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcXG5AQCAtMTkzNSw3ICsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcXG4gXFx0XFx0XFx0XFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XFxuICNpZmRlZiBDT05GSUdfU01QXFxuIFxcdFxcdFxcdFxcdC8qIGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXSAqL1xcbi1cXHRcXHRcXHRcXHRFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XFxuK1xcdFxcdFxcdFxcdEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKTtcXG4gXFx0XFx0XFx0XFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xcbiBcXHRcXHRcXHRcXHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXFx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbmluZGV4IDgxMTNmZWE3YmE4NmMuLjY0YWM0OWFkNjdlNjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcXG5AQCAtNzksNiArNzksNyBAQFxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfYnBmX2Zhc3RjYWxsLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX29yX2ptcDMyX2suc2tlbC5oXFxcIlxcbisjaW5jbHVkZSBcXFwidmVyaWZpZXJfcGVyY3B1X2FkZHIuc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidmVyaWZpZXJfcHJlY2lzaW9uLnNrZWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cC5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ2ZXJpZmllcl9wcml2YXRlX3N0YWNrLnNrZWwuaFxcXCJcXG5AQCAtMjQwLDYgKzI0MSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9uZXRmaWx0ZXJfY3R4KHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9uZXRmaWx0ZXJfY3R4KTsgfVxcbiB2b2lkIHRlc3RfdmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUodm9pZCkgICAgeyBSVU4odmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9icGZfZmFzdGNhbGwodm9pZCkgICAgICAgICB7IFJVTih2ZXJpZmllcl9icGZfZmFzdGNhbGwpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9vcl9qbXAzMl9rKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9vcl9qbXAzMl9rKTsgfVxcbit2b2lkIHRlc3RfdmVyaWZpZXJfcGVyY3B1X2FkZHIodm9pZCkgICAgICAgICAgeyBSVU4odmVyaWZpZXJfcGVyY3B1X2FkZHIpOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmVjaXNpb24odm9pZCkgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9wcmVjaXNpb24pOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAodm9pZCkgICB7IFJVTih2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXApOyB9XFxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcml2YXRlX3N0YWNrKHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9wcml2YXRlX3N0YWNrKTsgfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45NjJmYWVhOGVmOTAwXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXFxuQEAgLTAsMCArMSwxMTQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl9taXNjLmhcXFwiXFxuK1xcbitpbnQgcGVyY3B1X2RhdGEgU0VDKFxcXCIucGVyY3B1XFxcIik7XFxuK1xcbisjaWYgZGVmaW5lZChfX1RBUkdFVF9BUkNIX3g4NilcXG4rXFxuKy8qXFxuKyAqIEFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdFxcbisgKiByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvd1xcbisgKiB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4gT24geDg2IFI1LCBSNywgUjggYW5kIFI5IGFyZSB0aGUgZXh0ZW5kZWRcXG4rICogcmVnaXN0ZXJzLCB3aG9zZSBoaWdoIGJpdCBuZWVkcyBSRVguUiBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBzaXRzIGluXFxuKyAqIE1vZFJNLnJlZy4gQ2hlY2sgb25lIHByb2dyYW0gcGVyIGV4dGVuZGVkIHJlZ2lzdGVyLCBzaW5jZSBnZXR0aW5nIHRoZVxcbisgKiBwcmVmaXggd3JvbmcgcmVzb2x2ZXMgdGhlIGFkZHJlc3MgaW50byB3aGljaGV2ZXIgcmVnaXN0ZXIgc2hhcmVzIHRoZSBsb3dcXG4rICogdGhyZWUgYml0cyBpbnN0ZWFkLlxcbisgKi9cXG4rXFxuK1NFQyhcXFwicmF3X3RwXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjVcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JWdzOnt7Lip9fSwgJXI4XFxcIilcXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjUodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI1ID0gJVtwZXJjcHVfZGF0YV0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTMyICopKHI1ICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcInBlci1DUFUgYWRkcmVzcyBpbnRvIHI3XFxcIilcXG4rX19zdWNjZXNzXFxuK19fYXJjaF94ODZfNjRcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVnczp7ey4qfX0sICVyMTNcXFwiKVxcbitfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yNyh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjcgPSAlW3BlcmNwdV9kYXRhXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gKih1MzIgKikocjcgKyAwKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwicmF3X3RwXFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjhcXFwiKVxcbitfX3N1Y2Nlc3NcXG4rX19hcmNoX3g4Nl82NFxcbitfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JWdzOnt7Lip9fSwgJXIxNFxcXCIpXFxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I4KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9ICVbcGVyY3B1X2RhdGFdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAqKHUzMiAqKShyOCArIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rU0VDKFxcXCJyYXdfdHBcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJwZXItQ1BVIGFkZHJlc3MgaW50byByOVxcXCIpXFxuK19fc3VjY2Vzc1xcbitfX2FyY2hfeDg2XzY0XFxuK19faml0ZWQoXFxcIlxcdGFkZHFcXHQlZ3M6e3suKn19LCAlcjE1XFxcIilcXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjkodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcXCJcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI5ID0gJVtwZXJjcHVfZGF0YV0gbGw7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMCA9ICoodTMyICopKHI5ICsgMCk7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRleGl0O1xcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFxcIlxcdDpcXG4rXFx0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbisvKiBBIHJlZ2lzdGVyIHRoYXQgbmVlZHMgbm8gUkVYLlIsIHRvIGNhdGNoIGEgZml4IHRoYXQgb3ZlcmNvcnJlY3RzLiAqL1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcInBlci1DUFUgYWRkcmVzcyBpbnRvIHIxXFxcIilcXG4rX19zdWNjZXNzXFxuK19fYXJjaF94ODZfNjRcXG4rX19qaXRlZChcXFwiXFx0YWRkcVxcdCVnczp7ey4qfX0sICVyZGlcXFwiKVxcbitfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yMSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxcIlxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjEgPSAlW3BlcmNwdV9kYXRhXSBsbDtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHIwID0gKih1MzIgKikocjEgKyAwKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdGV4aXQ7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXFwiXFx0OlxcbitcXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuKyNlbHNlXFxuK1xcbitTRUMoXFxcInJhd190cFxcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcInBlcmNwdSBhZGRyIGR1bW15XFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBkdW1teV90ZXN0KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNlbmRpZlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE3OjU0LjM3NDg5OTQ1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNTk3MjE1NzY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBSRVggcHJlZml4IGlzIGluY29ycmVjdGx5IGVuY29kZWQgZm9yIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gVGhpcyBjYXVzZXMgdGhlIEpJVCB0byBlbWl0IGFuIGluc3RydWN0aW9uIHRoYXQgYWRkcyB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVnIGluIEJQRiwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmU2OGFkNzk5NWZkMjJkYTlmMzQ4NzY0MmExNmUwMGY4OGQ4OWU5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDIxOjE3OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkOTIwNzcyYWY3ZDVmLi4xYTlmYjUzMGFkYzNjIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG4rKysgYi9hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xOTM1LDcgKzE5MzUsNyBAQCBzdGF0aWMgaW50IGRvX2ppdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKmJwZl9wcm9nLCBpbnQgKlxuIFx0XHRcdFx0RU1JVF9tb3YoZHN0X3JlZywgc3JjX3JlZyk7XG4gI2lmZGVmIENPTkZJR19TTVBcbiBcdFx0XHRcdC8qIGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG4tXHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMW1vZCgweDQ4LCBkc3RfcmVnKSk7XG4rXHRcdFx0XHRFTUlUMigweDY1LCBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKSk7XG4gXHRcdFx0XHRFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSk7XG4gXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuY1xuaW5kZXggODExM2ZlYTdiYTg2Yy4uNjRhYzQ5YWQ2N2U2MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbkBAIC03OSw2ICs3OSw3IEBAXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZS5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfYnBmX2Zhc3RjYWxsLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9vcl9qbXAzMl9rLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJ2ZXJpZmllcl9wZXJjcHVfYWRkci5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfcHJlY2lzaW9uLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX3ByaXZhdGVfc3RhY2suc2tlbC5oXCJcbkBAIC0yNDAsNiArMjQxLDcgQEAgdm9pZCB0ZXN0X3ZlcmlmaWVyX25ldGZpbHRlcl9jdHgodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX25ldGZpbHRlcl9jdHgpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX25ldGZpbHRlcl9yZXRjb2RlKHZvaWQpICAgIHsgUlVOKHZlcmlmaWVyX25ldGZpbHRlcl9yZXRjb2RlKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9icGZfZmFzdGNhbGwodm9pZCkgICAgICAgICB7IFJVTih2ZXJpZmllcl9icGZfZmFzdGNhbGwpOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX29yX2ptcDMyX2sodm9pZCkgICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX29yX2ptcDMyX2spOyB9XG4rdm9pZCB0ZXN0X3ZlcmlmaWVyX3BlcmNwdV9hZGRyKHZvaWQpICAgICAgICAgIHsgUlVOKHZlcmlmaWVyX3BlcmNwdV9hZGRyKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmVjaXNpb24odm9pZCkgICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9wcmVjaXNpb24pOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCh2b2lkKSAgIHsgUlVOKHZlcmlmaWVyX3ByZXZlbnRfbWFwX2xvb2t1cCk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJpdmF0ZV9zdGFjayh2b2lkKSAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJpdmF0ZV9zdGFjayk7IH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTYyZmFlYThlZjkwMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmNcbkBAIC0wLDAgKzEsMTE0IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX21pc2MuaFwiXG4rXG4raW50IHBlcmNwdV9kYXRhIFNFQyhcIi5wZXJjcHVcIik7XG4rXG4rI2lmIGRlZmluZWQoX19UQVJHRVRfQVJDSF94ODYpXG4rXG4rLypcbisgKiBBbiBsZF9pbW02NCBvZiBhIHBlci1DUFUgbWFwIHZhbHVlIGlzIGZvbGxvd2VkIGJ5IGEgbW92X3BlcmNwdV9hZGRyIHRoYXRcbisgKiByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvd1xuKyAqIHRoZSBKSVQgZW5jb2RlcyB0aGUgYWRkLiBPbiB4ODYgUjUsIFI3LCBSOCBhbmQgUjkgYXJlIHRoZSBleHRlbmRlZFxuKyAqIHJlZ2lzdGVycywgd2hvc2UgaGlnaCBiaXQgbmVlZHMgUkVYLlIgYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gc2l0cyBpblxuKyAqIE1vZFJNLnJlZy4gQ2hlY2sgb25lIHByb2dyYW0gcGVyIGV4dGVuZGVkIHJlZ2lzdGVyLCBzaW5jZSBnZXR0aW5nIHRoZVxuKyAqIHByZWZpeCB3cm9uZyByZXNvbHZlcyB0aGUgYWRkcmVzcyBpbnRvIHdoaWNoZXZlciByZWdpc3RlciBzaGFyZXMgdGhlIGxvd1xuKyAqIHRocmVlIGJpdHMgaW5zdGVhZC5cbisgKi9cbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjVcIilcbitfX3N1Y2Nlc3NcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIlx0YWRkcVx0JWdzOnt7Lip9fSwgJXI4XCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjUodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyNSA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjUgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInJhd190cFwiKVxuK19fZGVzY3JpcHRpb24oXCJwZXItQ1BVIGFkZHJlc3MgaW50byByN1wiKVxuK19fc3VjY2Vzc1xuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiXHRhZGRxXHQlZ3M6e3suKn19LCAlcjEzXCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjcodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyNyA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjcgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInJhd190cFwiKVxuK19fZGVzY3JpcHRpb24oXCJwZXItQ1BVIGFkZHJlc3MgaW50byByOFwiKVxuK19fc3VjY2Vzc1xuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiXHRhZGRxXHQlZ3M6e3suKn19LCAlcjE0XCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjgodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyOCA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjggKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInJhd190cFwiKVxuK19fZGVzY3JpcHRpb24oXCJwZXItQ1BVIGFkZHJlc3MgaW50byByOVwiKVxuK19fc3VjY2Vzc1xuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiXHRhZGRxXHQlZ3M6e3suKn19LCAlcjE1XCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjkodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyOSA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjkgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKy8qIEEgcmVnaXN0ZXIgdGhhdCBuZWVkcyBubyBSRVguUiwgdG8gY2F0Y2ggYSBmaXggdGhhdCBvdmVyY29ycmVjdHMuICovXG4rU0VDKFwicmF3X3RwXCIpXG4rX19kZXNjcmlwdGlvbihcInBlci1DUFUgYWRkcmVzcyBpbnRvIHIxXCIpXG4rX19zdWNjZXNzXG4rX19hcmNoX3g4Nl82NFxuK19faml0ZWQoXCJcdGFkZHFcdCVnczp7ey4qfX0sICVyZGlcIilcbitfX25ha2VkIHZvaWQgcGVyY3B1X2FkZHJfaW50b19yMSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gJVtwZXJjcHVfZGF0YV0gbGw7XHRcdFx0XHRcXFxuK1x0cjAgPSAqKHUzMiAqKShyMSArIDApO1x0XHRcdFx0XFxcbitcdGV4aXQ7XHRcdFx0XHRcdFx0XFxcbitcIlx0OlxuK1x0OiBfX2ltbV9hZGRyKHBlcmNwdV9kYXRhKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2Vsc2VcbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyY3B1IGFkZHIgZHVtbXlcIilcbitfX3N1Y2Nlc3NcbitpbnQgZHVtbXlfdGVzdCh2b2lkKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbitjaGFyIF9saWNlbnNlW10gU0VDKFwibGljZW5zZVwiKSA9IFwiR1BMXCI7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxNzo1NC4zNzQ5MDA4ODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTg5MjAyMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogWDg2IEJQRiBKSVQgQ29tcGlsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIGhlcmUsIGFuZCBpdCdzIG1vZGlmeWluZyBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhhdCdzIHRoZSB4ODYgQlBGIEp1c3QtSW4tVGltZSBjb21waWxlciwgcmlnaHQ/IE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBwZXItQ1BVIGFkZHJlc3MgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGBkb19qaXRgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBpcyByaWdodCBoZXJlOiBhIHN1YnRsZSBhbHRlcmF0aW9uIGluIHRoZSBhc3NlbWJseSBvdXRwdXQuIEkgc2VlIGEgY2hhbmdlIGZyb20gYEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKWAgdG8gYEVNSVQyKDB4NjUsIGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpKWAuIFJpZ2h0IGF3YXkgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIHg4NiBvcGNvZGVzIGFuZCBhZGRyZXNzaW5nIG1vZGVzLi4uIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCBpcyBjcml0aWNhbC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGNoYW5naW5nIGhvdyB0aGUgY29tcGlsZXIgY2FsY3VsYXRlcyB0aGUgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgdGhlIHBlci1DUFUgdmFyaWFibGUuIFdoYXQncyBpdCBkb2luZz8gSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHRoZSBzZW1hbnRpY3Mgb2YgdGhhdCBjb2RlIGFuZCB3aGF0IGl0J3MgdHJ5aW5nIHRvIGFjaGlldmUuIElzIHRoaXMgYSBidWcgZml4PyBBbiBvcHRpbWl6YXRpb24/IE9yIG1heWJlIGl0J3MgZW5hYmxpbmcgc3VwcG9ydCBmb3IgYSBuZXcgZmVhdHVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIHRoZSB3aG9sZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzkzLCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTc6NTkuMzY0MTA3MDg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMTgzMzY0MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRU1JVDJcXFxcKDB4NjUsIGFkZF8xbW9kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6MDAuMTY1OTQ5NjcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMzAyMzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBZnRlcm1hdGggb2YgYSBDb2RlIERlcGxveW1lbnQqKlxuXG5SaWdodCwgc28gdGhlIHBhdGNoIGlzIGFscmVhZHkgbGl2ZSDigJMgZ29vZC4gU2F2ZXMgbWUgYSBzdGVwLiBOb3csIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgYW5kIHRoZSBxdWlja2VzdCB3YXkgdG8gZG8gdGhhdCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIEknbGwgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgdGhlIHNpZ25hdHVyZSBgRU1JVDIoMHg2NSwgYWRkXzJtb2RgLiBUaGlzIHNwZWNpZmljIGNvbWJpbmF0aW9uIG9mIHRoZSBvcC1jb2RlIGFuZCB0aGUgc3Vicm91dGluZSBuYW1lIGlzIHVzdWFsbHkgYSBkZWFkIGdpdmVhd2F5IGZvciB0aGUgc2VjdGlvbiBpbiB0aGUgY29kZSB0aGF0IGNvbmNlcm5zIG1lLiBEZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgYDB4NjVgIHR5cGljYWxseSBpbmRpY2F0ZXMgdGhhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBjb25kaXRpb25hbCBicmFuY2hpbmcsIG9yIHBlcmhhcHMgaW50ZXJydXB0IGhhbmRsaW5nIGhhcyBvY2N1cnJlZC4gVGhlIGZhY3QgdGhhdCBgYWRkXzJtb2RgIGlzIGludm9sdmVkIHN1Z2dlc3RzIGEgY3VzdG9tIG1vZGlmaWNhdGlvbiBvZiBhIHN0YW5kYXJkIG1hdGhlbWF0aWNhbCBmdW5jdGlvbiwgd2hpY2ggY291bGQgYmUgdGhlIHNvdXJjZSBvZiBhIHJlY2VudCBidWcuIFRoaXMgc2VhcmNoIHdpbGwgbGlrZWx5IGxhbmQgbWUgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBjaGFuZ2VzIGFyZSBtb3N0IGNvbmNlbnRyYXRlZCwgYWxsb3dpbmcgbWUgdG8gc3RhcnQgZXZhbHVhdGluZyB0aGVpciBlZmZlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDUsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODowMy40Nzg5NzU1MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNjUzMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVNSVQyXFxcXCgweDY1LCBhZGRfMm1vZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE3Mjk9c3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICphZGRycywgdTggKmltYWdlLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzctXFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjE5Mzg6XFx0XFx0XFx0XFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM5LVxcdFxcdFxcdFxcdEVNSVQzKDB4MDMsIGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpLCAweDI1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6MDMuNTgxNjUyNzQxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEwNzAxMzQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgYGRvX2ppdGAgQXJvdW5kIExpbmUgMTkzOCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBgZG9faml0YCBhcm91bmQgbGluZSAxOTM4LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCBzcGVjaWZpYyBsaW5lIGlzIGEga2V5IHBvaW50IHRvIGV4YW1pbmUgd2l0aGluIHRoZSBKdXN0LUluLVRpbWUgY29tcGlsYXRpb24gcHJvY2Vzcy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIHNvbWV0aGluZyBzaWduaWZpY2FudCBoZXJlOiBwZXJoYXBzIGEgY3J1Y2lhbCB0cmFuc2Zvcm1hdGlvbiBzdGVwLCBhIHNwZWNpZmljIGNvZGUgZ2VuZXJhdGlvbiBjYWxsLCBhIGJvdW5kYXJ5IGNvbmRpdGlvbiBjaGVjaywgb3IgbWF5YmUgZXZlbiBhIHBsYWNlIHdoZXJlIGEgcGFydGljdWxhciBvcHRpbWl6YXRpb24gaXMgYmVpbmcgYXBwbGllZCAob3IsIG1vcmUgY29uY2VybmluZ2x5LCAqbm90KiBiZWluZyBhcHBsaWVkKS4gR2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgZHluYW1pYyBjb21waWxhdGlvbiBpdHNlbGYuIEkgd2lsbCBzdGFydCBieSB0cmFjaW5nIHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyB1c2VkIGF0IHRoYXQgbG9jYXRpb24gYW5kIHdoYXQgaXMgYmVpbmcgZG9uZSB3aXRoIHRoZSByZXN1bHRpbmcgZGF0YS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgY29tcGlsZXIncyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgaW50ZXJtZWRpYXRlIGNvZGUgZ2VuZXJhdGlvbiwgb3IgdGhlIGZpbmFsIG1hY2hpbmUgY29kZSBvdXRwdXQuIFRpbWUgdG8gZGlnIGluIGFuZCBkZWNpcGhlciB0aGUgbG9naWM7IGEgcXVpY2sgc2tpbSB0aHJvdWdoIHRoZSBzdXJyb3VuZGluZyBsaW5lcyBtaWdodCBnaXZlIG1lIHRoZSBicm9hZGVyIGNvbnRleHQgdGhhdCBJIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTgsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODowNy42ODg2NzAwNTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5MjA6XFx0XFxuMTkyMTpcXHRcXHRcXHRcXHRcXHQvKiB4b3IgcjExLCByMTEgKi9cXG4xOTIyOlxcdFxcdFxcdFxcdFxcdEVNSVQzKDB4NEQsIDB4MzEsIDB4REIpO1xcbjE5MjM6XFx0XFxuMTkyNDpcXHRcXHRcXHRcXHRcXHQvKiB0ZXN0IGRzdF9yZWczMiwgZHN0X3JlZzMyOyBjaGVjayBpZiBsb3dlciAzMi1iaXQgYXJlIHplcm8gKi9cXG4xOTI1OlxcdFxcdFxcdFxcdFxcdG1heWJlX2VtaXRfbW9kKFxcdTAwMjZwcm9nLCBkc3RfcmVnLCBkc3RfcmVnLCBmYWxzZSk7XFxuMTkyNjpcXHRcXHRcXHRcXHRcXHRFTUlUMigweDg1LCBhZGRfMnJlZygweEMwLCBkc3RfcmVnLCBkc3RfcmVnKSk7XFxuMTkyNzpcXHRcXG4xOTI4OlxcdFxcdFxcdFxcdFxcdC8qIGNtb3ZlIHIxMSwgZHN0X3JlZzsgaWYgc28sIHNldCBkc3RfcmVnIHRvIHplcm8gKi9cXG4xOTI5OlxcdFxcdFxcdFxcdFxcdC8qIFdBUk5JTkc6IEludGVsIHN3YXBwZWQgc3JjL2RzdCByZWdpc3RlciBlbmNvZGluZyBpbiBDTU9WY2MgISEhICovXFxuMTkzMDpcXHRcXHRcXHRcXHRcXHRtYXliZV9lbWl0X21vZChcXHUwMDI2cHJvZywgQVVYX1JFRywgZHN0X3JlZywgdHJ1ZSk7XFxuMTkzMTpcXHRcXHRcXHRcXHRcXHRFTUlUMygweDBGLCAweDQ0LCBhZGRfMnJlZygweEMwLCBBVVhfUkVHLCBkc3RfcmVnKSk7XFxuMTkzMjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xOTMzOlxcdFxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG4xOTM0OlxcdFxcdFxcdFxcdFxcdC8qIG1vdiBcXHUwMDNjZHN0XFx1MDAzZSwgXFx1MDAzY3NyY1xcdTAwM2UgKGlmIG5lY2Vzc2FyeSkgKi9cXG4xOTM1OlxcdFxcdFxcdFxcdFxcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xcbjE5MzY6XFx0I2lmZGVmIENPTkZJR19TTVBcXG4xOTM3OlxcdFxcdFxcdFxcdFxcdC8qIGFkZCBcXHUwMDNjZHN0XFx1MDAzZSwgZ3M6W1xcdTAwM2NvZmZcXHUwMDNlXSAqL1xcbjE5Mzg6XFx0XFx0XFx0XFx0XFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xcbjE5Mzk6XFx0XFx0XFx0XFx0XFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xcbjE5NDA6XFx0XFx0XFx0XFx0XFx0RU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKVxcdTAwMjZ0aGlzX2NwdV9vZmYsIDQpO1xcbjE5NDE6XFx0I2VuZGlmXFxuMTk0MjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4xOTQzOlxcdFxcdFxcdFxcdH1cXG4xOTQ0OlxcdFxcdFxcdFxcdGZhbGx0aHJvdWdoO1xcbjE5NDU6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX01PViB8IEJQRl9YOlxcbjE5NDY6XFx0XFx0XFx0XFx0aWYgKGluc24tXFx1MDAzZW9mZiA9PSAwKVxcbjE5NDc6XFx0XFx0XFx0XFx0XFx0ZW1pdF9tb3ZfcmVnKFxcdTAwMjZwcm9nLFxcbjE5NDg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBCUEZfQ0xBU1MoaW5zbi1cXHUwMDNlY29kZSkgPT0gQlBGX0FMVTY0LFxcbjE5NDk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcXG4xOTUwOlxcdFxcdFxcdFxcdGVsc2VcXG4xOTUxOlxcdFxcdFxcdFxcdFxcdGVtaXRfbW92c3hfcmVnKFxcdTAwMjZwcm9nLCBpbnNuLVxcdTAwM2VvZmYsXFxuMTk1MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgQlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCxcXG4xOTUzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBkc3RfcmVnLCBzcmNfcmVnKTtcXG4xOTU0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE5NTU6XFx0XFxuMTk1NjpcXHRcXHRcXHRcXHQvKiBuZWcgZHN0ICovXFxuMTk1NzpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfTkVHOlxcbjE5NTg6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVNjQgfCBCUEZfTkVHOlxcbjE5NTk6XFx0XFx0XFx0XFx0bWF5YmVfZW1pdF8xbW9kKFxcdTAwMjZwcm9nLCBkc3RfcmVnLFxcbjE5NjA6XFx0XFx0XFx0XFx0XFx0XFx0QlBGX0NMQVNTKGluc24tXFx1MDAzZWNvZGUpID09IEJQRl9BTFU2NCk7XFxuMTk2MTpcXHRcXHRcXHRcXHRFTUlUMigweEY3LCBhZGRfMXJlZygweEQ4LCBkc3RfcmVnKSk7XFxuMTk2MjpcXHRcXHRcXHRcXHRicmVhaztcXG4xOTYzOlxcdFxcbjE5NjQ6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FERCB8IEJQRl9LOlxcbjE5NjU6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX1NVQiB8IEJQRl9LOlxcbjE5NjY6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX0FORCB8IEJQRl9LOlxcbjE5Njc6XFx0XFx0XFx0Y2FzZSBCUEZfQUxVIHwgQlBGX09SIHwgQlBGX0s6XFxuMTk2ODpcXHRcXHRcXHRjYXNlIEJQRl9BTFUgfCBCUEZfWE9SIHwgQlBGX0s6XFxuMTk2OTpcXHRcXHRcXHRjYXNlIEJQRl9BTFU2NCB8IEJQRl9BREQgfCBCUEZfSzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6MDcuNjg4OTEyNDE2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMDE2MTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgdGhlIFJFWCBQcmVmaXggRW5jb2RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgZG9faml0YCByZWxhdGVkIHRvIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKWAuIEl0J3MgYSBzaW1wbGUsIGJ1dCBjcnVjaWFsLCBhZGp1c3RtZW50LiBFc3NlbnRpYWxseSwgaXQncyByZXBsYWNpbmcgYGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpYCB3aXRoIGBhZGRfMm1vZCgweDQ4LCAwLCBkc3RfcmVnKWAuIFRoZSByZWFzb24/IEVuY29kaW5nIHRoZSBSRVggcHJlZml4IGNvcnJlY3RseSwgZXNwZWNpYWxseSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHRlbmRlZCByZWdpc3RlcnMgbGlrZSByOCB0aHJvdWdoIHIxNSwgd2hpY2ggYXJlIGJleW9uZCB0aGUgdHlwaWNhbCA4IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMuXG5cblRoZSBwcm9ibGVtLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRoYXQgYGFkZF8xbW9kYCBhcHBlYXJzIHRvIG9ubHkgdXNlIHRoZSBsb3dlciAzIGJpdHMgb2YgdGhlIGBkc3RfcmVnYCB0byBzZXQgdGhlIE1vZFIvTSBieXRlLiBCdXQgd2FpdCwgYW0gSSByaWdodD8gRG9lcyBgYWRkXzFtb2RgIG9ubHkgc2V0IHRoZSBSRVguQiBiaXQ/IEl0IHNlZW1zIGxpa2UgYGFkZF8ybW9kYCwgYnkgYWNjZXB0aW5nIGJvdGggYSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLCBpcyB0aGUgYmV0dGVyIGZpdCBoZXJlIGJlY2F1c2UgaXQgY29ycmVjdGx5IHNldHMgYm90aCB0aGUgUkVYLlIgYW5kIFJFWC5CIGJpdHMgaW4gdGhlIHByZWZpeC4gVGhhdCdzIGtleSBmb3IgdGhlIGV4dGVuZGVkIHJlZ2lzdGVycy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZy4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGJvdGggYGFkZF8xbW9kYCBhbmQgYGFkZF8ybW9kYCB0byB2ZXJpZnkgZXhhY3RseSBob3cgdGhleSBoYW5kbGUgdGhlIFJFWCBwcmVmaXggYW5kIHRoZSByZWdpc3RlciBlbmNvZGluZy4gQSBxdWljayB2ZXJpZmljYXRpb24gd2lsbCBzb2xpZGlmeSB0aGUgcmVhc29uaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoxMi4zMTkwNzg4MTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MTU4NDI5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZWZpbmUgYWRkXzFtb2RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoxMi4zODgyNDQyNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxNzM0NzA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIHRoZXNlIHdlcmUgbXkgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgYWRkXzFtb2RgIGluIHRoZSBCUEYgSklUIENvbXBpbGVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYWRkXzFtb2RgIHRoaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSB0aGUgaGVjayBpcyB0aGlzIGRlZmluZWQ/XCIgR2l2ZW4gdGhlIGNvbnRleHQsIG15IG1vbmV5J3Mgb24gaXQgYmVpbmcgYSBmdW5jdGlvbiBvciwgbW9yZSBsaWtlbHksIGEgbWFjcm8sIHR1Y2tlZCBhd2F5IHdpdGhpbiB0aGUgeDg2LXNwZWNpZmljIEJQRiBKSVQgY29tcGlsZXIgY29kZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBmaXJzdC4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIHBsYWNlIGZvciBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgSklUIGNvbXBpbGF0aW9uIGhlbHBlcnMuIEJ1dCwgSSB3b24ndCBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgaXQgYmVpbmcgZGVjbGFyZWQgaW4gYSByZWxhdGVkIGhlYWRlciBmaWxlIHdpdGhpbiB0aGF0IGRpcmVjdG9yeSBhcyB3ZWxsLiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoxNS40MDU1OTQ2NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0ODMyNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkZF8xbW9kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTI0Mz1zdGF0aWMgYm9vbCBpc19heHJlZyh1MzIgcmVnKVxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTI0OC0vKiBBZGQgbW9kaWZpZXJzIGlmICdyZWcnIG1hcHMgdG8geDg2LTY0IHJlZ2lzdGVycyBSOC4uUjE1ICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjI0OTpzdGF0aWMgdTggYWRkXzFtb2QodTggYnl0ZSwgdTMyIHJlZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjUwLXtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz05Mzg9c3RhdGljIHZvaWQgZW1pdF9tb3ZfaW1tMzIodTggKipwcHJvZywgYm9vbCBzaWduX3Byb3BhZ2F0ZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NDktXFx0XFx0LyogJ21vdiAlcmF4LCBpbW0zMicgc2lnbiBleHRlbmRzIGltbTMyICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjk1MDpcXHRcXHRiMSA9IGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy05NTEtXFx0XFx0YjIgPSAweEM3O1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk3MS1cXHRpZiAoaXNfZXJlZyhkc3RfcmVnKSlcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTcyOlxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDAsIGRzdF9yZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtOTczLVxcdEVNSVQxX29mZjMyKGFkZF8xcmVnKDB4QjgsIGRzdF9yZWcpLCBpbW0zMik7XFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM9OTc4PXN0YXRpYyB2b2lkIGVtaXRfbW92X2ltbTY0KHU4ICoqcHByb2csIHUzMiBkc3RfcmVnLFxcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk5NS1cXHRcXHQvKiBtb3ZhYnNxIHJheCwgaW1tNjQgKi9cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6OTk2OlxcdFxcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCBhZGRfMXJlZygweEI4LCBkc3RfcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTk5Ny1cXHRcXHRFTUlUKGltbTMyX2xvLCA0KTtcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xMTAyPXN0YXRpYyB2b2lkIG1heWJlX2VtaXRfMW1vZCh1OCAqKnBwcm9nLCB1MzIgcmVnLCBib29sIGlzNjQpXFxuLS1cXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEwNi1cXHRpZiAoaXM2NClcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6MTEwNzpcXHRcXHRFTUlUMShhZGRfMW1vZCgweDQ4LCByZWcpKTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTEwOC1cXHRlbHNlIGlmIChpc19lcmVnKHJlZykpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjExMDk6XFx0XFx0RU1JVDEoYWRkXzFtb2QoMHg0MCwgcmVnKSk7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTExMTAtXFx0KnBwcm9nID0gcHJvZztcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0yMjIxLVxcdFxcdFxcdFxcdC8qIEVtaXQgJ2Jzd2FwIHJheCcgdG8gc3dhcCA4IGJ5dGVzICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjIyMjI6XFx0XFx0XFx0XFx0RU1JVDMoYWRkXzFtb2QoMHg0OCwgZHN0X3JlZyksIDB4MEYsXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyMjMtXFx0XFx0XFx0XFx0ICAgICAgYWRkXzFyZWcoMHhDOCwgZHN0X3JlZykpO1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTIyODItXFx0XFx0XFx0fVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoyMjgzOlxcdFxcdFxcdEVNSVQyKGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpLCAweEM3KTtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMjI4NC1cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zODMzPXN0YXRpYyBpbnQgZW1pdF9icGZfZGlzcGF0Y2hlcih1OCAqKnBwcm9nLCBpbnQgYSwgaW50IGIsIHM2NCAqcHJvZ3MsIHU4ICppbWFnZSwgdTggKmJ1ZilcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODQyLVxcdFxcdCAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzozODQzOlxcdFxcdEVNSVQxKGFkZF8xbW9kKDB4NDgsIEJQRl9SRUdfMykpO1xcdC8qIGNtcCByZHgsZnVuYyAqL1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODQ0LVxcdFxcdGlmICghaXNfc2ltbTMyKHByb2dzW2FdKSlcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0zODYzLVxcdHBpdm90ID0gKGIgLSBhKSAvIDI7XFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM4NjQ6XFx0RU1JVDEoYWRkXzFtb2QoMHg0OCwgQlBGX1JFR18zKSk7XFx0XFx0LyogY21wIHJkeCxmdW5jICovXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM4NjUtXFx0aWYgKCFpc19zaW1tMzIocHJvZ3NbYSArIHBpdm90XSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjE1LjQ4MDQzMTQ4OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTAwNDg1MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgTW9kdWxlIERlZmluaXRpb25zKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3JlIG9uIHRoZSBzYW1lIHBhZ2Ugd2l0aCB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2tzLiBCZWZvcmUgSSBzdGFydCB0cnlpbmcgdG8gcmVhc29uIGFib3V0IHRoZSBpbnRlcmFjdGlvbnMgb3IgaGlnaGVyLWxldmVsIGxvZ2ljLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgZm91bmRhdGlvbmFsIGRlZmluaXRpb25zIGFyZSB3aGF0IEkgZXhwZWN0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgdGhlIGBhZGRfMW1vZGAgYW5kIGBhZGRfMm1vZGAgZGVmaW5pdGlvbnMuIFRoaXMgZmVlbHMgYWxtb3N0IHRvbyBiYXNpYywgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnksIGFuZCBpdCB3aWxsIHByZXZlbnQgYW55IGxhdGVyLCBhbmQgZW1iYXJyYXNzaW5nLCBtaXN0YWtlcy4gV2UgbmVlZCB0aGUgZGV0YWlscyB0byBiZSBjbGVhciBiZWZvcmUgd2UgY2FuIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzMzYsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoxOC4zODA5MTkyNTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0XFx0XFx0XFx0ICBCSVQoQlBGX1JFR19GUCkpO1xcbiAyNDE6XFx0fVxcbiAyNDI6XFx0XFxuIDI0MzpcXHRzdGF0aWMgYm9vbCBpc19heHJlZyh1MzIgcmVnKVxcbiAyNDQ6XFx0e1xcbiAyNDU6XFx0XFx0cmV0dXJuIHJlZyA9PSBCUEZfUkVHXzA7XFxuIDI0NjpcXHR9XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdC8qIEFkZCBtb2RpZmllcnMgaWYgJ3JlZycgbWFwcyB0byB4ODYtNjQgcmVnaXN0ZXJzIFI4Li5SMTUgKi9cXG4gMjQ5OlxcdHN0YXRpYyB1OCBhZGRfMW1vZCh1OCBieXRlLCB1MzIgcmVnKVxcbiAyNTA6XFx0e1xcbiAyNTE6XFx0XFx0aWYgKGlzX2VyZWcocmVnKSlcXG4gMjUyOlxcdFxcdFxcdGJ5dGUgfD0gMTtcXG4gMjUzOlxcdFxcdHJldHVybiBieXRlO1xcbiAyNTQ6XFx0fVxcbiAyNTU6XFx0XFxuIDI1NjpcXHRzdGF0aWMgdTggYWRkXzJtb2QodTggYnl0ZSwgdTMyIHIxLCB1MzIgcjIpXFxuIDI1NzpcXHR7XFxuIDI1ODpcXHRcXHRpZiAoaXNfZXJlZyhyMSkpXFxuIDI1OTpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI2MDpcXHRcXHRpZiAoaXNfZXJlZyhyMikpXFxuIDI2MTpcXHRcXHRcXHRieXRlIHw9IDQ7XFxuIDI2MjpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjYzOlxcdH1cXG4gMjY0OlxcdFxcbiAyNjU6XFx0c3RhdGljIHU4IGFkZF8zbW9kKHU4IGJ5dGUsIHUzMiByMSwgdTMyIHIyLCB1MzIgaW5kZXgpXFxuIDI2NjpcXHR7XFxuIDI2NzpcXHRcXHRpZiAoaXNfZXJlZyhyMSkpXFxuIDI2ODpcXHRcXHRcXHRieXRlIHw9IDE7XFxuIDI2OTpcXHRcXHRpZiAoaXNfZXJlZyhpbmRleCkpXFxuIDI3MDpcXHRcXHRcXHRieXRlIHw9IDI7XFxuIDI3MTpcXHRcXHRpZiAoaXNfZXJlZyhyMikpXFxuIDI3MjpcXHRcXHRcXHRieXRlIHw9IDQ7XFxuIDI3MzpcXHRcXHRyZXR1cm4gYnl0ZTtcXG4gMjc0OlxcdH1cXG4gMjc1OlxcdFxcbiAyNzY6XFx0LyogRW5jb2RlICdkc3RfcmVnJyByZWdpc3RlciBpbnRvIHg4Ni02NCBvcGNvZGUgJ2J5dGUnICovXFxuIDI3NzpcXHRzdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXFxuIDI3ODpcXHR7XFxuIDI3OTpcXHRcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ107XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjE4LjM4MTEzNTA4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDk4MDcyMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpc3NlY3RpbmcgdGhlIEFzc2VtYmx5OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYXNzZW1ibHkgZ2VuZXJhdGlvbiwgYW5kIHRoZSBgYWRkXzFtb2RgIGZ1bmN0aW9uIGlzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0LiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhhdCBpdCBzZXRzIHRoZSBSRVguQiBiaXQgaWYgdGhlIGByZWdgIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyLCB0aGF0J3MgY3J1Y2lhbCBmb3IgYWRkcmVzc2luZyByZWdpc3RlcnMgYmV5b25kIHRoZSBzdGFuZGFyZCBvbmVzLCBhIGtleSBhc3BlY3Qgb2YgeDg2LTY0LlxuXG5Ob3csIGBhZGRfMm1vZGAgaXMgc2ltaWxhciwgaGFuZGxpbmcgdGhlIFJFWCBwcmVmaXggYnV0IHNsaWdodGx5IG1vcmUgY29tcGxleDsgaXQgc2V0cyBib3RoIFJFWC5CIGlmIGByMWAgaXMgZXh0ZW5kZWQgKmFuZCogUkVYLlIgaWYgYHIyYCBpcy4gVGhlIG9yaWdpbmFsIEMgY29kZSBzbmlwcGV0IGlzIHRoZSBjcnV4OlxuXG5gYGBjXG5cdFx0XHRcdC8qIGFkZCBcdTAwM2Nkc3RcdTAwM2UsIGdzOltcdTAwM2NvZmZcdTAwM2VdICovXG5cdFx0XHRcdEVNSVQyKDB4NjUsIGFkZF8xbW9kKDB4NDgsIGRzdF9yZWcpKTtcblx0XHRcdFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xuXHRcdFx0XHRFTUlUKCh1MzIpKHVuc2lnbmVkIGxvbmcpXHUwMDI2dGhpc19jcHVfb2ZmLCA0KTtcbmBgYFxuXG5MZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGFzc2VtYmxpbmcgYW4gYGFkZCBkc3QsIGdzOltvZmZdYCBpbnN0cnVjdGlvbiAtIHRoZSBcImRzdFwiIGlzIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciwgYW5kIFwiZ3M6W29mZl1cIiBpcyBtZW1vcnkgYWRkcmVzc2VkIHJlbGF0aXZlIHRvIHRoZSBHUyBzZWdtZW50LiBUaGUgb3Bjb2RlIGZvciBhbiBgQUREIHIvbTY0IHRvIHI2NGAgaW5zdHJ1Y3Rpb24gaXMgYDB4MDNgLiBUaGUga2V5IHRvIHRoZSBpbnN0cnVjdGlvbiBpcyBpbiB0aGUgc2Vjb25kIGxpbmUgb2YgY29kZSwgdGhlIGBFTUlUMygweDAzLCBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKSwgMHgyNSlgIGNhbGwsIHdoZXJlIGBhZGRfMnJlZygweDA0LCAwLCBkc3RfcmVnKWAgY2FsY3VsYXRlcyB0aGUgTW9kUi9NIGJ5dGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYGFkZF8ycmVnYCBmdW5jdGlvbiBwcmVjaXNlbHkuIEl0J3MgdGhlIGtleSB0byBjb3JyZWN0bHkgZW5jb2RpbmcgdGhpcyBpbnN0cnVjdGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciBleHRlbmRlZCByZWdpc3RlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMDIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoyMy44NzkyMDkzOTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzY6XFx0LyogRW5jb2RlICdkc3RfcmVnJyByZWdpc3RlciBpbnRvIHg4Ni02NCBvcGNvZGUgJ2J5dGUnICovXFxuIDI3NzpcXHRzdGF0aWMgdTggYWRkXzFyZWcodTggYnl0ZSwgdTMyIGRzdF9yZWcpXFxuIDI3ODpcXHR7XFxuIDI3OTpcXHRcXHRyZXR1cm4gYnl0ZSArIHJlZzJoZXhbZHN0X3JlZ107XFxuIDI4MDpcXHR9XFxuIDI4MTpcXHRcXG4gMjgyOlxcdC8qIEVuY29kZSAnZHN0X3JlZycgYW5kICdzcmNfcmVnJyByZWdpc3RlcnMgaW50byB4ODYtNjQgb3Bjb2RlICdieXRlJyAqL1xcbiAyODM6XFx0c3RhdGljIHU4IGFkZF8ycmVnKHU4IGJ5dGUsIHUzMiBkc3RfcmVnLCB1MzIgc3JjX3JlZylcXG4gMjg0OlxcdHtcXG4gMjg1OlxcdFxcdHJldHVybiBieXRlICsgcmVnMmhleFtkc3RfcmVnXSArIChyZWcyaGV4W3NyY19yZWddIFxcdTAwM2NcXHUwMDNjIDMpO1xcbiAyODY6XFx0fVxcbiAyODc6XFx0XFxuIDI4ODpcXHQvKiBTb21lIDEtYnl0ZSBvcGNvZGVzIGZvciBiaW5hcnkgQUxVIG9wZXJhdGlvbnMgKi9cXG4gMjg5OlxcdHN0YXRpYyB1OCBzaW1wbGVfYWx1X29wY29kZXNbXSA9IHtcXG4gMjkwOlxcdFxcdFtCUEZfQUREXSA9IDB4MDEsXFxuIDI5MTpcXHRcXHRbQlBGX1NVQl0gPSAweDI5LFxcbiAyOTI6XFx0XFx0W0JQRl9BTkRdID0gMHgyMSxcXG4gMjkzOlxcdFxcdFtCUEZfT1JdID0gMHgwOSxcXG4gMjk0OlxcdFxcdFtCUEZfWE9SXSA9IDB4MzEsXFxuIDI5NTpcXHRcXHRbQlBGX0xTSF0gPSAweEUwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODoyMy44Nzk0NTY1MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4MDAwNDc2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgSklUIEJ1ZyBhbmQgSXRzIEZpeCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBJJ3ZlIGdvdCBhIG1ham9yIGlzc3VlLiBUaGUgYGFkZF8ycmVnKDB4MDQsIDAsIGRzdF9yZWcpYCBpbnN0cnVjdGlvbi4uLiB0aGlzIGNsZWFybHkgc2V0cyBgZHN0X3JlZ2AgYXMgdGhlIGRlc3RpbmF0aW9uLCBidXQgdGhlIGtleSBpcyB0aGF0IGBkc3RfcmVnYCBlbmRzIHVwIGluIHRoZSBgcmVnYCBmaWVsZCBvZiB0aGUgTW9kUi9NIGJ5dGUuIFRoYXQgZmllbGQgaXMgZXh0ZW5kZWQgYnkgdGhlIFJFWC5SIGJpdC4gQnV0LCBsb29raW5nIGF0IHRoZSAqb3JpZ2luYWwqIGNvZGUsIGl0IHdhcyB1c2luZyBgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZylgLiBUaGF0IGZ1bmN0aW9uIHNldHMgUkVYLkIgaWYgYGRzdF9yZWdgIGlzIGV4dGVuZGVkLiBCdXQgaG9sZCBvbiwgUkVYLkIgZXh0ZW5kcyB0aGUgKnIvbSogZmllbGQsICpub3QqIHRoZSBgcmVnYCBmaWVsZCEgVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCBjb25mdXNpbmcgYmVjYXVzZSBvZiB0aGUgaW50ZXJhY3Rpb24gb2YgTW9kUi9NIGFuZCBTSUIgYnl0ZXMuXG5cbk5vdywgd2l0aCBhIE1vZFIvTSBvZiBgMHgwNGAsIHdlIGtub3cgdGhlcmUncyBhIFNJQiBieXRlICh3aGljaCBpcyBgMHgyNWAgaW4gdGhpcyBjYXNlKS4gVGhlIFNJQiBieXRlIG1lYW5zIGBkaXNwMzJgIHdpdGggbm8gYmFzZSBvciBpbmRleCwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEpJVCwgc28gdGhlIGByL21gIGZpZWxkIGlzbid0IGFjdHVhbGx5IGEgcmVnaXN0ZXIsIGl0IGp1c3QgaW1wbGllcyBgMTAwYCAoU0lCKS4gU2V0dGluZyBSRVguQiAqd291bGQqIGNoYW5nZSB0aGUgU0lCIGJ5dGUncyBiYXNlIHJlZ2lzdGVyLCBJIHRoaW5rLiBJZiBSRVguQiBpcyBzZXQgd2l0aCBNb2RSL00gYDA0YCwgdGhlbiB0aGUgU0lCIGJhc2UgaXMgZXh0ZW5kZWQuIFRoZSBTSUIgYnl0ZSBpcyBgMHgyNWAgKDAwIDEwMCAxMDEpLCB3aGVyZSB0aGUgYmFzZSBpcyBgMTAxYCAoUkJQL2Rpc3AzMikuIElmIFJFWC5CIGlzIHNldCwgdGhpcyBiYXNlIGJlY29tZXMgYDExMDFgIChSMTMpLlxuXG5TbywgdGhlIGlzc3VlIGlzLCBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8vcmVhZGluZyBmcm9tIGBkaXNwMzJgLCBpdCB3b3VsZCBiZSB3cml0aW5nIHRvL3JlYWRpbmcgZnJvbSBgW1IxMyArIGRpc3AzMl1gISBBbmQsIHJlbWVtYmVyLCBSRVguUiAqd2Fzbid0KiBzZXQsIHNvIGBkc3RfcmVnYCBnb3QgdHJ1bmNhdGVkIHRvIGl0cyBsb3dlciAzIGJpdHMuIFRoaXMgaXMgYSBkaXNhc3RlciEgRm9yIGV4YW1wbGUsIGlmIGBkc3RfcmVnYCBpcyBSOCAoZXh0ZW5kZWQgUjApLCB0aGUgY29kZSB3b3VsZCBpbmNvcnJlY3RseSB3cml0ZSB0byBSMCAoUkFYKSwgYW5kIHRoZSByZWFkIHdvdWxkIGJlIGZyb20gYGdzOltSMTMgKyBkaXNwMzJdYCBpbnN0ZWFkIG9mIGBnczpbZGlzcDMyXWAuIFRoaXMgaXMgYSBodWdlIGJ1ZyBpbiB0aGUgSklUIVxuXG5UaGUgcGF0Y2ggZml4ZXMgdGhpcyBieSB1c2luZyBgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZylgLiBgYWRkXzJtb2RgIGlzIG11Y2ggYmV0dGVyIGJlY2F1c2UgaXQgY29ycmVjdGx5IGhhbmRsZXMgdGhlIFJFWCBwcmVmaXhlcy4gSXQgc2V0cyBSRVguQiBpZiB0aGUgZmlyc3QgcmVnaXN0ZXIgKGByMWAsIHdoaWNoIGlzIDApIGlzIGV4dGVuZGVkLCAqYW5kKiBSRVguUiBpZiB0aGUgc2Vjb25kIHJlZ2lzdGVyIChgZHN0X3JlZ2ApIGlzIGV4dGVuZGVkLiBUaGlzIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGJlY2F1c2UgUkVYLlIgaXMgbmVlZGVkIGZvciBgZHN0X3JlZ2AgaW4gdGhpcyBjYXNlLCBhbmQgUkVYLkIgaXMgY29ycmVjdGx5IG5vdCBzZXQuXG5cblRoaXMgaXMgYWJzb2x1dGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBBbnkgaW5zdHJ1Y3Rpb24gYmVpbmcgSklUdGVkIHZpYSB0aGlzIGNvZGUgY291bGQgYmUgYnJva2VuLiBEZWZpbml0ZWx5IGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmchIE5vdywgbGV0J3Mgc2VlIHdoYXQgYGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pYCBpcywgd2hpY2ggc2VlbXMgdG8gYmUgdGhlIGluc3RydWN0aW9uIHRoaXMgYnVnIGltcGFjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgbW9yZSBicm9hZGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIwOSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjM0LjY3OTUwNjY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4OTE1NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzNC1cXHRcXHRcXHRcXHQvKiBtb3YgXFx1MDAzY2RzdFxcdTAwM2UsIFxcdTAwM2NzcmNcXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjM0Ljc4MjQwMjcxOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg2Njg3NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyBEb3duIGBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZGVmaW5pdGlvbiBvZiBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgLiBUaGlzIHNlZW1zIGxpa2UgYSBmdW5jdGlvbiwgb3IgcG9zc2libHkgYSBtYWNybywgcmVsYXRlZCB0byBpbnN0cnVjdGlvbiBhbmFseXNpcywgc3BlY2lmaWNhbGx5IGFyb3VuZCBgbW92YCBpbnN0cnVjdGlvbnMgYW5kIHBvdGVudGlhbGx5IHNvbWV0aGluZyB0byBkbyB3aXRoIHBlci1DUFUgYWRkcmVzc2luZy4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8ganVzdCAqZmluZCogdGhlIGRhbW4gdGhpbmcuIFdoZXJlIGlzIGl0IGRlZmluZWQ/IElzIGl0IGluIGEgaGVhZGVyIGZpbGU/IEEgQyBmaWxlPyBJcyBpdCBwYXJ0IG9mIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29kZT8gSSBuZWVkIHRvIGZpZ3VyZSB0aGlzIG91dCBxdWlja2x5LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIC0gYGdyZXBgLCBgZmluZGAsIG9yIG1heWJlIGEgc291cmNlIGNvZGUgbmF2aWdhdGlvbiB0b29sIHRvIHBpbnBvaW50IGl0cyBsb2NhdGlvbi4gVGhlIGdvYWwgaXMgdG8gcXVpY2tseSB1bmRlcnN0YW5kICpob3cqIHRoaXMgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYW5kICp3aGF0KiBpdCdzIGFjdHVhbGx5IGxvb2tpbmcgZm9yIGluIGFuIGluc3RydWN0aW9uLiBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzg5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6MzguNjY5MDkyNjA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ1ODIyNDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc25faXNfbW92X3BlcmNwdV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMzAyPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU1LVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEzNTY6XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTctXFx0XFx0XFx0aWYgKGRzdCAhPSBzcmMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTY3PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjYxOlxcdFxcdFxcdGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihcXHUwMDI2aW5zbltpXSkpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU01QKSkge1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVxcdFxcdFxcdGlmIChyZCAhPSBycylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzNC1cXHRcXHRcXHRcXHQvKiBtb3YgXFx1MDAzY2RzdFxcdTAwM2UsIFxcdTAwM2NzcmNcXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDEtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDI6c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjQxLjAxNDk4MTI1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk3MTk5ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgSW5zdHJ1Y3Rpb24gQW5hbHlzaXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYCBtYWNyby4gSSBrbm93IGl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UgaGFuZGxlIHBlci1DUFUgdmFyaWFibGVzIHdpdGhpbiBCUEYgcHJvZ3JhbXMsIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgd29yayB3aXRoLi4uIHdlbGwsIHlvdSBrbm93LCBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gZWZmaWNpZW50IEJQRiBieXRlY29kZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb24uIExldCdzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZSDigJMgc3BlY2lmaWNhbGx5LCBgaW5jbHVkZS9saW51eC9maWx0ZXIuaGAuIEknbSBleHBlY3RpbmcgdGhpcyBtYWNybyB0byBlbmNhcHN1bGF0ZSB0aGUgbG9naWMgZm9yIGlkZW50aWZ5aW5nIGEgc3BlY2lmaWMgc2VxdWVuY2Ugb2YgQlBGIGluc3RydWN0aW9ucyB0aGF0IHJlcHJlc2VudCBhIG1vdmUgb3BlcmF0aW9uIGludm9sdmluZyBhIHBlci1DUFUgdmFyaWFibGUncyBhZGRyZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHByb3Blcmx5IGludGVycHJldCBCUEYgYnl0ZWNvZGUuIEknbSBob3BpbmcgaXQncyByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgbWF5YmUgY2hlY2tpbmcgZm9yIHNwZWNpZmljIG9wY29kZSBjb21iaW5hdGlvbnMgYW5kIHJlZ2lzdGVyIHVzYWdlLiBUaGUgZGV2aWwgaXMgYWx3YXlzIGluIHRoZSBkZXRhaWxzIHdpdGggdGhpcyBzdHVmZiwgb2YgY291cnNlLCBzbyBJJ20gcHJlcGFyZWQgZm9yIHNvbWUgcG90ZW50aWFsIGJpdHdpc2Ugb3BlcmF0aW9ucyBvciBwb2ludGVyIGFyaXRobWV0aWMgY2hlY2tzIHdpdGhpbiB0aGUgbWFjcm8gZGVmaW5pdGlvbi4gSSdtIGtlZW4gdG8gc2VlIGlmIHRoaXMgaGFuZGxlcyB0aGUgZGlmZmVyZW50IHZhcmlhdGlvbnMgb2YgcGVyLWNwdSBhY2Nlc3MsIHN1Y2ggYXMgdmlhIHRoZSBgUEVSQ1BVX0dFVGAgbWFjcm8sIG9yIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgYXJyYXkgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjQ2LjExMjE4NTM3OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9maWx0ZXIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0XFx0LmltbSAgID0gMCB9KVxcbiAyMDE6XFx0XFxuIDIwMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbiAyMDM6XFx0e1xcbiAyMDQ6XFx0XFx0cmV0dXJuIGluc24tXFx1MDAzZWNvZGUgPT0gKEJQRl9BTFU2NCB8IEJQRl9NT1YgfCBCUEZfWCkgXFx1MDAyNlxcdTAwMjYgaW5zbi1cXHUwMDNlb2ZmID09IEJQRl9BRERSX1BFUkNQVTtcXG4gMjA1OlxcdH1cXG4gMjA2OlxcdFxcbiAyMDc6XFx0LyogU2hvcnQgZm9ybSBvZiBtb3YsIGRzdF9yZWcgPSBpbW0zMiAqL1xcbiAyMDg6XFx0XFxuIDIwOTpcXHQjZGVmaW5lIEJQRl9NT1Y2NF9JTU0oRFNULCBJTU0pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTA6XFx0XFx0KChzdHJ1Y3QgYnBmX2luc24pIHtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxMTpcXHRcXHRcXHQuY29kZSAgPSBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX0ssXFx0XFx0XFxcXFxcbiAyMTI6XFx0XFx0XFx0LmRzdF9yZWcgPSBEU1QsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTM6XFx0XFx0XFx0LnNyY19yZWcgPSAwLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjE0OlxcdFxcdFxcdC5vZmYgICA9IDAsXFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAyMTU6XFx0XFx0XFx0LmltbSAgID0gSU1NIH0pXFxuIDIxNjpcXHRcXG4gMjE3OlxcdCNkZWZpbmUgQlBGX01PVjMyX0lNTShEU1QsIElNTSlcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDIxODpcXHRcXHQoKHN0cnVjdCBicGZfaW5zbikge1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMjE5OlxcdFxcdFxcdC5jb2RlICA9IEJQRl9BTFUgfCBCUEZfTU9WIHwgQlBGX0ssXFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODo0Ni4xMTIzNzE1MzlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3NDQ3NjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGIEluc3RydWN0aW9uIEdlbmVyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEJQRiBpbnN0cnVjdGlvbiwgc3BlY2lmaWNhbGx5IGBCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1hgIHdpdGggYG9mZiA9PSBCUEZfQUREUl9QRVJDUFVgLiBJIHJlY29nbml6ZSB0aGlzIHBhdHRlcm47IGl0J3Mgc29tZXRoaW5nIHRoZSB2ZXJpZmllciBnZW5lcmF0ZXMgb3IgdXNlcyBpbnRlcm5hbGx5IHdpdGhpbiBCUEYgcHJvZ3JhbXMuIFRoZSBjb250ZXh0IGlzIHRoaXMgbmV3IHRlc3QsIGB2ZXJpZmllcl9wZXJjcHVfYWRkci5jYCwgd2hpY2ggdXRpbGl6ZXMgYHI1ID0gJVtwZXJjcHVfZGF0YV0gbGw7IHIwID0gKih1MzIgKikocjUgKyAwKTtgLiBXYWl0IGEgc2Vjb25k4oCmIHRoYXQgYHI1ID0gJVtwZXJjcHVfZGF0YV0gbGxgIGxvb2tzIGEgbG90IGxpa2UgYW4gYGxkX2ltbTY0YCBpbnN0cnVjdGlvbi5cblxuVGhlIHRlc3QncyBjb21tZW50IGlzIGtleSBoZXJlOiBcIkFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsIHNvIHRoZSByZWdpc3RlciB0aGUgYWRkcmVzcyBsYW5kcyBpbiBkZWNpZGVzIGhvdyB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC5cIiBTbywgdGhlIHZlcmlmaWVyIGlzIGVpdGhlciByZXBsYWNpbmcgdGhlIGBsZF9pbW02NGAgb3IgZm9sbG93aW5nIGl0IHdpdGggdGhpcyBgbW92X3BlcmNwdV9hZGRyYCBpbnN0cnVjdGlvbi4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyB0aGlzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gd2hlcmUgYEJQRl9BRERSX1BFUkNQVWAgaXMgYWN0dWFsbHkgdXNlZCB3aXRoaW4gdGhlIHZlcmlmaWVyJ3MgY29kZS4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzIHNlcXVlbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE4OjUxLjU4Njg1MTU4MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzODY1MTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9BRERSX1BFUkNQVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2Rpc2FzbS5jPTE2OT1zdGF0aWMgYm9vbCBpc19hZGRyX3NwYWNlX2Nhc3QoY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi9kaXNhc20uYy0xNzYtICogZHN0X3JlZyA9IHNyY19yZWcgKyBcXHUwMDNjcGVyY3B1X2Jhc2Vfb2ZmXFx1MDAzZVxcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTc3OiAqIEJQRl9BRERSX1BFUkNQVSBpcyB1c2VkIGFzIGEgc3BlY2lhbCBpbnNuLVxcdTAwM2VvZmYgdmFsdWUuXFxua2VybmVsL2JwZi9kaXNhc20uYy0xNzgtICovXFxua2VybmVsL2JwZi9kaXNhc20uYzoxNzk6I2RlZmluZSBCUEZfQUREUl9QRVJDUFVcXHQoLTEpXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODAtXFxua2VybmVsL2JwZi9kaXNhc20uYz0xODE9c3RhdGljIGlubGluZSBib29sIGlzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxua2VybmVsL2JwZi9kaXNhc20uYy0xODIte1xcbmtlcm5lbC9icGYvZGlzYXNtLmM6MTgzOlxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XFxua2VybmVsL2JwZi9kaXNhc20uYy0xODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxODo1Mi4yODA3MjE1NTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwMDk3MjcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIEJQRiBWZXJpZmllcioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIEJQRiB2ZXJpZmllciBjb2RlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzZWUgaG93IGl0IGhhbmRsZXMgcGVyLUNQVSBhZGRyZXNzIG1hbmlwdWxhdGlvbiwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgcHJlc2VuY2Ugb2YgYEJQRl9BRERSX1BFUkNQVWAgb3IsIGV2ZW4gYmV0dGVyLCBhIGZ1bmN0aW9uIGxpa2UgYGluc25faXNfbW92X3BlcmNwdV9hZGRyYC4gVGhvc2Ugd2lsbCBiZSBteSBrZXkgaW5kaWNhdG9ycy4gVGhpcyBzaG91bGQgZ2V0IG1lIHJpZ2h0IHRvIHRoZSBoZWFydCBvZiBob3cgaXQgdmFsaWRhdGVzIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHdoZW4gZGVhbGluZyB3aXRoIHBlci1DUFUgZGF0YS4gSXQncyB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHN0YXJ0LCBhcyBJIGtub3cgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvciBpbiB0aGlzIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6NTUuODgxNjk3MTc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODc3NjE0OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0FERFJfUEVSQ1BVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6NTUuOTcwNDg0MDA0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTAxMDg1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQlBGIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIGZvciBgQlBGX0FERFJfUEVSQ1BVYC4gSSAqdGhvdWdodCogaXQgd2FzIGluIGBrZXJuZWwvYnBmL2Rpc2FzbS5jYCwgYnV0IHRoYXQgZG9lc24ndCBmZWVsIHJpZ2h0LiBNeSBpbnN0aW5jdHMgYXJlIHRlbGxpbmcgbWUgaXQncyBtb3JlIGxpa2VseSBpbiBvbmUgb2YgdGhlIGhlYWRlciBmaWxlcywgcmlnaHQ/IFNwZWNpZmljYWxseSwgSSdkIGJldCBpdCdzIHR1Y2tlZCBhd2F5IGluIGBpbmNsdWRlL2xpbnV4L2ZpbHRlci5oYCBvciwgZXZlbiBtb3JlIGxpa2VseSwgYGluY2x1ZGUvdWFwaS9saW51eC9icGYuaGAuIEdvdHRhIGNoZWNrIHRob3NlIGxvY2F0aW9ucyBmaXJzdC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgQlBGIGRlZmluaXRpb25zIHVzdWFsbHkgcmVzaWRlLCBhdCB0aGUgdmVyeSBjb3JlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRob3NlIGluY2x1ZGVzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjAyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTg6NTkuODIwNTk2MDUxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDI0MzY1MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlBGX0FERFJfUEVSQ1BVXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZmlsdGVyLmg9NDA9c3RydWN0IGN0bF90YWJsZV9oZWFkZXI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE4OS0gKiBkc3RfcmVnID0gc3JjX3JlZyArIFxcdTAwM2NwZXJjcHVfYmFzZV9vZmZcXHUwMDNlXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoxOTA6ICogQlBGX0FERFJfUEVSQ1BVIGlzIHVzZWQgYXMgYSBzcGVjaWFsIGluc24tXFx1MDAzZW9mZiB2YWx1ZS5cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE5MS0gKi9cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjE5MjojZGVmaW5lIEJQRl9BRERSX1BFUkNQVVxcdCgtMSlcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTE5My1cXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTk4LVxcdFxcdC5zcmNfcmVnID0gU1JDLFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oOjE5OTpcXHRcXHQub2ZmICAgPSBCUEZfQUREUl9QRVJDUFUsXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMjAwLVxcdFxcdC5pbW0gICA9IDAgfSlcXG4tLVxcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MjAyPXN0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDMte1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MjA0OlxcdHJldHVybiBpbnNuLVxcdTAwM2Vjb2RlID09IChCUEZfQUxVNjQgfCBCUEZfTU9WIHwgQlBGX1gpIFxcdTAwMjZcXHUwMDI2IGluc24tXFx1MDAzZW9mZiA9PSBCUEZfQUREUl9QRVJDUFU7XFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxOTowMC43NjMwNDAwMDNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMTUzMTk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGX01PVjY0X1BFUkNQVV9SRUcgVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgQlBGX01PVjY0X1BFUkNQVV9SRUdgIGlzIGJlaW5nIGxldmVyYWdlZC4gSSB3YW50IHRvIHNlZSB0aGlzIGluc3RydWN0aW9uIGluIGFjdGlvbi4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyBnb2luZyB0byBiZSBhIHF1aWNrLCB0YXJnZXRlZCBjb2RlIHNlYXJjaC4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBCUEYgcHJvZ3JhbXMgdGhhdCBhcmUgbGlrZWx5IGludGVyYWN0aW5nIHdpdGggcGVyLUNQVSBkYXRhLCB3aGljaCBpcyB3aGF0IHRoaXMgb3Bjb2RlIHNpZ25pZmllcy4gSSBzaG91bGQgZXhwZWN0IHRvIGZpbmQgdGhpcyBpbnN0cnVjdGlvbiBpbiBwbGFjZXMgdGhhdCBhcmUgZGVhbGluZyB3aXRoIG1ldHJpY3MgY29sbGVjdGlvbiwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZywgb3IgYW55dGhpbmcgcmVsYXRlZCB0byBwZXItQ1BVIHJlc291cmNlIHRyYWNraW5nIGFuZCBhY2Nlc3MuIEknbGwgcHJvYmFibHkgbG9vayBpbnRvIHRyYWNpbmcgcHJvZ3JhbXMsIG5ldHdvcmsgZmlsdGVyIHByb2dyYW1zLiBUaGlzIG9wY29kZSBpcyBwcmV0dHkgc3BlY2lmaWMsIHNvIGEgc3RyYWlnaHRmb3J3YXJkIGdyZXAgc2hvdWxkIGRvIHRoZSB0cmljayB0byBzZWUgd2hhdCBpbnRlcmVzdGluZyBwcm9ncmFtcyBhcmUgd3JpdHRlbiB0aGF0IG1ha2UgdXNlIG9mIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjA1LjA2NDU3NTA2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDM3ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJQRl9NT1Y2NF9QRVJDUFVfUkVHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYXJyYXltYXAuYz0yOTQ9c3RhdGljIGludCBwZXJjcHVfYXJyYXlfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbmtlcm5lbC9icGYvYXJyYXltYXAuYy0zMTgtXFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbmtlcm5lbC9icGYvYXJyYXltYXAuYzozMTk6XFx0Kmluc24rKyA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL2FycmF5bWFwLmMtMzIwLVxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkEsIDAsIDAsIDEpO1xcbi0tXFxua2VybmVsL2JwZi9maXh1cHMuYz0xNTAzPWludCBicGZfZG9fbWlzY19maXh1cHMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTg2My1cXHRcXHRcXHRpbnNuX2J1ZlswXSA9IGluc25bMV07XFxua2VybmVsL2JwZi9maXh1cHMuYzoxODY0OlxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoaW5zbi1cXHUwMDNlZHN0X3JlZywgaW5zbi1cXHUwMDNlZHN0X3JlZyk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0xODY1LVxcdFxcdFxcdGNudCA9IDI7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxNzYtXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgKHUzMikodW5zaWduZWQgbG9uZylcXHUwMDI2Y3B1X251bWJlcik7XFxua2VybmVsL2JwZi9maXh1cHMuYzoyMTc3OlxcdFxcdFxcdGluc25fYnVmWzFdID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xcbmtlcm5lbC9icGYvZml4dXBzLmMtMjE3OC1cXHRcXHRcXHRpbnNuX2J1ZlsyXSA9IEJQRl9MRFhfTUVNKEJQRl9XLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTIxOTgtXFx0XFx0XFx0aW5zbl9idWZbMF0gPSBCUEZfTU9WNjRfSU1NKEJQRl9SRUdfMCwgKHUzMikodW5zaWduZWQgbG9uZylcXHUwMDI2Y3VycmVudF90YXNrKTtcXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjIxOTk6XFx0XFx0XFx0aW5zbl9idWZbMV0gPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XFxua2VybmVsL2JwZi9maXh1cHMuYy0yMjAwLVxcdFxcdFxcdGluc25fYnVmWzJdID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDE0PXN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0MjctXFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0Mjg6XFx0Kmluc24rKyA9IEJQRl9NT1Y2NF9QRVJDUFVfUkVHKEJQRl9SRUdfMCwgQlBGX1JFR18wKTtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxOTowNS4xODE2MTY3MTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAxNjM0MTA2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQlBGIEpJVCBDb21waWxlciBCdWcgaW4geDg2IEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBhbmQgaXQgc2VlbXMgbGlrZSBgQlBGX01PVjY0X1BFUkNQVV9SRUdgIGlzIGNydWNpYWwgaW4gYGJwZl9kb19taXNjX2ZpeHVwc2AuIEl0J3MgcmlnaHQgdGhlcmUsIHBhdGNoaW5nIHVwIGBsZF9pbW02NGAgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHBlci1DUFUgbWFwcy4gVGhlIHRlc3QgY29kZSBjb21tZW50LCBcIkFuIGxkX2ltbTY0IG9mIGEgcGVyLUNQVSBtYXAgdmFsdWUgaXMgZm9sbG93ZWQgYnkgYSBtb3ZfcGVyY3B1X2FkZHIgdGhhdCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIsXCIgcGVyZmVjdGx5IGxpbmVzIHVwIHdpdGggdGhpcy5cblxuU28sIGhlcmUncyB3aGF0J3MgaGFwcGVuaW5nOiBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyLiBTcGVjaWZpY2FsbHksIHdoZW4gYG1vdl9wZXJjcHVfYWRkcmAgaXMgSklUdGVkLCBhbmQgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGhhcHBlbnMgdG8gYmUgYW4gZXh0ZW5kZWQgcmVnaXN0ZXIsIGxpa2UgUjgtUjE1LCB0aGUgZ2VuZXJhdGVkIGluc3RydWN0aW9uIGlzIG1lc3NlZCB1cC4gSW5zdGVhZCBvZiBhZGRpbmcgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSBpbnRlbmRlZCBleHRlbmRlZCByZWdpc3RlciwgaXQncyBhZGRpbmcgaXQgdG8gdGhlIGxvd2VyIHBhcnQgb2YgdGhhdCByZWdpc3RlciAoUkFYIGluc3RlYWQgb2YgUjgsIGZvciBleGFtcGxlKS4gVGhpcyBtZWFucyB0aGUgSklUIGNvbXBpbGVyIGlzIHJlYWRpbmcgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLCBhbmQgaXQncyBhbHNvIGNoYW5naW5nIHRoZSBTSUIgYmFzZSByZWdpc3RlciB3aGljaCBvbmx5IGFtcGxpZmllcyB0aGlzIGlzc3VlLlxuXG5UaGlzIGlzIGEgc2VyaW91cyBpc3N1ZS4gSXQgbWVhbnMgdGhlIEJQRiBwcm9ncmFtIHJlYWRzIGZyb20gb3Igd3JpdGVzIHRvIHRoZSB3cm9uZyBtZW1vcnkgYWRkcmVzcywgd2hpY2ggY2FuIGNhdXNlIGEga2VybmVsIGNyYXNoIG9yLCB3b3JzZSwgYSBwcml2aWxlZ2UgZXNjYWxhdGlvbi4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIGNvbmZpcm0gYW5kIGV4cGFuZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpc3N1ZS5cblxuVG8gZnV6eiB0aGlzIGVmZmVjdGl2ZWx5LCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gQlBGIHByb2dyYW1zIHRoYXQgYXJlIGxldmVyYWdpbmcgcGVyLUNQVSBtYXBzIG9yIHZhcmlhYmxlcy4gQW5kLCBJJ2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3NlcyBhcmUgbG9hZGVkIGludG8gZXh0ZW5kZWQgcmVnaXN0ZXJzIChSOC1SMTUpLiBUaGUgZml4LCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgc2hvdWxkIGJlIGluIGBhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZG9faml0YCBmdW5jdGlvbiwgYW5kIG1heWJlIGBicGZfaW50X2ppdF9jb21waWxlYC5cblxuVGltZSB0byBjaGVjayB0aGUgbmVjZXNzYXJ5IGBFbmFibGVDb25maWdzYC4gSSdsbCBuZWVkIGBDT05GSUdfQlBGX0pJVGAsIG9idmlvdXNseS4gQW5kIHNpbmNlIHRoZSBidWcgaXMgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX1NNUGAgYmxvY2ssIEknbGwgbmVlZCBgQ09ORklHX1NNUGAgZW5hYmxlZCB0b28uIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29kZSBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYCBmb3IgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9ucyByZWxhdGVkIHRvIGAjaWZkZWYgQ09ORklHX1NNUGAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6MTUuMzQ1MDMwODExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzkzNzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX1NNUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTE2MTM9c3RhdGljIHZvaWQgZW1pdF9wcml2X2ZyYW1lX3B0cih1OCAqKnBwcm9nLCB2b2lkIF9fcGVyY3B1ICpwcml2X2ZyYW1lX3B0cilcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xNjIwLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxNjIxOiNpZmRlZiBDT05GSUdfU01QXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE2MjItXFx0LyogYWRkIFxcdTAwM2NyOVxcdTAwM2UsIGdzOltcXHUwMDNjb2ZmXFx1MDAzZV0gKi9cXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTM1LVxcdFxcdFxcdFxcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTM2OiNpZmRlZiBDT05GSUdfU01QXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTE5MzctXFx0XFx0XFx0XFx0LyogYWRkIFxcdTAwM2Nkc3RcXHUwMDNlLCBnczpbXFx1MDAzY29mZlxcdTAwM2VdICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjE1LjQyMjk4MjgzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDM5MDAxNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zLCBmb3JtdWxhdGVkIGFzIGlmIHRoZXkncmUgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqTXkgQlBGIEpJVCBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgY29uZmlybWluZyB0aGUgb2J2aW91czogYENPTkZJR19TTVBgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuIFdlIG5lZWQgYSBzeXN0ZW0gY2FwYWJsZSBvZiBoYW5kbGluZyBtdWx0aXBsZSBDUFVzIGZvciB0aGlzIHRvIGhhdmUgYW55IHJlYWwtd29ybGQgYmVuZWZpdC4gVGhlbiwgY29uc2lkZXJpbmcgd2hhdCB3ZSdyZSBhaW1pbmcgZm9yLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuOyBpdCdzIHRoZSBmb3VuZGF0aW9uIHdlJ3JlIGJ1aWxkaW5nIG9uLiBBbmQsIHRvIGFjdHVhbGx5ICpkbyogdGhlIEpJVCBjb21waWxhdGlvbiwgYENPTkZJR19CUEZfSklUYCBpcyBub24tbmVnb3RpYWJsZSwgb2YgY291cnNlLiBUaG9zZSBhcmUgdGhlIGVzc2VudGlhbHMuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBhIGJpdCBkZWVwZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBzeW1ib2xzLCB0aGUgcG9pbnRzIG9mIGZvY3VzLiBBbHJpZ2h0LCB0aW1lIHRvIGNoZWNrIGBGb2N1c1N5bWJvbHNgLi4uXG5cbk9rYXksIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0J3MgcHJldHR5IGNsZWFyLiBgZG9faml0YCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWFrZXMgc2Vuc2U7IHdlIGRvbid0IG5lZWQgZ2xvYmFsIHZpc2liaWxpdHkgZm9yIHRoYXQuIE5vdywgd2hlcmUgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgcmVhbCBob29rIGludG8gdGhlIEpJVCBwcm9jZXNzPyBBaCwgdGhlcmUgaXQgaXM6IGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMuIE5vdyBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBKSVQgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MDIsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxOToyMS4zNjY4ODY1MDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTczNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9pbnRfaml0X2NvbXBpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0zOTUwPXN0cnVjdCB4NjRfaml0X2RhdGEge1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTM5NjEtXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jOjM5NjI6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMzk2My17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjIxLjQ1MzA2ODU1M1oiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUyMDAyMzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqQlBGIENvZGUgR2VuZXJhdGlvbjogVGhlIENvcmUgRmxvdyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQlBGIEpJVCBjb21waWxhdGlvbiwgYW5kIGFzIEkgc3VzcGVjdGVkLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgZGVmaW5pdGVseSB0aGUga2V5IGVudHJ5IHBvaW50LiBUaGF0J3MgdGhlIGdhdGUsIHRoZSBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCBhcyBJIHJlY2FsbC4gTm93LCB0aGlua2luZyBhYm91dCBob3cgd2UgZ2V0IHRvIHRob3NlIHNwZWNpZmljIGluc3RydWN0aW9ucyB3ZSdyZSBpbnRlcmVzdGVkIGluLCBJIGNhbiBzZWUgdGhhdCB0aGUgdmVyaWZpZXIgcGxheXMgYSBzaWduaWZpY2FudCByb2xlIGluIGdlbmVyYXRpbmcgYEJQRl9NT1Y2NF9QRVJDUFVfUkVHYC4gSSdtIGdvaW5nIHRocm91Z2ggdGhlIGNvZGUgYW5kIHJlY2FsbGluZyB0aGF0IHNwZWNpZmljIGluc3RydWN0aW9uLiBBbmQsIGFzIEkgcmVtZW1iZXIsIHRoZSBmdW5jdGlvbiBgYnBmX2RvX21pc2NfZml4dXBzYCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AgaXMgdGhlIHByZWNpc2UgcG9pbnQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGluc3RydWN0aW9uIGlzIGFjdHVhbGx5IGdlbmVyYXRlZC4gVGhhdCBmdW5jdGlvbiBoYW5kbGVzIG1pc2NlbGxhbmVvdXMgZml4dXBzIGFuZCBvcHRpbWl6YXRpb25zLCBhbmQgaXQgc2VlbXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoZSB2ZXJpZmllcidzIGNoZWNrcyBsZWFkIHRvIHRoZSBpbnN0cnVjdGlvbiBiZWluZyBlbWl0dGVkLiBJdCdzIGFsbCBzdGFydGluZyB0byBjb21lIHRvZ2V0aGVyIGludG8gdGhlIGxhcmdlciBwaWN0dXJlIEkgaGFkIGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTQxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6MjUuNjA1MDczOTQ1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjE2MDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfZG9fbWlzY19maXh1cHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9maXh1cHMuYz02Mz1zdGF0aWMgYm9vbCBicGZfaXNfcmVnNjQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jLTc4LVxcbmtlcm5lbC9icGYvZml4dXBzLmM6Nzk6XFx0LyogYWRkcmVzcyBzcGFjZSBjYXN0cyBjb252ZXJ0ZWQgdG8gQlBGX0FMVSwgc2VlIGJwZl9kb19taXNjX2ZpeHVwcygpICovXFxua2VybmVsL2JwZi9maXh1cHMuYy04MC1cXHRpZiAoaXNfYWRkcl9zcGFjZV9jYXN0MzIocHJvZywgaW5zbikpXFxuLS1cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jPTE0NzQ9c3RhdGljIGludCBhZGRfaGlkZGVuX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICpwYXRjaCwgaW50IGxlbilcXG4tLVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwMi0gKi9cXG5rZXJuZWwvYnBmL2ZpeHVwcy5jOjE1MDM6aW50IGJwZl9kb19taXNjX2ZpeHVwcyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbmtlcm5lbC9icGYvZml4dXBzLmMtMTUwNC17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAxNTM9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNzQtXFx0aWYgKHJldCA9PSAwKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDM3NTpcXHRcXHRyZXQgPSBicGZfZG9fbWlzY19maXh1cHMoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzNzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjI1LjY3NzIzOTAzNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzM2OTUwODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJQRiBKSVQgQ29tcGlsZXIgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCdzIGFib3V0IHRoZSBCUEYgdmVyaWZpZXIgZW50cnkgcG9pbnQsIGBicGZfY2hlY2tgLiBJJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSByZWxldmFudCBzeW1ib2xzLCBhbmQgSSdsbCBhZGQgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYnBmX2RvX21pc2NfZml4dXBzYCB0byBteSBcIkZvY3VzU3ltYm9sc1wiIGxpc3QuIFdhaXQgYSBzZWNvbmQsIEkgbmVlZCB0byBjb25maXJtIGBicGZfZG9fbWlzY19maXh1cHNgIGlzbid0IHN0YXRpYy4gWWVwLCBmb3VuZCBpdCBpbiBga2VybmVsL2JwZi9maXh1cHMuY2AuIEdvb2QsIGl0J3MgZ2xvYmFsLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEVzc2VudGlhbGx5LCB0aGlzIGZpeGVzIGFuIGlzc3VlIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gSXQncyBhYm91dCBob3cgdGhlIFJFWCBwcmVmaXggaXMgYmVpbmcgaGFuZGxlZCBmb3IgYG1vdl9wZXJjcHVfYWRkcmAgaW5zdHJ1Y3Rpb25zIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIHRob3NlIGV4dGVuZGVkIHJlZ2lzdGVycywgUjggdGhyb3VnaCBSMTUuIFRoZSBwcm9ibGVtIGlzLCB0aGlzIGluY29ycmVjdCBlbmNvZGluZyBpcyBsZWFkaW5nIHRvIHRoZSBKSVQgZW1pdHRpbmcgY29kZSB0aGF0IHNjcmV3cyB1cCB0aGUgcGVyLUNQVSBvZmZzZXQgY2FsY3VsYXRpb24uIEVzc2VudGlhbGx5LCBpdCdzIGRvaW5nIHRoZSBhZGQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCB0aGVuIHJlYWRpbmcgdGhlIGRhdGEgZnJvbSB0aGUgd3JvbmcgbWVtb3J5IGxvY2F0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgYnVnIGZpeC5cblxuSW4gdGVybXMgb2YgaW1wYWN0LCBpdCBjb3VsZCBiZSBhIHBvdGVudGlhbCBleHBsb2l0ISBUaGF0IGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBzZXJpb3VzIGZ1enppbmcuIFxuXG5JJ3ZlIGdvdCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgZm9yIHRlc3Rpbmc6IGBCUEZfU1lTQ0FMTGAsIGBCUEZfSklUYCwgYW5kIGBTTVBgLiBBbmQgYWdhaW4sIG15IFwiRm9jdXNTeW1ib2xzXCIgYXJlIGBicGZfaW50X2ppdF9jb21waWxlYCBhbmQgYGJwZl9kb19taXNjX2ZpeHVwc2AuXG5cbkp1c3QgYSBzYW5pdHkgY2hlY2s6IEkgbmVlZCB0byBxdWlja2x5IGRvdWJsZSBjaGVjayB0aGF0IGBCUEZfSklUYCBpcyBpbmRlZWQgdGhlIGNvcnJlY3QgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQyMToxOTozMy4wMTQxOTMxNDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTk1OTE1OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9KSVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00MS1cXG5rZXJuZWwvYnBmL0tjb25maWc6NDI6Y29uZmlnIEJQRl9KSVRcXG5rZXJuZWwvYnBmL0tjb25maWctNDMtXFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWctNTctXFxua2VybmVsL2JwZi9LY29uZmlnOjU4OmNvbmZpZyBCUEZfSklUX0FMV0FZU19PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy01OS1cXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy02OC1cXG5rZXJuZWwvYnBmL0tjb25maWc6Njk6Y29uZmlnIEJQRl9KSVRfREVGQVVMVF9PTlxcbmtlcm5lbC9icGYvS2NvbmZpZy03MC1cXHRkZWZfYm9vbCBBUkNIX1dBTlRfREVGQVVMVF9CUEZfSklUIHx8IEJQRl9KSVRfQUxXQVlTX09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjM1LjI3Mzc4ODY1NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTMzOTI5OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEJ1ZyBDb250ZXh0KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpcyBzcG90LW9uIOKAkyB3ZSBkZWZpbml0ZWx5IG5lZWQgYEJQRl9KSVRgLiBUaGF0J3MgZnVuZGFtZW50YWwgZm9yIEpJVCBjb21waWxhdGlvbiwgYW5kIGBCUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiBmb3IgdXNpbmcgQlBGIGluIGdlbmVyYWwuIFRoZSBwcmVzZW5jZSBvZiBgI2lmZGVmIENPTkZJR19TTVBgIGluZGljYXRlcyB0aGF0IHRoaXMgYnVnIGlzIGxpa2VseSBTTVAtcmVsYXRlZCwgcG9pbnRpbmcgdXMgdG93YXJkcyBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGxvb2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSB0ZXN0IGNhc2UgdXRpbGl6ZXMgYF9fYXJjaF94ODZfNjRgLCB3aGljaCBzdWdnZXN0cyB0aGUgcHJvYmxlbSBpcyBzcGVjaWZpYyB0byB0aGUgeDg2XzY0IGFyY2hpdGVjdHVyZS4gSSBzZWUgdGhlIGJ1ZyBsaXZlcyB3aXRoaW4gYGFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoIGNvbmZpcm1zIHRoaXMuIFdlIGRvbid0IHN0cmljdGx5ICpuZWVkKiB0byBleHBsaWNpdGx5IGRlY2xhcmUgdGhlIGFyY2hpdGVjdHVyZSBpbiBgRW5hYmxlQ29uZmlnc2AuIEFsdGhvdWdoLCBpbmNsdWRpbmcgYFg4Nl82NGAgaXNuJ3QgYSBiYWQgaWRlYSwgYWx0aG91Z2ggdHlwaWNhbGx5IGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBvdXIgeDg2IGZ1enplcnMuXG5cbkknbSBub3cgZ29pbmcgdG8gaW52ZXN0aWdhdGUgd2hldGhlciBgaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHJgIGlzIHV0aWxpemVkIGVsc2V3aGVyZSBpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgaXRzIGJyb2FkZXIgdXNhZ2Ugd2lsbCBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQgaW4gbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NzEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6NDEuNDA3NzIxOTk4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQzMjM0Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc25faXNfbW92X3BlcmNwdV9hZGRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0xMzAyPXN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0xMzU1LVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjEzNTY6XFx0XFx0fSBlbHNlIGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihpbnNuKSkge1xcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTEzNTctXFx0XFx0XFx0aWYgKGRzdCAhPSBzcmMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmM9OTY3PWludCBicGZfaml0X2J1aWxkX2JvZHkoc3RydWN0IGJwZl9wcm9nICpmcCwgdTMyICppbWFnZSwgdTMyICpmaW1hZ2UsIHN0cnVjdCBjb2RlZ2VuX2NvbnRleHQgKmN0eCxcXG4tLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMjYwLVxcbmFyY2gvcG93ZXJwYy9uZXQvYnBmX2ppdF9jb21wNjQuYzoxMjYxOlxcdFxcdFxcdGlmIChpbnNuX2lzX21vdl9wZXJjcHVfYWRkcihcXHUwMDI2aW5zbltpXSkpIHtcXG5hcmNoL3Bvd2VycGMvbmV0L2JwZl9qaXRfY29tcDY0LmMtMTI2Mi1cXHRcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU01QKSkge1xcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYz0xMzYxPWludCBicGZfaml0X2VtaXRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24sIHN0cnVjdCBydl9qaXRfY29udGV4dCAqY3R4LFxcbi0tXFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg1LVxcdFxcdFxcdGJyZWFrO1xcbmFyY2gvcmlzY3YvbmV0L2JwZl9qaXRfY29tcDY0LmM6MTM4NjpcXHRcXHR9IGVsc2UgaWYgKGluc25faXNfbW92X3BlcmNwdV9hZGRyKGluc24pKSB7XFxuYXJjaC9yaXNjdi9uZXQvYnBmX2ppdF9jb21wNjQuYy0xMzg3LVxcdFxcdFxcdGlmIChyZCAhPSBycylcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz0xNzI5PXN0YXRpYyBpbnQgZG9faml0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqYnBmX3Byb2csIGludCAqYWRkcnMsIHU4ICppbWFnZSxcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy0xOTMyLVxcdFxcdFxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzoxOTMzOlxcdFxcdFxcdH0gZWxzZSBpZiAoaW5zbl9pc19tb3ZfcGVyY3B1X2FkZHIoaW5zbikpIHtcXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmMtMTkzNC1cXHRcXHRcXHRcXHQvKiBtb3YgXFx1MDAzY2RzdFxcdTAwM2UsIFxcdTAwM2NzcmNcXHUwMDNlIChpZiBuZWNlc3NhcnkpICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oPTQwPXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaC0yMDEtXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaDoyMDI6c3RhdGljIGlubGluZSBib29sIGluc25faXNfbW92X3BlcmNwdV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTIwMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjQzLjg1MDk2Mjk1NloiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzUxMzgyMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgeDg2IEpJVCBCdWcgRml4KipcblxuT2theSwgc28gdGhpcyBpcyBzcGVjaWZpY2FsbHkgYW4gaXNzdWUgd2l0aGluIHRoZSB4ODYgSnVzdC1Jbi1UaW1lIChKSVQpIGNvbXBpbGVyLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgY29uc2lkZXJhYmx5LiBUaGUgY29yZSBwcm9ibGVtIGFwcGVhcnMgdG8gYmUgYSBmbGF3IGluIHRoZSB3YXkgdGhlIFJFWCBwcmVmaXggaXMgYmVpbmcgaGFuZGxlZCBkdXJpbmcgdGhlIGVuY29kaW5nIG9mIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucywgYnV0IG9ubHkgd2hlbiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgaXMgb25lIG9mIHRoZSBleHRlbmRlZCByZWdpc3RlcnMgKFI4LVIxNSkuIFRoaXMgbWVhbnMgdGhlIEpJVCBpcyBtaXNpbnRlcnByZXRpbmcgd2hlcmUgdG8gd3JpdGUgdGhlIHBlci1DUFUgb2Zmc2V0LlxuXG5Fc3NlbnRpYWxseSwgdGhlIGZpeCBpcyBjb3JyZWN0aW5nIGFuIGluY29ycmVjdCBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIOKAkyBhZGRpbmcgdGhlIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIgYW5kIHN1YnNlcXVlbnRseSByZWFkaW5nIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24uIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIHNvbWUgbmFzdHkgY29uc2VxdWVuY2VzIOKAkyBhIGtlcm5lbCBjcmFzaCwgb3IgZXZlbiB3b3JzZSwgYSBwb3RlbnRpYWwgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhICpyZWFsKiBidWcgZml4IHRoYXQgYWRkcmVzc2VzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0eSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0sIHdoaWNoIG1lYW5zIHRob3JvdWdoIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuXG5cblRpbWUgdG8gbG9nIHRoaXMgd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5NiwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6NTAuMjAyMzQ4OTk2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NzAzMjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBSRVggcHJlZml4IGlzIGluY29ycmVjdGx5IGVuY29kZWQgZm9yIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gVGhpcyBjYXVzZXMgdGhlIEpJVCB0byBlbWl0IGFuIGluc3RydWN0aW9uIHRoYXQgYWRkcyB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVnIGluIEJQRiwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiU01QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICAgIFwiYnBmX2RvX21pc2NfZml4dXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHg4NiBCUEYgSklUIGNvbXBpbGVyIHdoZXJlIHRoZSBSRVggcHJlZml4IGlzIGluY29ycmVjdGx5IGVuY29kZWQgZm9yIGBtb3ZfcGVyY3B1X2FkZHJgIGluc3RydWN0aW9ucyB3aGVuIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBhbiBleHRlbmRlZCByZWdpc3RlciAoUjgtUjE1KS4gVGhpcyBjYXVzZXMgdGhlIEpJVCB0byBlbWl0IGFuIGluc3RydWN0aW9uIHRoYXQgYWRkcyB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyIGFuZCByZWFkcyBmcm9tIHRoZSB3cm9uZyBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBrZXJuZWwgY3Jhc2ggb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGZpeGVzIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgYnVnIGluIEJQRiwgYW5kIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6NTAuMzQ3MDYyOTU1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE5Nzc1NDc2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjE5OjUwLjM0OTA2MTQxNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDE5NTc1MDMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCBpdCBjb3JyZWN0cyB0aGUgUkVYIHByZWZpeCBlbWlzc2lvbiBmb3IgdGhlIGBhZGRgIGluc3RydWN0aW9uIHdoZW4gcmVzb2x2aW5nIHBlci1DUFUgYWRkcmVzc2VzIGludG8gZXh0ZW5kZWQgcmVnaXN0ZXJzIChsaWtlIHI4LXIxNSkuIFRoZSBwcmV2aW91cyBlbmNvZGluZyBjYXVzZWQgdGhlIEpJVCB0byBhcHBseSB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyLlxcblxcblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZlNjhhZDc5OTVmZDIyZGE5ZjM0ODc2NDJhMTZlMDBmODhkODllOWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAyMToxNzo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZDkyMDc3MmFmN2Q1Zi4uMWE5ZmI1MzBhZGMzYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTkzNSw3ICsxOTM1LDcgQEAgc3RhdGljIGludCBkb19qaXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpicGZfcHJvZywgaW50ICpcbiBcdFx0XHRcdEVNSVRfbW92KGRzdF9yZWcsIHNyY19yZWcpO1xuICNpZmRlZiBDT05GSUdfU01QXG4gXHRcdFx0XHQvKiBhZGQgXHUwMDNjZHN0XHUwMDNlLCBnczpbXHUwMDNjb2ZmXHUwMDNlXSAqL1xuLVx0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzFtb2QoMHg0OCwgZHN0X3JlZykpO1xuK1x0XHRcdFx0RU1JVDIoMHg2NSwgYWRkXzJtb2QoMHg0OCwgMCwgZHN0X3JlZykpO1xuIFx0XHRcdFx0RU1JVDMoMHgwMywgYWRkXzJyZWcoMHgwNCwgMCwgZHN0X3JlZyksIDB4MjUpO1xuIFx0XHRcdFx0RU1JVCgodTMyKSh1bnNpZ25lZCBsb25nKVx1MDAyNnRoaXNfY3B1X29mZiwgNCk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3ZlcmlmaWVyLmNcbmluZGV4IDgxMTNmZWE3YmE4NmMuLjY0YWM0OWFkNjdlNjMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy92ZXJpZmllci5jXG5AQCAtNzksNiArNzksNyBAQFxuICNpbmNsdWRlIFwidmVyaWZpZXJfbmV0ZmlsdGVyX3JldGNvZGUuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX2JwZl9mYXN0Y2FsbC5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfb3Jfam1wMzJfay5za2VsLmhcIlxuKyNpbmNsdWRlIFwidmVyaWZpZXJfcGVyY3B1X2FkZHIuc2tlbC5oXCJcbiAjaW5jbHVkZSBcInZlcmlmaWVyX3ByZWNpc2lvbi5za2VsLmhcIlxuICNpbmNsdWRlIFwidmVyaWZpZXJfcHJldmVudF9tYXBfbG9va3VwLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJ2ZXJpZmllcl9wcml2YXRlX3N0YWNrLnNrZWwuaFwiXG5AQCAtMjQwLDYgKzI0MSw3IEBAIHZvaWQgdGVzdF92ZXJpZmllcl9uZXRmaWx0ZXJfY3R4KHZvaWQpICAgICAgICB7IFJVTih2ZXJpZmllcl9uZXRmaWx0ZXJfY3R4KTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZSh2b2lkKSAgICB7IFJVTih2ZXJpZmllcl9uZXRmaWx0ZXJfcmV0Y29kZSk7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfYnBmX2Zhc3RjYWxsKHZvaWQpICAgICAgICAgeyBSVU4odmVyaWZpZXJfYnBmX2Zhc3RjYWxsKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9vcl9qbXAzMl9rKHZvaWQpICAgICAgICAgICB7IFJVTih2ZXJpZmllcl9vcl9qbXAzMl9rKTsgfVxuK3ZvaWQgdGVzdF92ZXJpZmllcl9wZXJjcHVfYWRkcih2b2lkKSAgICAgICAgICB7IFJVTih2ZXJpZmllcl9wZXJjcHVfYWRkcik7IH1cbiB2b2lkIHRlc3RfdmVyaWZpZXJfcHJlY2lzaW9uKHZvaWQpICAgICAgICAgICAgeyBSVU4odmVyaWZpZXJfcHJlY2lzaW9uKTsgfVxuIHZvaWQgdGVzdF92ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXAodm9pZCkgICB7IFJVTih2ZXJpZmllcl9wcmV2ZW50X21hcF9sb29rdXApOyB9XG4gdm9pZCB0ZXN0X3ZlcmlmaWVyX3ByaXZhdGVfc3RhY2sodm9pZCkgICAgICAgIHsgUlVOKHZlcmlmaWVyX3ByaXZhdGVfc3RhY2spOyB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX3BlcmNwdV9hZGRyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfcGVyY3B1X2FkZHIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk2MmZhZWE4ZWY5MDBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9wZXJjcHVfYWRkci5jXG5AQCAtMCwwICsxLDExNCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuK1xuK2ludCBwZXJjcHVfZGF0YSBTRUMoXCIucGVyY3B1XCIpO1xuK1xuKyNpZiBkZWZpbmVkKF9fVEFSR0VUX0FSQ0hfeDg2KVxuK1xuKy8qXG4rICogQW4gbGRfaW1tNjQgb2YgYSBwZXItQ1BVIG1hcCB2YWx1ZSBpcyBmb2xsb3dlZCBieSBhIG1vdl9wZXJjcHVfYWRkciB0aGF0XG4rICogcmV1c2VzIHRoZSBzYW1lIHJlZ2lzdGVyLCBzbyB0aGUgcmVnaXN0ZXIgdGhlIGFkZHJlc3MgbGFuZHMgaW4gZGVjaWRlcyBob3dcbisgKiB0aGUgSklUIGVuY29kZXMgdGhlIGFkZC4gT24geDg2IFI1LCBSNywgUjggYW5kIFI5IGFyZSB0aGUgZXh0ZW5kZWRcbisgKiByZWdpc3RlcnMsIHdob3NlIGhpZ2ggYml0IG5lZWRzIFJFWC5SIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIHNpdHMgaW5cbisgKiBNb2RSTS5yZWcuIENoZWNrIG9uZSBwcm9ncmFtIHBlciBleHRlbmRlZCByZWdpc3Rlciwgc2luY2UgZ2V0dGluZyB0aGVcbisgKiBwcmVmaXggd3JvbmcgcmVzb2x2ZXMgdGhlIGFkZHJlc3MgaW50byB3aGljaGV2ZXIgcmVnaXN0ZXIgc2hhcmVzIHRoZSBsb3dcbisgKiB0aHJlZSBiaXRzIGluc3RlYWQuXG4rICovXG4rXG4rU0VDKFwicmF3X3RwXCIpXG4rX19kZXNjcmlwdGlvbihcInBlci1DUFUgYWRkcmVzcyBpbnRvIHI1XCIpXG4rX19zdWNjZXNzXG4rX19hcmNoX3g4Nl82NFxuK19faml0ZWQoXCJcdGFkZHFcdCVnczp7ey4qfX0sICVyOFwiKVxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I1KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjUgPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHI1ICsgMCk7XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjdcIilcbitfX3N1Y2Nlc3NcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIlx0YWRkcVx0JWdzOnt7Lip9fSwgJXIxM1wiKVxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I3KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjcgPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHI3ICsgMCk7XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjhcIilcbitfX3N1Y2Nlc3NcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIlx0YWRkcVx0JWdzOnt7Lip9fSwgJXIxNFwiKVxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I4KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjggPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHI4ICsgMCk7XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitTRUMoXCJyYXdfdHBcIilcbitfX2Rlc2NyaXB0aW9uKFwicGVyLUNQVSBhZGRyZXNzIGludG8gcjlcIilcbitfX3N1Y2Nlc3NcbitfX2FyY2hfeDg2XzY0XG4rX19qaXRlZChcIlx0YWRkcVx0JWdzOnt7Lip9fSwgJXIxNVwiKVxuK19fbmFrZWQgdm9pZCBwZXJjcHVfYWRkcl9pbnRvX3I5KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjkgPSAlW3BlcmNwdV9kYXRhXSBsbDtcdFx0XHRcdFxcXG4rXHRyMCA9ICoodTMyICopKHI5ICsgMCk7XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIocGVyY3B1X2RhdGEpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbisvKiBBIHJlZ2lzdGVyIHRoYXQgbmVlZHMgbm8gUkVYLlIsIHRvIGNhdGNoIGEgZml4IHRoYXQgb3ZlcmNvcnJlY3RzLiAqL1xuK1NFQyhcInJhd190cFwiKVxuK19fZGVzY3JpcHRpb24oXCJwZXItQ1BVIGFkZHJlc3MgaW50byByMVwiKVxuK19fc3VjY2Vzc1xuK19fYXJjaF94ODZfNjRcbitfX2ppdGVkKFwiXHRhZGRxXHQlZ3M6e3suKn19LCAlcmRpXCIpXG4rX19uYWtlZCB2b2lkIHBlcmNwdV9hZGRyX2ludG9fcjEodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFwiXHRcdFx0XHRcdFxcXG4rXHRyMSA9ICVbcGVyY3B1X2RhdGFdIGxsO1x0XHRcdFx0XFxcbitcdHIwID0gKih1MzIgKikocjEgKyAwKTtcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihwZXJjcHVfZGF0YSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuKyNlbHNlXG4rXG4rU0VDKFwicmF3X3RwXCIpXG4rX19kZXNjcmlwdGlvbihcInBlcmNwdSBhZGRyIGR1bW15XCIpXG4rX19zdWNjZXNzXG4raW50IGR1bW15X3Rlc3Qodm9pZClcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmXG4rXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMjE6MTk6NTAuMzQ5MDYzMTA1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MTk1NzIyMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEpJVCBDb21waWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlciBpbiBgYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoaXMgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZml4OiBgYWRkXzFtb2RgIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYGFkZF8ybW9kKDB4NDgsIDAsIGRzdF9yZWcpYC4gVGhpcyBpcyBhIGNsYXNzaWMgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIHRoYXQsIGlmIG5vdCBhZGRyZXNzZWQsIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGNvZGUgZ2VuZXJhdGlvbi4gSSBjYW4gc2VlIHRoYXQgdGhlIGJ1ZyBpcyBhYm91dCByZXNvbHZpbmcgcGVyLUNQVSBhZGRyZXNzZXMgY29ycmVjdGx5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGlzIGFuIGV4dGVuZGVkIHJlZ2lzdGVyIChSOC1SMTUpLiBUaGUgaW5jb3JyZWN0IGVuY29kaW5nIHdvdWxkIGNhdXNlIHRoZSBvZmZzZXQgdG8gYmUgYXBwbGllZCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIsIGVzc2VudGlhbGx5IHJlc3VsdGluZyBpbiB0aGUgQlBGIHByb2dyYW0gYWNjZXNzaW5nIG1lbW9yeSBhdCBhbiBpbmNvcnJlY3QgYWRkcmVzcy5cblxuSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidXQgaXQncyBtb3JlIG9mIGEgbWVtb3J5IGNvcnJ1cHRpb24vb3V0LW9mLWJvdW5kcyBhY2Nlc3MgaXNzdWUuIFRoZSBCUEYgcHJvZ3JhbSB3b3VsZCBiZSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byBhbiBhcmJpdHJhcnkgbWVtb3J5IGxvY2F0aW9uLCB3aGljaCBjb3VsZCBiZSBhbnl0aGluZy4gQSBkZWVwZXIgbG9vayBjb25maXJtcyB0aGF0IHRoZSBidWcgZG9lc24ndCBkaXJlY3RseSBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSB3YXkgS01TQU4gd291bGQgYmUgcmVxdWlyZWQgdG8gZGV0ZWN0LiBUaGlzIGlzIGFuIGVuY29kaW5nIGJ1ZyB3aGVyZSB0aGUgSklUIGdlbmVyYXRlcyBhbiBpbmNvcnJlY3QgaW5zdHJ1Y3Rpb24gc2VxdWVuY2U7IHRoZSByZXN1bHRpbmcgaW5jb3JyZWN0IHByb2dyYW0gd291bGQgdGhlbiBjYXVzZSB0aGUgb3V0LW9mLWJvdW5kcyBvciBhcmJpdHJhcnkgYWNjZXNzLiBLQVNBTiBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBjYXRjaGluZyB0aG9zZSBtZW1vcnkgYWNjZXNzZXMuIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbGlrZSBtaXNzaW5nIGBtZW1zZXRgIGNhbGxzLCB3aGljaCBpc24ndCB0aGUgY29uY2VybiBoZXJlLlxuXG5Hb2luZyBiYWNrIHRvIHRoZSBjb2RlLCBJIHNlZSB0aGF0IGBhZGRfMW1vZGAgbGlrZWx5IGhhZCBhIHByb2JsZW0gY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBSRVggcHJlZml4IGZvciBleHRlbmRlZCByZWdpc3RlcnMuIFRoZSByZXBsYWNlbWVudCB3aXRoIGBhZGRfMm1vZGAgY2xlYXJseSBwcm92aWRlcyBhIHByb3BlciBlbmNvZGluZy4gSSBkb24ndCBuZWVkIHRvIGRpZyB0b28gZGVlcCBpbnRvIHRoZSBtaW51dGlhZSBvZiBgYWRkXzFtb2RgIGFuZCBgYWRkXzJtb2RgOyB0aGUgY29yZSBvZiBpdCBpcyBhIGZ1bmRhbWVudGFsIGluc3RydWN0aW9uIGVuY29kaW5nIGZpeC4gVGhlIG1haW4gdGhpbmcgaXMgdGhhdCB0aGlzIGlzIGEgSklUIGJ1Zy4gVGhpcyBraW5kIG9mIGJ1ZyBsZWFkcyB0byBpbmNvcnJlY3QgZXhlY3V0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgQlBGIGNvZGUuIFRoaXMgY2FuIGxlYWQgdG8gY3Jhc2hlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIGV0Yy4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGZvciBkZXRlY3RpbmcgdGhlc2UgdHlwZXMgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLiBUaGlzIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIGEgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuIFRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLlxuXG5NeSBmaW5hbCByZWFzb25pbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGNydWNpYWwgaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgZmxhdyBpbiB0aGUgeDg2IEJQRiBKSVQuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gd2l0aGluIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgb3JpZ2luYWwgaW5jb3JyZWN0IGVuY29kaW5nIGNhdXNlZCB0aGUgSklUIHRvIGFwcGx5IHRoZSBwZXItQ1BVIG9mZnNldCB0byB0aGUgd3JvbmcgcmVnaXN0ZXIsIHdoaWNoIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMuIEJlY2F1c2UgaXQgZG9lcyBub3QgY3JlYXRlIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLiBJbnN0ZWFkLCBzdWNoIG1lbW9yeSBjb3JydXB0aW9ucyBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFNvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgdGhlIGJlc3QgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3OTAsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDIxOjIwOjA0LjU0NDc4OTUwMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5zdHJ1Y3Rpb24gZW5jb2RpbmcgYnVnIGluIHRoZSB4ODYgQlBGIEpJVCBjb21waWxlci4gU3BlY2lmaWNhbGx5LCBpdCBjb3JyZWN0cyB0aGUgUkVYIHByZWZpeCBlbWlzc2lvbiBmb3IgdGhlIGBhZGRgIGluc3RydWN0aW9uIHdoZW4gcmVzb2x2aW5nIHBlci1DUFUgYWRkcmVzc2VzIGludG8gZXh0ZW5kZWQgcmVnaXN0ZXJzIChsaWtlIHI4LXIxNSkuIFRoZSBwcmV2aW91cyBlbmNvZGluZyBjYXVzZWQgdGhlIEpJVCB0byBhcHBseSB0aGUgcGVyLUNQVSBvZmZzZXQgdG8gdGhlIHdyb25nIHJlZ2lzdGVyLlxcblxcblRoaXMgYnVnIGxlYWRzIHRvIHRoZSBCUEYgcHJvZ3JhbSBhY2Nlc3NpbmcgaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzZXMsIHdoaWNoIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIG9yIGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIHZ1bG5lcmFiaWxpdHkuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb25zIGFuZCBpbnZhbGlkIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBtaXNzaW5nIHplcm9pbmcsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluc3RydWN0aW9uIGVuY29kaW5nIGJ1ZyBpbiB0aGUgeDg2IEJQRiBKSVQgY29tcGlsZXIuIFNwZWNpZmljYWxseSwgaXQgY29ycmVjdHMgdGhlIFJFWCBwcmVmaXggZW1pc3Npb24gZm9yIHRoZSBgYWRkYCBpbnN0cnVjdGlvbiB3aGVuIHJlc29sdmluZyBwZXItQ1BVIGFkZHJlc3NlcyBpbnRvIGV4dGVuZGVkIHJlZ2lzdGVycyAobGlrZSByOC1yMTUpLiBUaGUgcHJldmlvdXMgZW5jb2RpbmcgY2F1c2VkIHRoZSBKSVQgdG8gYXBwbHkgdGhlIHBlci1DUFUgb2Zmc2V0IHRvIHRoZSB3cm9uZyByZWdpc3Rlci5cXG5cXG5UaGlzIGJ1ZyBsZWFkcyB0byB0aGUgQlBGIHByb2dyYW0gYWNjZXNzaW5nIGluY29ycmVjdCBtZW1vcnkgYWRkcmVzc2VzLCB3aGljaCBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyBvciBhcmJpdHJhcnkgbWVtb3J5IGFjY2VzcyB2dWxuZXJhYmlsaXR5LiBTdWNoIG1lbW9yeSBjb3JydXB0aW9ucyBhbmQgaW52YWxpZCBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbWlzc2luZyB6ZXJvaW5nLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[1] Phase: Succeeded StartedAt: 2026-08-14 21:20:16 +0000 UTC FinishedAt: 2026-08-14 21:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-14 21:20:16 +0000 UTC FinishedAt: 2026-08-14 21:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2] Phase: Succeeded StartedAt: 2026-08-14 21:20:16 +0000 UTC FinishedAt: 2026-08-15 01:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-14 21:20:16 +0000 UTC FinishedAt: 2026-08-15 01:04:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-14 21:20:16 +0000 UTC FinishedAt: 2026-08-14 21:20:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-14 21:20:16 +0000 UTC FinishedAt: 2026-08-14 21:20:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowng9zr/series-workflowng9zr-convert-artifact-3713166576/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-14 21:20:26 +0000 UTC FinishedAt: 2026-08-14 21:37:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-14 21:20:26 +0000 UTC FinishedAt: 2026-08-14 21:37:11 +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:*1a913d1d-3a49-452b-a638-edcbcd51cefc,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-workflowng9zr/series-workflowng9zr-convert-artifact-3713166576/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": "5159bac2-88f4-4efa-b745-92ac7d8d2454", "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-workflowng9zr/series-workflowng9zr-build-action-2011920374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-14 21:20:26 +0000 UTC FinishedAt: 2026-08-14 21:37:01 +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:*1a913d1d-3a49-452b-a638-edcbcd51cefc,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-workflowng9zr/series-workflowng9zr-convert-artifact-3713166576/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": "5159bac2-88f4-4efa-b745-92ac7d8d2454", "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-workflowng9zr/series-workflowng9zr-build-action-2011920374/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-14 21:37:11 +0000 UTC FinishedAt: 2026-08-14 21:37:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-14 21:37:11 +0000 UTC FinishedAt: 2026-08-14 21:37:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-14 21:37:11 +0000 UTC FinishedAt: 2026-08-14 21:37:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-14 21:37:11 +0000 UTC FinishedAt: 2026-08-14 21:37:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowng9zr/series-workflowng9zr-convert-artifact-2354765015/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-14 21:37:21 +0000 UTC FinishedAt: 2026-08-14 21:39:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-14 21:37:21 +0000 UTC FinishedAt: 2026-08-14 21:39:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5159bac2-88f4-4efa-b745-92ac7d8d2454,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-workflowng9zr/series-workflowng9zr-build-action-2011920374/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-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-14 21:39:24 +0000 UTC FinishedAt: 2026-08-14 21:39:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-14 21:39:24 +0000 UTC FinishedAt: 2026-08-14 21:39:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-14 21:39:24 +0000 UTC FinishedAt: 2026-08-14 21:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-14 21:39:24 +0000 UTC FinishedAt: 2026-08-14 21:57: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:*1a913d1d-3a49-452b-a638-edcbcd51cefc,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-workflowng9zr/series-workflowng9zr-convert-artifact-2354765015/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": "71c05859-bb68-4bca-a485-7d461f665d8e", "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-workflowng9zr/series-workflowng9zr-build-action-1295864859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-14 21:39:24 +0000 UTC FinishedAt: 2026-08-14 21:57: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:*1a913d1d-3a49-452b-a638-edcbcd51cefc,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-workflowng9zr/series-workflowng9zr-convert-artifact-2354765015/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": "71c05859-bb68-4bca-a485-7d461f665d8e", "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-workflowng9zr/series-workflowng9zr-build-action-1295864859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-14 21:57:25 +0000 UTC FinishedAt: 2026-08-14 21:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-14 21:57:25 +0000 UTC FinishedAt: 2026-08-14 21:57:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-14 21:57:25 +0000 UTC FinishedAt: 2026-08-14 21:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-14 21:57:25 +0000 UTC FinishedAt: 2026-08-14 21:59:26 +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:*71c05859-bb68-4bca-a485-7d461f665d8e,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-workflowng9zr/series-workflowng9zr-build-action-1295864859/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-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-14 21:59:35 +0000 UTC FinishedAt: 2026-08-15 01:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-14 21:59:35 +0000 UTC FinishedAt: 2026-08-15 01:04:31 +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"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"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:*5159bac2-88f4-4efa-b745-92ac7d8d2454,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*71c05859-bb68-4bca-a485-7d461f665d8e,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-workflowng9zr/series-workflowng9zr-build-action-2011920374/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-workflowng9zr/series-workflowng9zr-build-action-1295864859/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-14 21:59:35 +0000 UTC FinishedAt: 2026-08-14 21:59:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-14 21:59:35 +0000 UTC FinishedAt: 2026-08-14 21:59:40 +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"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"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-workflowng9zr/series-workflowng9zr-convert-artifact-2406260368/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-14 21:59:35 +0000 UTC FinishedAt: 2026-08-14 21:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-14 21:59:35 +0000 UTC FinishedAt: 2026-08-14 21:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-14 21:59:36 +0000 UTC FinishedAt: 2026-08-14 21:59:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-14 21:59:46 +0000 UTC FinishedAt: 2026-08-15 01:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowng9zr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_int_jit_compile","bpf_do_misc_fixups"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"409a9bda0429c63f326576cbe6c1f6c4430a8d09","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","BPF_JIT","SMP"],"series_id":"da54bf81-34b7-4796-b870-80e2d7fe6a4d","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-14 21:59:46 +0000 UTC FinishedAt: 2026-08-15 01:04:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5159bac2-88f4-4efa-b745-92ac7d8d2454,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*71c05859-bb68-4bca-a485-7d461f665d8e,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-workflowng9zr/series-workflowng9zr-build-action-2011920374/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-workflowng9zr/series-workflowng9zr-build-action-1295864859/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-workflowng9zr/series-workflowng9zr-convert-artifact-2406260368/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,}