Name: series-workflowfznpc Phase: Succeeded StartedAt: 2026-09-04 13:54:18 +0000 UTC FinishedAt: 2026-09-04 17:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[0] Phase: Succeeded StartedAt: 2026-09-04 13:54:18 +0000 UTC FinishedAt: 2026-09-04 14:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 13:54:18 +0000 UTC FinishedAt: 2026-09-04 14:20:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP" ], "series_id": "017125fd-4f6b-4f87-a5c9-3eaded6f96c4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_conn_request", "tcp_try_fastopen", "tcp_fastopen_create_child" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF90cnlfZmFzdG9wZW4mIzM0OywKICAgICYjMzQ7dGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHBhdGhzIGZvciBNUFRDUCBhbmQgVENQIEZhc3QgT3Blbi4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGFuZCBjaGVja3MgYHJza19kcm9wX3JlcShyZXEpYCBpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCgpYCBhbmQgYHRjcF9jb25uX3JlcXVlc3QoKWAgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBzb2NrIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyB3aGVuIGEgcmVxdWVzdCBpcyBkcm9wcGVkLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczogVGhlIGZpZWxkIGBkcm9wX3JlcWAgaW4gYHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHRjcF9jb25uX3JlcXVlc3QoKWAgd2hlbiB0aGUgcmVxdWVzdF9zb2NrIGlzIGNyZWF0ZWQsIGVuc3VyaW5nIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4yLiBJbmZvLWxlYWsgLyBVc2VyLXNwYWNlIGNvcHkgQW5hbHlzaXM6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgb3B0aW9uIGJ1ZmZlcnMgbW9kaWZpZWQuXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AvTVBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIGFuZCBUQ1AgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIGluIG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSByZWplY3RlZCBvciBkcm9wcGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBleGVjdXRlZCBkdXJpbmcgVENQIGhhbmRzaGFrZSBhbmQgRmFzdCBPcGVuIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyYjhhMTVlZThiMmU0OTRkN2YyZjg0NmE1ZjhlODU3ZDQzOTY3MGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE0OjE2OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIGIvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbmluZGV4IDQ3MWM3OGJlNTUxMzcuLjIyNDk0ZmY3NDZjNzEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbkBAIC0zMzcsNiAmIzQzOzMzNywxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxuIFx0aWYgKCFjaGlsZClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0aWYgKG93bl9yZXEgXHUwMDI2XHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XG4mIzQzO1x0XHRiaF91bmxvY2tfc29jayhjaGlsZCk7XG4mIzQzO1x0XHRzb2NrX3B1dChjaGlsZCk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbiBcdHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5xbGVuJiM0MzsmIzQzOztcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li5lYjBlNDI1OWMyODA3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtNzY2OSw2ICYjNDM7NzY2OSw3IEBAIGludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuIFx0dGNwX3JzayhyZXEpLVx1MDAzZXR4aGFzaCA9IG5ldF90eF9ybmRoYXNoKCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuIFx0dGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwID0gMDtcbiYjNDM7XHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcbiAjZW5kaWZcbiBcbiBcdHRjcF9jbGVhcl9vcHRpb25zKFx1MDAyNnRtcF9vcHQpO1xuQEAgLTc3NzUsNiAmIzQzOzc3NzYsMTAgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXG4gXHRcdFJFQURfT05DRShzay1cdTAwM2Vza19kYXRhX3JlYWR5KShzayk7XG4gXHRcdGJoX3VubG9ja19zb2NrKGZhc3RvcGVuX3NrKTtcbiBcdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xuJiM0MztcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbiYjNDM7XHRcdHJlcXNrX2ZyZWUocmVxKTtcbiYjNDM7XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG4gXHRcdHRjcF9yc2socmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIgPSBmYWxzZTtcbiBcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2Nvbm5fcmVxdWVzdCYjMzQ7LAogICAgJiMzNDt0Y3BfdHJ5X2Zhc3RvcGVuJiMzNDssCiAgICAmIzM0O3RjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AvTVBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIGFuZCBUQ1AgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIGluIG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSByZWplY3RlZCBvciBkcm9wcGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBleGVjdXRlZCBkdXJpbmcgVENQIGhhbmRzaGFrZSBhbmQgRmFzdCBPcGVuIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyYjhhMTVlZThiMmU0OTRkN2YyZjg0NmE1ZjhlODU3ZDQzOTY3MGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE0OjE2OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMgYi9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYwppbmRleCA0NzFjNzhiZTU1MTM3Li4yMjQ5NGZmNzQ2YzcxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYwpAQCAtMzM3LDYgJiM0MzszMzcsMTIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzaywKIAlpZiAoIWNoaWxkKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlpZiAob3duX3JlcSAmYW1wOyZhbXA7IHJza19kcm9wX3JlcShyZXEpKSB7CiYjNDM7CQliaF91bmxvY2tfc29jayhjaGlsZCk7CiYjNDM7CQlzb2NrX3B1dChjaGlsZCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCXNwaW5fbG9jaygmYW1wO3F1ZXVlLSZndDtmYXN0b3BlbnEubG9jayk7CiAJcXVldWUtJmd0O2Zhc3RvcGVucS5xbGVuJiM0MzsmIzQzOzsKIAlzcGluX3VubG9jaygmYW1wO3F1ZXVlLSZndDtmYXN0b3BlbnEubG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDBmNjBhMWRiZjkyNzQuLmViMGU0MjU5YzI4MDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC03NjY5LDYgJiM0Mzs3NjY5LDcgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsCiAJdGNwX3JzayhyZXEpLSZndDt0eGhhc2ggPSBuZXRfdHhfcm5kaGFzaCgpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKQogCXRjcF9yc2socmVxKS0mZ3Q7aXNfbXB0Y3AgPSAwOwomIzQzOwl0Y3BfcnNrKHJlcSktJmd0O2Ryb3BfcmVxID0gZmFsc2U7CiAjZW5kaWYKIAogCXRjcF9jbGVhcl9vcHRpb25zKCZhbXA7dG1wX29wdCk7CkBAIC03Nzc1LDYgJiM0Mzs3Nzc2LDEwIEBAIGludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLAogCQlSRUFEX09OQ0Uoc2stJmd0O3NrX2RhdGFfcmVhZHkpKHNrKTsKIAkJYmhfdW5sb2NrX3NvY2soZmFzdG9wZW5fc2spOwogCQlzb2NrX3B1dChmYXN0b3Blbl9zayk7CiYjNDM7CX0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHsKJiM0MzsJCXJlcXNrX2ZyZWUocmVxKTsKJiM0MzsJCWRzdF9yZWxlYXNlKGRzdCk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQl0Y3BfcnNrKHJlcSktJmd0O3Rmb19saXN0ZW5lciA9IGZhbHNlOwogCQlpZiAoIXdhbnRfY29va2llICZhbXA7JmFtcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgUGF0Y2ggVHJpYWdlOiBTeXprYWxsZXIgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O3ZlIGdvdCBhIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCB0aGUgZ29hbCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgc29tZXRoaW5nIHN5emthbGxlciBzaG91bGQgYmUgZnV6emluZy4gSXQmIzM5O3MgYSBRQSB0YXNrLCBjb21wbGV0ZWx5IGRlZmVuc2l2ZSwgbm8gbWFsaWNpb3VzIGNvZGUsIGp1c3QgdHJ5aW5nIHRvIGltcHJvdmUga2VybmVsIHJvYnVzdG5lc3MuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyBpbiB0aGUgVENQIHN1YnN5c3RlbSwgZm9jdXNpbmcgb24gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhbmQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gTXkgam9iIGlzIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byB0YXJnZXQuCgpUaGUgZ29vZCBuZXdzIGlzLCBJJiMzOTt2ZSBnb3Qgc29tZSB0b29scyBhdCBteSBkaXNwb3NhbC4gSSBjYW4gdXNlIGBncmVwcGVyYCwgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgIHRvIGRpc3NlY3QgdGhlIGNvZGUuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGVyZSBhcmUgY2hhbmdlcyByZWxhdGVkIHRvIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBpbiBgdGNwX2Zhc3RvcGVuLmNgLiBOb3RhYmx5OgoKYGBgYwomIzQzOwlpZiAob3duX3JlcSAmYW1wOyZhbXA7IHJza19kcm9wX3JlcShyZXEpKSB7CiYjNDM7CQliaF91bmxvY2tfc29jayhjaGlsZCk7CiYjNDM7CQlzb2NrX3B1dChjaGlsZCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQpgYGAKCmFuZCBhbHNvIGNoYW5nZXMgdG8gYHRjcF9jb25uX3JlcXVlc3RgIGluIGB0Y3BfaW5wdXQuY2A6CgpgYGBjCiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUCkKIAl0Y3BfcnNrKHJlcSktJmd0O2lzX21wdGNwID0gMDsKJiM0MzsJdGNwX3JzayhyZXEpLSZndDtkcm9wX3JlcSA9IGZhbHNlOwogI2VuZGlmCi4uLgomIzQzOwl9IGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7CiYjNDM7CQlyZXFza19mcmVlKHJlcSk7CiYjNDM7CQlkc3RfcmVsZWFzZShkc3QpOwomIzQzOwkJcmV0dXJuIDA7CmBgYAoKSXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyB1c2luZyBhIG5ldyBmdW5jdGlvbiwgYHJza19kcm9wX3JlcSgpYCwgYXMgd2VsbCBhcyBhIGZsYWcsIGBkcm9wX3JlcWAuIE5vdywgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuIEkmIzM5O2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIG9jY3VycmVuY2VzIG9mIGJvdGggYHJza19kcm9wX3JlcWAgYW5kIGBkcm9wX3JlcWAgdGhyb3VnaG91dCB0aGUga2VybmVsJiMzOTtzIEhFQUQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY2hhbmdlcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgbGV0IG1lIGRldGVybWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmbGFncyBhbmQgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jza19kcm9wX3JlcSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9tcHRjcC5oPTEzNz1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0MS1cbmluY2x1ZGUvbmV0L21wdGNwLmg6MTQyOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDMte1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmg9MjQ1PXN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMjQ5LVxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNTA6c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI1MS17XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTE5Nz1zdHJ1Y3Qgc29jayAqdGNwX2dldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMC1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMTE6XHRcdGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvc3luY29va2llcy5jLTIxMi1cdFx0XHRyZXFza19wdXQocmVxKTtcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz0zMjY9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMzktXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozNDA6XHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM0MS1cdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc2MjA9aW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc3OC1cdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc3OTpcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3ODAtXHRcdHJlcXNrX2ZyZWUocmVxKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTQyLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjk0MzpcdGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cdFx0cmVxc2tfcXVldWVfcmVtb3ZlZChcdTAwMjZpbmV0X2NzayhyZXEtXHUwMDNlcnNrX2xpc3RlbmVyKS1cdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZSwgcmVxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmaWxlcy4KCioqRGVlcCBEaXZlIEluY29taW5nOiBNUFRDUCwgRmFzdCBPcGVuLCBhbmQgVENQIElucHV0KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUbyByZWFsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgKnRoZXNlKiBsaW5lcywgSSBuZWVkIGEgZ29vZCBmb3VuZGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUga2V5IHBsYXllcnMuIEZpcnN0LCBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAgLSBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgTVBUQ1Agc3RydWN0dXJlcywgdGhlIGNvcmUgZGF0YSBtb2RlbHMsIGFuZCB0aGUga2V5IGRlZmluaXRpb25zIHRoYXQgZ292ZXJuIE11bHRpcGF0aCBUQ1Agb3BlcmF0aW9uIGluIGdlbmVyYWwuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyAqc3VwcG9zZWQqIHRvIGJlaGF2ZSwgdGhlIGJhc2ljIGludGVyZmFjZXMsIGFuZCB3aGVyZSB0aGUgY29yZSBNUFRDUCBjb25jZXB0cyBhcmUgZGVmaW5lZC4gVGhlbiBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLgoKTmV4dCB1cCwgSSYjMzk7bGwgaGl0IGBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY2AuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHRoZSBGYXN0IE9wZW4gbWVjaGFuaXNtIHdpdGhpbiB0aGUgc3RhbmRhcmQgVENQL0lQIHByb3RvY29sLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgaXQgaG9va3MgaW50byB0aGUgZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb24sIGFuZCB3aGF0IG9wdGltaXphdGlvbnMgYXJlIG1hZGUuIEhvdyB0aGUgZmFzdCBvcGVuIGNvb2tpZSBpcyBnZW5lcmF0ZWQsIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBhbmQgd2hlcmUgdGhpcyBpbnRlcnBsYXlzIHdpdGggdGhlIG90aGVyIG1vZHVsZXMgYXJlIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQuIFdoYXQmIzM5O3MgdGhlIHByb3RvY29sIHdpdGggdGhlIGNvb2tpZT8gSG93IGRvZXMgTVBUQ1AgY2hhbmdlIHRoZSBmYXN0IG9wZW4gY29ubmVjdGlvbiBwcm90b2NvbCBpZiBhdCBhbGw/CgpGaW5hbGx5LCBgbmV0L2lwdjQvdGNwX2lucHV0LmNgIGlzIGdvaW5nIHRvIGJlIHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYywgb3IgcG90ZW50aWFsIHByb2JsZW1zLCBsaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGluY29taW5nIFRDUCBzZWdtZW50cywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhleSYjMzk7cmUgaGFuZGxlZCBiYXNlZCBvbiB0aGUgY29ubmVjdGlvbiBzdGF0ZSBhbmQgRmFzdCBPcGVuIGNvb2tpZSAoaWYgcHJlc2VudCkuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBNUFRDUCBzZWdtZW50cyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGVzZSBmYXN0IG9wZW4gY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIGFuZCBtYWludGFpbmVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQuIFVsdGltYXRlbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHJlY29uY2lsZXMgdGhlIHN0YW5kYXJkIFRDUCBoYW5kbGluZyB3aXRoIGFueSBNUFRDUCBhZGRpdGlvbnMgYW5kIEZhc3QgT3BlbiBvcHRpbWl6YXRpb25zLiBUaGUgc3luY2hyb25pemF0aW9uIGlzIGtleSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM1Olx0fVxuIDEzNjpcdFxuIDEzNzpcdHN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIDEzODpcdHtcbiAxMzk6XHRcdHJldHVybiB0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3A7XG4gMTQwOlx0fVxuIDE0MTpcdFxuIDE0MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIDE0MzpcdHtcbiAxNDQ6XHRcdHJldHVybiB0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgXHUwMDI2XHUwMDI2IHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcTtcbiAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0dm9pZCBtcHRjcF9zcGFjZShjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgKnNwYWNlLCBpbnQgKmZ1bGxfc3BhY2UpO1xuIDE0ODpcdGJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDE0OTpcdFx0XHQgICAgICAgdW5zaWduZWQgaW50ICpzaXplLCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuIDE1MDpcdGJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXG4gMTUxOlx0XHRcdFx0ICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuIDE1MjpcdGludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxNTM6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcbiAxNTQ6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuIDE1NTpcdGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIDE1NjpcdFxuIDE1NzpcdHZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4gMTU4Olx0XHRcdFx0IHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XG4gMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkxMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGxpbmUgb2YgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFRDUCBGYXN0IE9wZW4gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSByZXZpc2l0aW5nIFRDUCBGYXN0IE9wZW4sIGFuZCBJIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gYSBiaXQgZGVlcGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHNlY3Rpb24gaW4gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhcm91bmQgbGluZXMgMzIwIHRvIDM3MC4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBwb3NzaWJseSB0aGUgaGFuZGxpbmcgb2YgdGhlIEZhc3QgT3BlbiBjb29raWUgYW5kIHRoZSBpbml0aWFsIGRhdGEgZXhjaGFuZ2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRldGFpbHMgcmVnYXJkaW5nIGNvb2tpZSBnZW5lcmF0aW9uLCB2YWxpZGF0aW9uLCBhbmQgaG93IGl0IG1lc2hlcyB3aXRoIHRoZSBTWU4gYW5kIFNZTi1BQ0sgcHJvY2VzcyBmbG93LiBJdCYjMzk7cyBsaWtlbHkgaGVyZSB0aGF0IEkmIzM5O2xsIGZpbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgRmFzdCBPcGVuIHN0YXRlLCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgYW5kIGFueSBzZWN1cml0eSBjaGVja3MgaW4gcGxhY2UgZm9yIHRoaXMgb3B0aW1pemF0aW9uLiBJJiMzOTttIGhvcGluZyBJIGNhbiB0cmFjZSB0aGUgY29va2llJiMzOTtzIGxpZmVjeWNsZSBhbmQgcmVsYXRlIHRoZSBjb2RlIGJhY2sgdG8gdGhlIFRDUCBzdGF0ZSBtYWNoaW5lIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gVGhpcyBzZWN0aW9uIHNob3VsZCBvZmZlciBpbnNpZ2h0cyBpbnRvIHRoZSBwcmFjdGljYWwgYXNwZWN0cyBvZiBob3cgdGhlIG9wdGltaXphdGlvbiB3b3JrcyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSwgaW4gdGhpcyBhcmVhLCB0aGUgbWVjaGFuaXNtIGZvciBob3cgdGhlIGtlcm5lbCBrZWVwcyB0cmFjayBvZiBhbmQgcmVhY3RzIHRvIHRoZSBGYXN0IE9wZW4gZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdH1cbiAzMjE6XHRvdXQ6XG4gMzIyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMjM6XHRcdHJldHVybiByZXQ7XG4gMzI0Olx0fVxuIDMyNTpcdFxuIDMyNjpcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4gMzI3Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gMzI4Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAzMjk6XHR7XG4gMzMwOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwO1xuIDMzMTpcdFx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcdTAwMjZpbmV0X2NzayhzayktXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XG4gMzMyOlx0XHRzdHJ1Y3Qgc29jayAqY2hpbGQ7XG4gMzMzOlx0XHRib29sIG93bl9yZXE7XG4gMzM0Olx0XG4gMzM1Olx0XHRjaGlsZCA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgTlVMTCxcbiAzMzY6XHRcdFx0XHRcdFx0XHRcdCBOVUxMLCBcdTAwMjZvd25fcmVxLCBOVUxMKTtcbiAzMzc6XHRcdGlmICghY2hpbGQpXG4gMzM4Olx0XHRcdHJldHVybiBOVUxMO1xuIDMzOTpcdFxuIDM0MDpcdFx0aWYgKG93bl9yZXEgXHUwMDI2XHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XG4gMzQxOlx0XHRcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcbiAzNDI6XHRcdFx0c29ja19wdXQoY2hpbGQpO1xuIDM0MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdHNwaW5fbG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4gMzQ3Olx0XHRxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucWxlbiYjNDM7JiM0Mzs7XG4gMzQ4Olx0XHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4gMzQ5Olx0XG4gMzUwOlx0XHQvKiBJbml0aWFsaXplIHRoZSBjaGlsZCBzb2NrZXQuIEhhdmUgdG8gZml4IHNvbWUgdmFsdWVzIHRvIHRha2VcbiAzNTE6XHRcdCAqIGludG8gYWNjb3VudCB0aGUgY2hpbGQgaXMgYSBGYXN0IE9wZW4gc29ja2V0IGFuZCBpcyBjcmVhdGVkXG4gMzUyOlx0XHQgKiBvbmx5IG91dCBvZiB0aGUgYml0cyBjYXJyaWVkIGluIHRoZSBTWU4gcGFja2V0LlxuIDM1MzpcdFx0ICovXG4gMzU0Olx0XHR0cCA9IHRjcF9zayhjaGlsZCk7XG4gMzU1Olx0XG4gMzU2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHAtXHUwMDNlZmFzdG9wZW5fcnNrLCByZXEpO1xuIDM1NzpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXRmb19saXN0ZW5lciA9IHRydWU7XG4gMzU4Olx0XG4gMzU5Olx0XHQvKiBSRkMxMzIzOiBUaGUgd2luZG93IGluIFNZTiBcdTAwMjYgU1lOL0FDSyBzZWdtZW50cyBpcyBuZXZlclxuIDM2MDpcdFx0ICogc2NhbGVkLiBTbyBjb3JyZWN0IGl0IGFwcHJvcHJpYXRlbHkuXG4gMzYxOlx0XHQgKi9cbiAzNjI6XHRcdHRwLVx1MDAzZXNuZF93bmQgPSBudG9ocyh0Y3BfaGRyKHNrYiktXHUwMDNld2luZG93KTtcbiAzNjM6XHRcdHRwLVx1MDAzZW1heF93aW5kb3cgPSB0cC1cdTAwM2VzbmRfd25kO1xuIDM2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBUQ1AgSW5wdXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIFRDUCBpbnB1dCBwcm9jZXNzLCBidXQgdG8gcmVhbGx5IG5haWwgZG93biB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgaG93IHRoaXMgaXMgaGFuZGxlZCBhdCBhIGRldGFpbGVkIGxldmVsLCBJIHdhbnQgdG8gemVybyBpbiBvbiBhIHBhcnRpY3VsYXIgYXJlYS4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSBsaW5lcyA3NjYwIHRocm91Z2ggNzc5MC4gVGhhdCByYW5nZSBzaG91bGQgZ2l2ZSB1cyBzb21lIGludGVyZXN0aW5nIGluc2lnaHRzLCBJJiMzOTttIGV4cGVjdGluZy4gSXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBwYWNrZXQgcHJvY2Vzc2luZyBvciBlcnJvciBoYW5kbGluZyAtIHRob3NlIGFyZSB0aGUgYXJlYXMgSSYjMzk7bSBvZnRlbiBmb2N1c2luZyBvbiB3aGVuIEkgbG9vayBpbnRvIHRjcF9pbnB1dC5jLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzY2MDpcdFxuNzY2MTpcdFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcbjc2NjI6XHRcdGlmICghcmVxKVxuNzY2MzpcdFx0XHRnb3RvIGRyb3A7XG43NjY0Olx0XG43NjY1Olx0XHRyZXEtXHUwMDNlc3luY29va2llID0gd2FudF9jb29raWU7XG43NjY2Olx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlYWZfc3BlY2lmaWMgPSBhZl9vcHM7XG43NjY3Olx0XHR0Y3BfcnNrKHJlcSktXHUwMDNldHNfb2ZmID0gMDtcbjc2Njg6XHRcdHRjcF9yc2socmVxKS1cdTAwM2VyZXFfdXNlY190cyA9IGZhbHNlO1xuNzY2OTpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXR4aGFzaCA9IG5ldF90eF9ybmRoYXNoKCk7XG43NjcwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuNzY3MTpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwID0gMDtcbjc2NzI6XHRcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xuNzY3MzpcdCNlbmRpZlxuNzY3NDpcdFxuNzY3NTpcdFx0dGNwX2NsZWFyX29wdGlvbnMoXHUwMDI2dG1wX29wdCk7XG43Njc2Olx0XHR0bXBfb3B0Lm1zc19jbGFtcCA9IGFmX29wcy1cdTAwM2Vtc3NfY2xhbXA7XG43Njc3Olx0XHR0bXBfb3B0LnVzZXJfbXNzICA9IFJFQURfT05DRSh0cC1cdTAwM2VyeF9vcHQudXNlcl9tc3MpO1xuNzY3ODpcdFx0dGNwX3BhcnNlX29wdGlvbnMoc29ja19uZXQoc2spLCBza2IsIFx1MDAyNnRtcF9vcHQsIDAsXG43Njc5Olx0XHRcdFx0ICB3YW50X2Nvb2tpZSA/IE5VTEwgOiBcdTAwMjZmb2MpO1xuNzY4MDpcdFxuNzY4MTpcdFx0aWYgKHdhbnRfY29va2llIFx1MDAyNlx1MDAyNiAhdG1wX29wdC5zYXdfdHN0YW1wKVxuNzY4MjpcdFx0XHR0Y3BfY2xlYXJfb3B0aW9ucyhcdTAwMjZ0bXBfb3B0KTtcbjc2ODM6XHRcbjc2ODQ6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTUMpIFx1MDAyNlx1MDAyNiB3YW50X2Nvb2tpZSlcbjc2ODU6XHRcdFx0dG1wX29wdC5zbWNfb2sgPSAwO1xuNzY4NjpcdFxuNzY4NzpcdFx0dG1wX29wdC50c3RhbXBfb2sgPSB0bXBfb3B0LnNhd190c3RhbXA7XG43Njg4Olx0XHR0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgXHUwMDI2dG1wX29wdCwgc2tiLCBzayk7XG43Njg5Olx0XHRpbmV0X3JzayhyZXEpLVx1MDAzZW5vX3NyY2NoZWNrID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xuNzY5MDpcdFxuNzY5MTpcdFx0LyogTm90ZTogdGNwX3Y2X2luaXRfcmVxKCkgbWlnaHQgb3ZlcnJpZGUgaXJfaWlmIGZvciBsaW5rIGxvY2FscyAqL1xuNzY5MjpcdFx0aW5ldF9yc2socmVxKS1cdTAwM2Vpcl9paWYgPSBpbmV0X3JlcXVlc3RfYm91bmRfZGV2X2lmKHNrLCBza2IpO1xuNzY5MzpcdFxuNzY5NDpcdFx0aWYgKHdhbnRfY29va2llKSB7XG43Njk1Olx0XHRcdGlzbiA9IGNvb2tpZV9pbml0X3NlcXVlbmNlKGFmX29wcywgc2tiLCBcdTAwMjZyZXEtXHUwMDNlbXNzKTtcbjc2OTY6XHRcdFx0LyogVXNlIHRoZSBjb29raWUgYXMgdHhoYXNoIHNvIHRoZSBTWU4tQUNLIGFuZCB0aGUgbGF0ZXIgZnVsbFxuNzY5NzpcdFx0XHQgKiBzb2NrZXQgbWFrZSB0aGUgc2FtZSBlZ3Jlc3MgY2hvaWNlIChJUHY2IEVDTVAgcGF0aDsgSVB2NCBUWCBxdWV1ZSkuXG43Njk4Olx0XHRcdCAqL1xuNzY5OTpcdFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNldHhoYXNoID0gaXNuO1xuNzcwMDpcdFx0fVxuNzcwMTpcdFxuNzcwMjpcdFx0ZHN0ID0gYWZfb3BzLVx1MDAzZXJvdXRlX3JlcShzaywgc2tiLCBcdTAwMjZmbCwgcmVxLCB3YW50X2Nvb2tpZSA/IDAgOiBpc24pO1xuNzcwMzpcdFx0aWYgKCFkc3QpXG43NzA0Olx0XHRcdGdvdG8gZHJvcF9hbmRfZnJlZTtcbjc3MDU6XHRcbjc3MDY6XHRcdGlmICh0bXBfb3B0LnRzdGFtcF9vayB8fCAoIXdhbnRfY29va2llIFx1MDAyNlx1MDAyNiAhaXNuKSlcbjc3MDc6XHRcdFx0c3QgPSBJTkRJUkVDVF9DQUxMX0lORVQoYWZfb3BzLVx1MDAzZWluaXRfc2VxX2FuZF90c19vZmYsXG43NzA4Olx0XHRcdFx0XHRcdHRjcF92Nl9pbml0X3NlcV9hbmRfdHNfb2ZmLFxuNzcwOTpcdFx0XHRcdFx0XHR0Y3BfdjRfaW5pdF9zZXFfYW5kX3RzX29mZixcbjc3MTA6XHRcdFx0XHRcdFx0bmV0LCBza2IpO1xuNzcxMTpcdFxuNzcxMjpcdFx0aWYgKHRtcF9vcHQudHN0YW1wX29rKSB7XG43NzEzOlx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2VyZXFfdXNlY190cyA9IGRzdF90Y3BfdXNlY190cyhkc3QpO1xuNzcxNDpcdFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNldHNfb2ZmID0gc3QudHNfb2ZmO1xuNzcxNTpcdFx0fVxuNzcxNjpcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjYgIWlzbikge1xuNzcxNzpcdFx0XHRpbnQgbWF4X3N5bl9iYWNrbG9nID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9tYXhfc3luX2JhY2tsb2cpO1xuNzcxODpcdFxuNzcxOTpcdFx0XHQvKiBLaWxsIHRoZSBmb2xsb3dpbmcgY2xhdXNlLCBpZiB5b3UgZGlzbGlrZSB0aGlzIHdheS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYHRjcF9jb25uX3JlcXVlc3RgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNvZGUgYmxvY2sgZnJvbSBhcHByb3hpbWF0ZWx5IGxpbmUgNzc2MCB0byA3Nzk1LiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhpcyBzZWdtZW50IGNhcmVmdWxseSB0byBmdWxseSBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBzcGVjaWZpYyBlbGVtZW50cyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gc2V0dXA6IGFyZSB3ZSBsb29raW5nIGF0IFNZTiBoYW5kbGluZz8gQUNLIHByb2NlZHVyZXM/IFN0YXRlIHRyYW5zaXRpb25zPyBBbnkga2luZCBvZiByZXNvdXJjZSBhbGxvY2F0aW9uPyBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGlzIHNwZWNpZmljIGNvZGUgc2VnbWVudCByZWxhdGVzIHRvIGNvbm5lY3Rpb24gc3RhdGUuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSBtYXkgYmUgY2FsbHMgdG8gaW50ZXJuYWwgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NzYwOlx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlc3luX3RvcyA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VpcF9kc2ZpZWxkO1xuNzc2MTpcdFx0dGNwX29wZW5yZXFfaW5pdF9yd2luKHJlcSwgc2ssIGRzdCk7XG43NzYyOlx0XHRza19yeF9xdWV1ZV9zZXQocmVxX3RvX3NrKHJlcSksIHNrYik7XG43NzYzOlx0XHRpZiAoIXdhbnRfY29va2llKSB7XG43NzY0Olx0XHRcdHRjcF9yZXFza19yZWNvcmRfc3luKHNrLCByZXEsIHNrYik7XG43NzY1Olx0XHRcdGZhc3RvcGVuX3NrID0gdGNwX3RyeV9mYXN0b3Blbihzaywgc2tiLCByZXEsIFx1MDAyNmZvYywgZHN0KTtcbjc3NjY6XHRcdH1cbjc3Njc6XHRcdGlmIChmYXN0b3Blbl9zaykge1xuNzc2ODpcdFx0XHRhZl9vcHMtXHUwMDNlc2VuZF9zeW5hY2soZmFzdG9wZW5fc2ssIGRzdCwgXHUwMDI2ZmwsIHJlcSxcbjc3Njk6XHRcdFx0XHRcdCAgICBcdTAwMjZmb2MsIFRDUF9TWU5BQ0tfRkFTVE9QRU4sIHNrYik7XG43NzcwOlx0XHRcdC8qIEFkZCB0aGUgY2hpbGQgc29ja2V0IGRpcmVjdGx5IGludG8gdGhlIGFjY2VwdCBxdWV1ZSAqL1xuNzc3MTpcdFx0XHRpZiAoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBmYXN0b3Blbl9zaykpIHtcbjc3NzI6XHRcdFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG43NzczOlx0XHRcdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xuNzc3NDpcdFx0XHRcdGdvdG8gZHJvcF9hbmRfZnJlZTtcbjc3NzU6XHRcdFx0fVxuNzc3NjpcdFx0XHRSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xuNzc3NzpcdFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG43Nzc4Olx0XHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbjc3Nzk6XHRcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbjc3ODA6XHRcdFx0cmVxc2tfZnJlZShyZXEpO1xuNzc4MTpcdFx0XHRkc3RfcmVsZWFzZShkc3QpO1xuNzc4MjpcdFx0XHRyZXR1cm4gMDtcbjc3ODM6XHRcdH0gZWxzZSB7XG43Nzg0Olx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIgPSBmYWxzZTtcbjc3ODU6XHRcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjZcbjc3ODY6XHRcdFx0ICAgIHVubGlrZWx5KCFpbmV0X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZChzaywgcmVxKSkpIHtcbjc3ODc6XHRcdFx0XHRyZXFza19mcmVlKHJlcSk7XG43Nzg4Olx0XHRcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbjc3ODk6XHRcdFx0XHRyZXR1cm4gMDtcbjc3OTA6XHRcdFx0fVxuNzc5MTpcdFx0XHRhZl9vcHMtXHUwMDNlc2VuZF9zeW5hY2soc2ssIGRzdCwgXHUwMDI2ZmwsIHJlcSwgXHUwMDI2Zm9jLFxuNzc5MjpcdFx0XHRcdFx0ICAgICF3YW50X2Nvb2tpZSA/IFRDUF9TWU5BQ0tfTk9STUFMIDpcbjc3OTM6XHRcdFx0XHRcdFx0XHQgICBUQ1BfU1lOQUNLX0NPT0tJRSxcbjc3OTQ6XHRcdFx0XHRcdCAgICBza2IpO1xuNzc5NTpcdFx0XHRpZiAod2FudF9jb29raWUpIHtcbjc3OTY6XHRcdFx0XHRyZXFza19mcmVlKHJlcSk7XG43Nzk3Olx0XHRcdFx0cmV0dXJuIDA7XG43Nzk4Olx0XHRcdH1cbjc3OTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE3MQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBgZHJvcF9yZXFgIEZsYWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgdGNwX3JzayhyZXEpLSZndDtkcm9wX3JlcWAgZmxhZyBpcyBnZXR0aW5nIHNldCB0byBgdHJ1ZWAuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBzb21lIGtpbmQgb2YgY29ubmVjdGlvbiByZWplY3Rpb24gb3IgZWFybHkgZHJvcCBjb25kaXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2suIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSB3b3VsZCBiZSBhIHF1aWNrIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGRyb3BfcmVxYCBhY3Jvc3MgdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgaW5zdGFuY2VzIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgdG91Y2hlZC4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgJiMzNDtkcm9wIHJlcXVlc3QmIzM0OyBiZWhhdmlvci4gVGhpcyBzaG91bGQgcXVpY2tseSBwaW5wb2ludCB0aGUgc291cmNlIG9mIHRoZSBkcm9wIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm9wX3JlcSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jPTk0PWludCBibmdlX3NlbmRfbXNnKHN0cnVjdCBibmdlX2F1eHJfZGV2ICphdXhyX2Rldiwgc3RydWN0IGJuZ2VfZndfbXNnICpmd19tc2cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDctXHRpZiAocmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jOjEwODpcdFx0Z290byBkcm9wX3JlcTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmMtMTA5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmMtMTE5LVx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYzoxMjA6ZHJvcF9yZXE6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jLTEyMS1cdGJuZ2VfaHdybV9yZXFfZHJvcChiZCwgcmVxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYz0xNTIzPWludCBibmdlX2h3cm1fcG9ydF9xc3RhdHNfZXh0KHN0cnVjdCBibmdlX2RldiAqYmQsIHU4IGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE1OTctXHRcdFx0XHRyYyA9IC1FSU5WQUw7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYzoxNTk4Olx0XHRcdFx0Z290byBkcm9wX3JlcTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE1OTktXHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE2MDYtXHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYzoxNjA3OmRyb3BfcmVxOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTYwOC1cdGJuZ2VfaHdybV9yZXFfZHJvcChiZCwgcmVxX3FjKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYz00Nj1zdGF0aWMgaW50IGJueHRfaHdybV90ZW1wX3F1ZXJ5KHN0cnVjdCBibnh0ICpicCwgdTggKnRlbXApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmMtNTctXHRpZiAocmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYzo1ODpcdFx0Z290byBkcm9wX3JlcTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTU5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTY5LVx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmM6NzA6ZHJvcF9yZXE6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy03MS1cdGh3cm1fcmVxX2Ryb3AoYnAsIHJlcSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTIzNj1pbnQgYm54dF9zZW5kX21zZyhzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI1NC1cdGlmIChyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzoyNTU6XHRcdGdvdG8gZHJvcF9yZXE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy0yNjYtXHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6MjY3OmRyb3BfcmVxOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI2OC1cdGh3cm1fcmVxX2Ryb3AoYnAsIHJlcSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTA2PXN0YXRpYyBpbnQgZl9taWRpMl9zdGFydF9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExMjEtLyogRHJvcCBwZW5kaW5nIHJlcXVlc3RzICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExMjI6c3RhdGljIHZvaWQgZl9taWRpMl9kcm9wX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExMjMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIwND1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXAoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDUte1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjA2Olx0Zl9taWRpMl9kcm9wX3JlcXModXNiX2VwKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwNy1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDA9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0Mi17XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDM6XHRmX21pZGkyX2Ryb3BfcmVxcyhlcF9pbik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDQ6XHRmX21pZGkyX2Ryb3BfcmVxcyhlcF9vdXQpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQ1LVx0Zl9taWRpMl9mcmVlX2VwX3JlcXMoZXBfaW4pO1xuLS1cbmluY2x1ZGUvbGludXgvdGNwLmg9MTUwPXN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3RjcC5oLTE1Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG5pbmNsdWRlL2xpbnV4L3RjcC5oOjE1ODpcdGJvb2xcdFx0XHRcdGRyb3BfcmVxO1xuaW5jbHVkZS9saW51eC90Y3AuaC0xNTktI2VuZGlmXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0xMzc9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDEtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE0MjpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTQzLXtcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTQ0Olx0cmV0dXJuIHRjcF9yc2socmVxKS1cdTAwM2Vpc19tcHRjcCBcdTAwMjZcdTAwMjYgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxO1xuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDUtfVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmg9MjQ1PXN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMjQ5LVxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNTA6c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI1MS17XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTE5Nz1zdHJ1Y3Qgc29jayAqdGNwX2dldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMC1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMTE6XHRcdGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvc3luY29va2llcy5jLTIxMi1cdFx0XHRyZXFza19wdXQocmVxKTtcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz0zMjY9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMzktXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozNDA6XHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM0MS1cdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTI9dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDIyLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQyMzpzdGF0aWMgaW5saW5lIHZvaWQgcHJfZHJvcF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBfX3UxNiBwb3J0LCBpbnQgZmFtaWx5KVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyNC17XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzYyMD1pbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjcxLVx0dGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwID0gMDtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc2NzI6XHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NzMtI2VuZGlmXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczMC1cdFx0XHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3MzE6XHRcdFx0cHJfZHJvcF9yZXEocmVxLCBudG9ocyh0Y3BfaGRyKHNrYiktXHUwMDNlc291cmNlKSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3MzItXHRcdFx0XHQgICAgcnNrX29wcy1cdTAwM2VmYW1pbHkpO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NzgtXHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3Nzk6XHR9IGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVx0XHRyZXFza19mcmVlKHJlcSk7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5NDM6XHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy05NDQtXHRcdHJlcXNrX3F1ZXVlX3JlbW92ZWQoXHUwMDI2aW5ldF9jc2socmVxLVx1MDAzZXJza19saXN0ZW5lciktXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz04MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtODYyLVxubmV0L21wdGNwL3N1YmZsb3cuYzo4NjM6XHRcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xubmV0L21wdGNwL3N1YmZsb3cuYy04NjQtXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy05NDgtXHRcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5BQ0tSWCk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjk0OTpcdFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSB0cnVlO1xubmV0L21wdGNwL3N1YmZsb3cuYy05NTAtXHRcdH1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTk2Mi1cdG1wdGNwX3N1YmZsb3dfZHJvcF9jdHgoY2hpbGQpO1xubmV0L21wdGNwL3N1YmZsb3cuYzo5NjM6XHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSB0cnVlO1xubmV0L21wdGNwL3N1YmZsb3cuYy05NjQtXHRpbmV0X2Nza19wcmVwYXJlX2Zvcl9kZXN0cm95X3NvY2soY2hpbGQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1QVENQIFN1YmZsb3cgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgTXVsdGlQYXRoIFRDUCBzdWJmbG93IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkuIExldCBtZSBwdWxsIHVwIHRoZSBgbmV0L21wdGNwL3N1YmZsb3cuY2AgZmlsZSDigJMgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwbGFjZSBmb3IgdGhlIGNvcmUgc3ViZmxvdyBsb2dpYywgcmlnaHQ/IE5vdywgSSB3YW50IHRvIHplcm8gaW4gb24gYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUsIGZyb20gYXBwcm94aW1hdGVseSBsaW5lcyA4MDQgdGhyb3VnaCA5NzAuIEkmIzM5O20gaG9waW5nIHRoYXQgcGFydGljdWxhciBjb2RlIGJsb2NrIHdpbGwgaWxsdW1pbmF0ZSB0aGUgYmVoYXZpb3VyIGFuZCBsb2dpYyBJIG5lZWQgdG8gZ3Jhc3AuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIHdpbGwgY29udGFpbiB0aGUgY3J1Y2lhbCBkZXRhaWxzIEkmIzM5O20gc2Vla2luZyByZWdhcmRpbmcgdGhlIHN1YmZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHR9IGVsc2UgaWYgKHN1YmZsb3dfcmVxLVx1MDAzZW1wX2pvaW4pIHtcbiA4NTE6XHRcdFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuIDg1MjpcdFx0XHRpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QSl9BQ0spKVxuIDg1MzpcdFx0XHRcdGZhbGxiYWNrID0gdHJ1ZTtcbiA4NTQ6XHRcdH1cbiA4NTU6XHRcbiA4NTY6XHRjcmVhdGVfY2hpbGQ6XG4gODU3Olx0XHRjaGlsZCA9IGxpc3RlbmVyLVx1MDAzZWljc2tfYWZfb3BzLVx1MDAzZXN5bl9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBkc3QsXG4gODU4Olx0XHRcdFx0XHRcdFx0ICAgICByZXFfdW5oYXNoLCBvd25fcmVxLCBvcHRfY2hpbGRfaW5pdCk7XG4gODU5Olx0XG4gODYwOlx0XHRpZiAoY2hpbGQgXHUwMDI2XHUwMDI2ICpvd25fcmVxKSB7XG4gODYxOlx0XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmN0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KGNoaWxkKTtcbiA4NjI6XHRcbiA4NjM6XHRcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XG4gODY0Olx0XG4gODY1Olx0XHRcdC8qIHdlIG5lZWQgdG8gZmFsbGJhY2sgb24gY3R4IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgb24gcHJlLXJlcXNcbiA4NjY6XHRcdFx0ICogY2hlY2tpbmcgYWJvdmUuIEluIHRoZSBsYXR0ZXIgc2NlbmFyaW8gd2UgYWRkaXRpb25hbGx5IG5lZWRcbiA4Njc6XHRcdFx0ICogdG8gcmVzZXQgdGhlIGNvbnRleHQgdG8gbm9uIE1QVENQIHN0YXR1cy5cbiA4Njg6XHRcdFx0ICovXG4gODY5Olx0XHRcdGlmICghY3R4IHx8IGZhbGxiYWNrKSB7XG4gODcwOlx0XHRcdFx0aWYgKGZhbGxiYWNrX2lzX2ZhdGFsKSB7XG4gODcxOlx0XHRcdFx0XHRpZiAoIWN0eClcbiA4NzI6XHRcdFx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiA4NzM6XHRcdFx0XHRcdFx0XHRcdE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCk7XG4gODc0Olx0XHRcdFx0XHRlbHNlXG4gODc1Olx0XHRcdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG4gODc2Olx0XHRcdFx0XHRcdFx0XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4pO1xuIDg3NzpcdFx0XHRcdFx0c3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7XG4gODc4Olx0XHRcdFx0XHRnb3RvIGRpc3Bvc2VfY2hpbGQ7XG4gODc5Olx0XHRcdFx0fVxuIDg4MDpcdFx0XHRcdGdvdG8gZmFsbGJhY2s7XG4gODgxOlx0XHRcdH1cbiA4ODI6XHRcbiA4ODM6XHRcdFx0Lyogc3NrIGluaGVyaXRzIG9wdGlvbnMgb2YgbGlzdGVuZXIgc2sgKi9cbiA4ODQ6XHRcdFx0Y3R4LVx1MDAzZXNldHNvY2tvcHRfc2VxID0gbGlzdGVuZXItXHUwMDNlc2V0c29ja29wdF9zZXE7XG4gODg1Olx0XG4gODg2Olx0XHRcdGlmIChjdHgtXHUwMDNlbXBfY2FwYWJsZSkge1xuIDg4NzpcdFx0XHRcdGN0eC1cdTAwM2Vjb25uID0gbXB0Y3Bfc2tfY2xvbmVfaW5pdChsaXN0ZW5lci1cdTAwM2Vjb25uLCBcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xuIDg4ODpcdFx0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pXG4gODg5Olx0XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDg5MDpcdFxuIDg5MTpcdFx0XHRcdGN0eC1cdTAwM2VzdWJmbG93X2lkID0gMTtcbiA4OTI6XHRcdFx0XHRvd25lciA9IG1wdGNwX3NrKGN0eC1cdTAwM2Vjb25uKTtcbiA4OTM6XHRcbiA4OTQ6XHRcdFx0XHRpZiAobXBfb3B0LmRlbnlfam9pbl9pZDApXG4gODk1Olx0XHRcdFx0XHRXUklURV9PTkNFKG93bmVyLVx1MDAzZXBtLnJlbW90ZV9kZW55X2pvaW5faWQwLCB0cnVlKTtcbiA4OTY6XHRcbiA4OTc6XHRcdFx0XHRtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihvd25lciwgY2hpbGQsIDEpO1xuIDg5ODpcdFxuIDg5OTpcdFx0XHRcdC8qIHdpdGggT29PIHBhY2tldHMgd2UgY2FuIHJlYWNoIGhlcmUgd2l0aG91dCBpbmdyZXNzXG4gOTAwOlx0XHRcdFx0ICogbXBjIG9wdGlvblxuIDkwMTpcdFx0XHRcdCAqL1xuIDkwMjpcdFx0XHRcdGlmIChtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QQ19BQ0spIHtcbiA5MDM6XHRcdFx0XHRcdG1wdGNwX3BtX2Z1bGx5X2VzdGFibGlzaGVkKG93bmVyLCBjaGlsZCk7XG4gOTA0Olx0XHRcdFx0XHRjdHgtXHUwMDNlcG1fbm90aWZpZWQgPSAxO1xuIDkwNTpcdFx0XHRcdH1cbiA5MDY6XHRcdFx0fSBlbHNlIGlmIChjdHgtXHUwMDNlbXBfam9pbikge1xuIDkwNzpcdFx0XHRcdG93bmVyID0gc3ViZmxvd19yZXEtXHUwMDNlbXNrO1xuIDkwODpcdFx0XHRcdGlmICghb3duZXIpIHtcbiA5MDk6XHRcdFx0XHRcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FUFJPSElCSVQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQIEZhc3QgT3BlbiBhbmQgQ29ubmVjdGlvbiBSZXF1ZXN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ2l0IGxvZyB0byB1bmRlcnN0YW5kIHRoZSAmIzM5O3doeSYjMzk7IGJlaGluZCB0aGlzIGNoYW5nZS4mIzM0OyBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0LCBtYXliZSBhIHF1aWNrIGBncmVwcGVyYCBydW4gd291bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQsIG9yIHBlcmhhcHMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBkaWZmIHdpbGwgYmUgc3VmZmljaWVudCB0byBnbGVhbiB0aGUgcHVycG9zZS4gVGhlIGNvbW1pdCBpbiB0aGUgd29ya3NwYWNlIGlzIGBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdgLCB3aGljaCBkb2VzbiYjMzk7dCB0ZWxsIG1lIG11Y2guCgpOb3csIGxvb2tpbmcgYXQgdGhlIGRpZmYgaXRzZWxmLCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyBgbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNgIGFuZCBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgcmVsYXRlZCB0byBUQ1AgRmFzdCBPcGVuIGNoaWxkIHNvY2tldCBjcmVhdGlvbiBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdHMsIGluY2x1ZGluZyBoYW5kbGluZyBvZiByZXF1ZXN0IHNvY2tldHMgYW5kIGEgbmV3IGBkcm9wX3JlcWAgZmllbGQuICBUaGUgYWRkZWQgYHJza19kcm9wX3JlcWAgY2FsbHMgd2l0aGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBhbmQgYHRjcF9jb25uX3JlcXVlc3RgIGFyZSBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4KCk15IGV4cGVydCBleWVzIHRlbGwgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suICBUaGlzIGFmZmVjdHMgVENQL01QVENQIHNvY2tldCBjcmVhdGlvbiBhbmQgU1lOIGhhbmRsaW5nLCB3aGljaCBpcyBmdW5kYW1lbnRhbC4gVGhpcyBjb2RlIHdpbGwgYmUgcmVhY2hlZCBieSBzaW1wbHkgY3JlYXRpbmcgc3RhbmRhcmQgVENQL01QVENQIHNvY2tldHMgYW5kIHNlbmRpbmcgU1lOcyB3aXRoIG9yIHdpdGhvdXQgVENQIEZhc3QgT3BlbiBjb29raWVzLiBXZSYjMzk7cmUgdGFsa2luZyBzdGFuZGFyZCBzb2NrZXRzLCBsb29wYmFjaywgdHVuL3RhcCwgYW5kIG5ldHdvcmsgZGV2aWNlIGludGVyYWN0aW9uIOKAkyBpdCYjMzk7cyBhbGwgaW4gdGhlIG1peC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFRDUCBzdGFjayBpbiBgbmV0L2lwdjQvYCB0aGlzIHBhdGNoICpzaG91bGQqIGJlIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIEl0IGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIHB1cnZpZXcgb2YgYmVpbmcgcmVhY2hhYmxlIGNvZGUgYW5kIG5vdCBiZWluZyBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgdW5yZWFjaGFibGUgaGFyZHdhcmUsIHRlYXJkb3duLCB1bmJpbmRpbmcsIG9yIGFyY2gtc3BlY2lmaWMuCgpOb3csIGxldCYjMzk7cyBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB0byBiZSBjb21waWxlZCBhbmQgcmVhY2hhYmxlLiBJJiMzOTtsbCBjaGVjayBmb3IgYENPTkZJR19JTkVUYCAvIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19JUFY0YCBhcyB0aGUgYmFyZSBtaW5pbXVtLiBBIGRlZXBlciBkaXZlIHdpbGwgY29uZmlybSBgQ09ORklHX01QVENQYCBpcyBhbHNvIG5lZWRlZCwgZ2l2ZW4gdGhlIHJlZmVyZW5jZXMgdG8gYElTX0VOQUJMRUQoQ09ORklHX01QVENQKWAgYW5kIHRoZSBgcnNrX2Ryb3BfcmVxYCBmdW5jdGlvbnMuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBgQ09ORklHX01QVENQYCBpbiBgbmV0L21wdGNwL0tjb25maWdgIGFuZCBgbmV0L2lwdjQvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoQ09ORklHLip0Y3BfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0lORVRfRElBRykgJiM0Mzs9IGluZXRfZGlhZy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfSU5FVF9UQ1BfRElBRykgJiM0Mzs9IHRjcF9kaWFnLm9cbm5ldC9pcHY0L01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19JTkVUX1VEUF9ESUFHKSAmIzQzOz0gdWRwX2RpYWcub1xubmV0L2lwdjQvTWFrZWZpbGU9NDY9b2JqLSQoQ09ORklHX0lORVRfUkFXX0RJQUcpICYjNDM7PSByYXdfZGlhZy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo0NzpvYmotJChDT05GSUdfVENQX0NPTkdfQkJSKSAmIzQzOz0gdGNwX2Jici5vXG5uZXQvaXB2NC9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfVENQX0NPTkdfQklDKSAmIzQzOz0gdGNwX2JpYy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfVENQX0NPTkdfQ0RHKSAmIzQzOz0gdGNwX2NkZy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1MDpvYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICYjNDM7PSB0Y3BfY3ViaWMub1xubmV0L2lwdjQvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX1RDUF9DT05HX0RDVENQKSAmIzQzOz0gdGNwX2RjdGNwLm9cbm5ldC9pcHY0L01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19UQ1BfQ09OR19XRVNUV09PRCkgJiM0Mzs9IHRjcF93ZXN0d29vZC5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfVENQX0NPTkdfSFNUQ1ApICYjNDM7PSB0Y3BfaGlnaHNwZWVkLm9cbm5ldC9pcHY0L01ha2VmaWxlOjU0Om9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgJiM0Mzs9IHRjcF9oeWJsYS5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgJiM0Mzs9IHRjcF9odGNwLm9cbm5ldC9pcHY0L01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgJiM0Mzs9IHRjcF92ZWdhcy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1NzpvYmotJChDT05GSUdfVENQX0NPTkdfTlYpICYjNDM7PSB0Y3BfbnYub1xubmV0L2lwdjQvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX1RDUF9DT05HX1ZFTk8pICYjNDM7PSB0Y3BfdmVuby5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1OTpvYmotJChDT05GSUdfVENQX0NPTkdfU0NBTEFCTEUpICYjNDM7PSB0Y3Bfc2NhbGFibGUub1xubmV0L2lwdjQvTWFrZWZpbGU6NjA6b2JqLSQoQ09ORklHX1RDUF9DT05HX0xQKSAmIzQzOz0gdGNwX2xwLm9cbm5ldC9pcHY0L01ha2VmaWxlOjYxOm9iai0kKENPTkZJR19UQ1BfQ09OR19ZRUFIKSAmIzQzOz0gdGNwX3llYWgub1xubmV0L2lwdjQvTWFrZWZpbGU6NjI6b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSAmIzQzOz0gdGNwX2lsbGlub2lzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSB0Y3BfYnBmLm9cbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHVkcF9icGYub1xuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTY3PW9iai0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTRfcG9saWN5Lm8geGZybTRfc3RhdGUubyB4ZnJtNF9pbnB1dC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS02OC1cdFx0ICAgICAgeGZybTRfb3V0cHV0Lm8geGZybTRfcHJvdG9jb2wub1xubmV0L2lwdjQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX1RDUF9BTykgJiM0Mzs9IHRjcF9hby5vXG5uZXQvaXB2NC9NYWtlZmlsZS03MC1cbm5ldC9pcHY0L01ha2VmaWxlPTcxPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXG5uZXQvaXB2NC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfdGNwX2NhLm9cbm5ldC9pcHY0L01ha2VmaWxlLTczLWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgYWdhaW4uIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIGJ1dCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhpcyBzZWN0aW9uLiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgYnVpbHQsIGhvdyBpdCYjMzk7cyBiZWluZyBidWlsdCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBidWlsZCBmbGFncyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBJdCYjMzk7cyBlYXN5IHRvIGZvY3VzIG9uIGluZGl2aWR1YWwgZmlsZXMsIGJ1dCB0aGUgTWFrZWZpbGUmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSAqc3lzdGVtKiBhcyBhIHdob2xlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYW55IHJlY2VudCBjaGFuZ2VzIGhlcmUsIGFuZCBsb29rIGZvciBhbnkgY2x1ZXMuIEnigJltIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBtb2R1bGVzIGFuZCBrZXJuZWwgb2JqZWN0cy4gVGltZSB0byBkaXZlIGluLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVENQL0lQIChJTkVUKSBsYXllci5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4gICA3Olx0XHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXG4gICA4Olx0XHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcbiAgIDk6XHRcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxuICAxMDpcdFx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxuICAxMTpcdFx0ICAgICB0Y3BfbWluaXNvY2tzLm8gdGNwX2NvbmcubyB0Y3BfbWV0cmljcy5vIHRjcF9mYXN0b3Blbi5vIFxcXG4gIDEyOlx0XHQgICAgIHRjcF9yZWNvdmVyeS5vIHRjcF91bHAubyBcXFxuICAxMzpcdFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXG4gIDE0Olx0XHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXG4gIDE1Olx0XHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXG4gIDE2Olx0XHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG4gIDE3Olx0XHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXG4gIDE4Olx0XG4gIDE5Olx0b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICYjNDM7PSBpcF90dW5uZWwub1xuICAyMDpcdG9iai0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjQub1xuICAyMTpcdG9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUykgJiM0Mzs9IGZpYl9ydWxlcy5vXG4gIDIzOlx0b2JqLSQoQ09ORklHX0lQX01ST1VURSkgJiM0Mzs9IGlwbXIub1xuICAyNDpcdG9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSAmIzQzOz0gaXBtcl9iYXNlLm9cbiAgMjU6XHRvYmotJChDT05GSUdfTkVUX0lQSVApICYjNDM7PSBpcGlwLm9cbiAgMjY6XHRncmUteSA6PSBncmVfZGVtdXgub1xuICAyNzpcdGZvdS15IDo9IGZvdV9jb3JlLm8gZm91X25sLm8gZm91X2JwZi5vXG4gIDI4Olx0b2JqLSQoQ09ORklHX05FVF9GT1UpICYjNDM7PSBmb3Uub1xuICAyOTpcdG9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICYjNDM7PSBncmUub1xuICAzMDpcdG9iai0kKENPTkZJR19ORVRfSVBHUkUpICYjNDM7PSBpcF9ncmUub1xuICAzMTpcdHVkcF90dW5uZWwteSA6PSB1ZHBfdHVubmVsX2NvcmUubyB1ZHBfdHVubmVsX25pYy5vXG4gIDMyOlx0b2JqLSQoQ09ORklHX05FVF9VRFBfVFVOTkVMKSAmIzQzOz0gdWRwX3R1bm5lbC5vXG4gIDMzOlx0b2JqLSQoQ09ORklHX05FVF9JUFZUSSkgJiM0Mzs9IGlwX3Z0aS5vXG4gIDM0Olx0b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gIDM1Olx0b2JqLSQoQ09ORklHX0lORVRfQUgpICYjNDM7PSBhaDQub1xuICAzNjpcdG9iai0kKENPTkZJR19JTkVUX0VTUCkgJiM0Mzs9IGVzcDQub1xuICAzNzpcdG9iai0kKENPTkZJR19JTkVUX0VTUF9PRkZMT0FEKSAmIzQzOz0gZXNwNF9vZmZsb2FkLm9cbiAgMzg6XHRvYmotJChDT05GSUdfSU5FVF9JUENPTVApICYjNDM7PSBpcGNvbXAub1xuICAzOTpcdG9iai0kKENPTkZJR19JTkVUX1hGUk1fVFVOTkVMKSAmIzQzOz0geGZybTRfdHVubmVsLm9cbiAgNDA6XHRvYmotJChDT05GSUdfSU5FVF9UVU5ORUwpICYjNDM7PSB0dW5uZWw0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYENPTkZJR19NUFRDUGAgaW4gYG5ldC9tcHRjcC9LY29uZmlnYDoKCioqQ2hlY2tpbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIE1QVENQIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBsYWNlIHdoZXJlIHRoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYENPTkZJR19NUFRDUGAsIHdoaWNoIEkmIzM5O2xsIHRoZW4gdXNlIHRvIGd1aWRlIHdoYXQgSSBjaGVjayBuZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhhdCBvcHRpb24sIHRvby4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBhbmQgd2hhdCBzdXBwb3J0aW5nIG9wdGlvbnMgbWlnaHQgYmUgcmVxdWlyZWQgb3IgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBJUFY2PXlcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICAyODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMjk6XHRcdGhlbHBcbiAgMzA6XHRcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxuICAzMTpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiAgMzI6XHRcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiAgMzU6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzODpcdFxuICAzOTpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzE5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgcnNrX2Ryb3BfcmVxYCBhbmQgRm9jdXNTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGByc2tfZHJvcF9yZXFgIGZ1bmN0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiB0aGlzIG5ldyBjb2RlLiBMb29raW5nIGF0IGBpbmNsdWRlL25ldC9tcHRjcC5oYCwgSSBzZWUgdGhlIGRlZmluaXRpb24gaXMgY29uZGl0aW9uYWwuIElmIGBDT05GSUdfTVBUQ1BgIGlzICpkaXNhYmxlZCosIHRoZW4gYHJza19kcm9wX3JlcWAganVzdCByZXR1cm5zIGBmYWxzZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBtZWFucyB0aG9zZSBgaWYgKG93bl9yZXEgJmFtcDsmYW1wOyByc2tfZHJvcF9yZXEocmVxKSlgIGFuZCBgfSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSlgIGNoZWNrcyBhcmUgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIHVubGVzcyBNUFRDUCBpcyBlbmFibGVkLiAgQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfSU5FVGAgd291bGQgYWxzbyBiZSByZXF1aXJlZCBieSB2aXJ0dWUgb2YgVENQLgoKTm93LCBzaGlmdGluZyBnZWFycywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiAgU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAuIEkgcmVjYWxsIHRoYXQgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGlzIHN0YXRpYy4gRnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGl0JiMzOTtzIGNhbGxlZCBieSBgdGNwX3RyeV9mYXN0b3BlbmAgYW5kIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3NlbnRgIGFuZCB0aGUgcXVlc3Rpb24gaXMgaW4gd2hhdCBvdGhlciBjb250ZXh0IGl0IG1pZ2h0IGJlIHVzZWQuIE5vdyBJIHNob3VsZCBncmVwIGZvciBib3RoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTI5OD1zdGF0aWMgaW50IHRjcF9mYXN0b3Blbl9jb29raWVfZ2VuX2NoZWNrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMjUtXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozMjY6c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMyNy1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz00NDQ9c3RydWN0IHNvY2sgKnRjcF90cnlfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTQ4Ny1mYXN0b3Blbjpcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjQ4ODpcdFx0XHRjaGlsZCA9IHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc2ssIHNrYiwgcmVxKTtcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTQ4OS1cdFx0XHRpZiAoY2hpbGQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdGNwX2Nvbm5fcmVxdWVzdGAgQ2FsbGVycyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHBhdGhzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbWV0aG9kaWNhbGx5IHRyYWNpbmcgdGhlIGNhbGxlcnMgb2YgYHRjcF9jb25uX3JlcXVlc3RgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgaW5pdGlhdGVkIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBUQ1AvSVAgc3RhY2suIEl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ganVzdCBsb29rIGF0IHRoZSBkaXJlY3QgY2FsbGVyczsgSSBuZWVkIHRvIGNvbnNpZGVyIGluZGlyZWN0IGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbHNpdGUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFjdGl2ZSBvcGVucywgcGFzc2l2ZSBvcGVucywgb3Igc29tZSBjb21iaW5hdGlvbj8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZSBhdCBlYWNoIGxldmVsPwoKSSBhbHNvIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYW5kIGV4YW1pbmUgcmVsYXRlZCBmdW5jdGlvbnMsIG5vdCBqdXN0IGB0Y3BfY29ubl9yZXF1ZXN0YC4gV2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIHRlYXJkb3duLCBhbmQgbWFuYWdlbWVudD8gVGhpbmdzIGxpa2UgYHRjcF92NF9yY3ZgLCBgdGNwX2FjY2VwdGAsIGBpbmV0X2xpc3RlbmAsIGFuZCBhbnl0aGluZyBkZWFsaW5nIHdpdGggU1lOLCBTWU4tQUNLLCBhbmQgQUNLIHByb2Nlc3NpbmcgYXJlIGltbWVkaWF0ZWx5IGp1bXBpbmcgdG8gbWluZC4gSSBzaG91bGQgYmUgYWJsZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCB0aGVzZSBmdW5jdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGFueSBwYXR0ZXJucyBvciBhcmVhcyB0aGF0IHdhcnJhbnQgZGVlcGVyIHNjcnV0aW55LiBUaGlzIGludmVzdGlnYXRpb24gaXMgZ29pbmcgdG8gZ28gZmFzdCBzbyB0aGF0IEkgY2FuIHF1aWNrbHkgYXNzZXNzIHRoZSBvdmVyYWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jb25uX3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MjQ3MT1pbnQgdGNwX3J0eF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuaW5jbHVkZS9uZXQvdGNwLmg6MjQ3MjppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbmluY2x1ZGUvbmV0L3RjcC5oLTI0NzMtXHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MzI2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzg2LVx0dHAtXHUwMDNlcmN2X213bmRfc2VxID0gdHAtXHUwMDNlcmN2X3d1cCAmIzQzOyB0cC1cdTAwM2VyY3Zfd25kO1xubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6Mzg3Olx0LyogdGNwX2Nvbm5fcmVxdWVzdCgpIGlzIHNlbmRpbmcgdGhlIFNZTkFDSyxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM4OC1cdCAqIGFuZCBxdWV1ZXMgdGhlIGNoaWxkIGludG8gbGlzdGVuZXIgYWNjZXB0IHF1ZXVlLlxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc1OTQ9dTE2IHRjcF9nZXRfc3luY29va2llX21zcyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjE5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyMDppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MjEtXHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjU1PWludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NjAtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2NjE6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcyxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY2Mi1cdFx0XHRcdFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHMsIHNrLCBza2IpO1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTMxNj1zdGF0aWMgaW50IHRjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMyOC1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTMyOTpcdHJldHVybiB0Y3BfY29ubl9yZXF1ZXN0KFx1MDAyNnRjcDZfcmVxdWVzdF9zb2NrX29wcyxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMzMC1cdFx0XHRcdFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfaXB2Nl9vcHMsIHNrLCBza2IpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjcyPXN0YXRpYyBpbnQgc3ViZmxvd192NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjgxLVxubmV0L21wdGNwL3N1YmZsb3cuYzo2ODI6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHMsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY4My1cdFx0XHRcdFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzAzPXN0YXRpYyBpbnQgc3ViZmxvd192Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNzE5LVxubmV0L21wdGNwL3N1YmZsb3cuYzo3MjA6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZtcHRjcF9zdWJmbG93X3Y2X3JlcXVlc3Rfc29ja19vcHMsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcyMS1cdFx0XHRcdFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjZfb3BzLCBzaywgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MjIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA3MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwcm9qZWN0IGd1aWRlbGluZXMgZm9yIGxpc3RpbmcgdGFyZ2V0ZWQgZmVhdHVyZSBsb2dpYy4gRmlyc3QsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zIHRvdWNoZWQ6IEkmIzM5O20gdHJhY2tpbmcgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AgYW5kIHdoZXJlIGB0Y3BfdHJ5X2Zhc3RvcGVuYCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBGYXN0IE9wZW4gYW5kIE1QVENQLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBoYXMgYmVlbiBtb2RpZmllZCBpbiBgbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNgLCBhbG9uZyB3aXRoIGNhbGxzIHRvIGB0Y3BfdHJ5X2Zhc3RvcGVuYCB3aGljaCBpdHNlbGYgY2FsbHMgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgLCBhbHNvIGluIGBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY2AsIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gVGhlbiBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCBpcyBpbiBgbmV0L21wdGNwL3N1YmZsb3cuY2AuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7dmUgY292ZXJlZCBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgc28gYSBkb3VibGUtY2hlY2sgaXMgbmVjZXNzYXJ5LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgaXMgKnN0YXRpYyosIGJ1dCBJIGtub3cgdGhhdCBpbiBDLCBzdGF0aWMgZnVuY3Rpb25zIG9mdGVuIHN0aWxsIGhhdmUgc3ltYm9scyBpZiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZCwgYWx0aG91Z2ggSSYjMzk7bGwgYmUgc3VyZSB0byBpbmNsdWRlIGl0LiBgdGNwX3RyeV9mYXN0b3BlbmAgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YCBhcmUgYm90aCBub24tc3RhdGljLiBTaW5jZSB0aGUgZ3VpZGVsaW5lcyBhc2sgbWUgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgZXhlcmNpc2Ugc3RhdGljIGlubGluZSBoZWxwZXJzLCBhbmQgdGhvc2UgYXJlOgotICAgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgCi0gICBgdGNwX3RyeV9mYXN0b3BlbmAKLSAgIGB0Y3BfY29ubl9yZXF1ZXN0YAoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSBrbm93IEkmIzM5O2xsIG5lZWQgYElORVRgIGFuZCBgTVBUQ1BgLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciBgVENQX0ZBU1RPUEVOYCBpcyBhIHNlcGFyYXRlIGNvbmZpZyBvcHRpb24gb3IgaWYgaXQmIzM5O3MgaW1wbGljaXRseSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVENQXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTQ1NT1jb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ2Ny1cbm5ldC9pcHY0L0tjb25maWc6NDY4Om1lbnVjb25maWcgVENQX0NPTkdfQURWQU5DRURcbm5ldC9pcHY0L0tjb25maWctNDY5LVx0Ym9vbCBcJiMzNDtUQ1A6IGFkdmFuY2VkIGNvbmdlc3Rpb24gY29udHJvbFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NDc5PWlmIFRDUF9DT05HX0FEVkFOQ0VEXG5uZXQvaXB2NC9LY29uZmlnLTQ4MC1cbm5ldC9pcHY0L0tjb25maWc6NDgxOmNvbmZpZyBUQ1BfQ09OR19CSUNcbm5ldC9pcHY0L0tjb25maWctNDgyLVx0dHJpc3RhdGUgXCYjMzQ7QmluYXJ5IEluY3JlYXNlIENvbmdlc3Rpb24gKEJJQykgY29udHJvbFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDk0LVxubmV0L2lwdjQvS2NvbmZpZzo0OTU6Y29uZmlnIFRDUF9DT05HX0NVQklDXG5uZXQvaXB2NC9LY29uZmlnLTQ5Ni1cdHRyaXN0YXRlIFwmIzM0O0NVQklDIFRDUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNTAyLVxubmV0L2lwdjQvS2NvbmZpZzo1MDM6Y29uZmlnIFRDUF9DT05HX1dFU1RXT09EXG5uZXQvaXB2NC9LY29uZmlnLTUwNC1cdHRyaXN0YXRlIFwmIzM0O1RDUCBXZXN0d29vZCYjNDM7XCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy01MTYtXG5uZXQvaXB2NC9LY29uZmlnOjUxNzpjb25maWcgVENQX0NPTkdfSFRDUFxubmV0L2lwdjQvS2NvbmZpZy01MTgtXHR0cmlzdGF0ZSBcJiMzNDtILVRDUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNTI3LVxubmV0L2lwdjQvS2NvbmZpZzo1Mjg6Y29uZmlnIFRDUF9DT05HX0hTVENQXG5uZXQvaXB2NC9LY29uZmlnLTUyOS1cdHRyaXN0YXRlIFwmIzM0O0hpZ2ggU3BlZWQgVENQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy01MzctXG5uZXQvaXB2NC9LY29uZmlnOjUzODpjb25maWcgVENQX0NPTkdfSFlCTEFcbm5ldC9pcHY0L0tjb25maWctNTM5LVx0dHJpc3RhdGUgXCYjMzQ7VENQLUh5YmxhIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTU0Ni1cbm5ldC9pcHY0L0tjb25maWc6NTQ3OmNvbmZpZyBUQ1BfQ09OR19WRUdBU1xubmV0L2lwdjQvS2NvbmZpZy01NDgtXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgVmVnYXNcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTU1Ni1cbm5ldC9pcHY0L0tjb25maWc6NTU3OmNvbmZpZyBUQ1BfQ09OR19OVlxubmV0L2lwdjQvS2NvbmZpZy01NTgtXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgTlZcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTU3Mi1cbm5ldC9pcHY0L0tjb25maWc6NTczOmNvbmZpZyBUQ1BfQ09OR19TQ0FMQUJMRVxubmV0L2lwdjQvS2NvbmZpZy01NzQtXHR0cmlzdGF0ZSBcJiMzNDtTY2FsYWJsZSBUQ1BcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTU4MS1cbm5ldC9pcHY0L0tjb25maWc6NTgyOmNvbmZpZyBUQ1BfQ09OR19MUFxubmV0L2lwdjQvS2NvbmZpZy01ODMtXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgTG93IFByaW9yaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy01OTAtXG5uZXQvaXB2NC9LY29uZmlnOjU5MTpjb25maWcgVENQX0NPTkdfVkVOT1xubmV0L2lwdjQvS2NvbmZpZy01OTItXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgVmVub1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNjAxLVxubmV0L2lwdjQvS2NvbmZpZzo2MDI6Y29uZmlnIFRDUF9DT05HX1lFQUhcbm5ldC9pcHY0L0tjb25maWctNjAzLVx0dHJpc3RhdGUgXCYjMzQ7WWVBSCBUQ1BcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTYxNS1cbm5ldC9pcHY0L0tjb25maWc6NjE2OmNvbmZpZyBUQ1BfQ09OR19JTExJTk9JU1xubmV0L2lwdjQvS2NvbmZpZy02MTctXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgSWxsaW5vaXNcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTYyNy1cbm5ldC9pcHY0L0tjb25maWc6NjI4OmNvbmZpZyBUQ1BfQ09OR19EQ1RDUFxubmV0L2lwdjQvS2NvbmZpZy02MjktXHR0cmlzdGF0ZSBcJiMzNDtEYXRhQ2VudGVyIFRDUCAoRENUQ1ApXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy02NDgtXG5uZXQvaXB2NC9LY29uZmlnOjY0OTpjb25maWcgVENQX0NPTkdfQ0RHXG5uZXQvaXB2NC9LY29uZmlnLTY1MC1cdHRyaXN0YXRlIFwmIzM0O0NBSUEgRGVsYXktR3JhZGllbnQgKENERylcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTY2NS1cbm5ldC9pcHY0L0tjb25maWc6NjY2OmNvbmZpZyBUQ1BfQ09OR19CQlJcbm5ldC9pcHY0L0tjb25maWctNjY3LVx0dHJpc3RhdGUgXCYjMzQ7QkJSIFRDUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NzIyPWVuZGlmXG5uZXQvaXB2NC9LY29uZmlnLTcyMy1cbm5ldC9pcHY0L0tjb25maWc6NzI0OmNvbmZpZyBUQ1BfQ09OR19DVUJJQ1xubmV0L2lwdjQvS2NvbmZpZy03MjUtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXG4tLVxubmV0L2lwdjQvS2NvbmZpZy03NDMtXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXG5uZXQvaXB2NC9LY29uZmlnLTc0NS1cdGJvb2wgXCYjMzQ7VENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy03NTgtXG5uZXQvaXB2NC9LY29uZmlnOjc1OTpjb25maWcgVENQX01ENVNJR1xubmV0L2lwdjQvS2NvbmZpZy03NjAtXHRib29sIFwmIzM0O1RDUDogTUQ1IFNpZ25hdHVyZSBPcHRpb24gc3VwcG9ydCAoUkZDMjM4NSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNDUKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgdGNwX2Zhc3RvcGVuLmNgIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHRjcF9mYXN0b3Blbi5jYCwgSSBzZWUgaXQmIzM5O3MgaW5jbHVkZWQgaW4gdGhlIGBvYmoteWAgbGlzdCBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgSVB2NCBuZXR3b3JraW5nIHN0YWNrLiBBbmQgdGhlIGZhY3QgdGhhdCBNUFRDUCBoYXMgYSBkZXBlbmRlbmN5IG9uIElORVQgaXMgYWxzbyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBtZWFucyB0aGF0IHRoZSB0d28gKnJlYWxseSogcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUgYXJlIGBJTkVUYCBhbmQgYE1QVENQYC4gVGhvc2UgYXJlIHRoZSB0aGluZ3MgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBhcyBJIGV2YWx1YXRlIHRoaXMuCgpMZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgY29ycmVjdGx5LiBUaGlzIGlzIHdvcnRoIGZ1enppbmcsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBgSU5FVGAgYW5kIGBNUFRDUGAsIHNvIHRoYXQgYWxpZ25zIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qtb247IGB0Y3BfY29ubl9yZXF1ZXN0YCwgYHRjcF90cnlfZmFzdG9wZW5gLCBhbmQgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGFyZSBhbGwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgRmFzdCBPcGVuLCB3aGljaCB0aGlzIHBhdGNoIGNsZWFybHkgYWltcyB0byBtb2RpZnkuCgpUaGUgcmVhc29uaW5nIHNlY3Rpb24gbWFrZXMgaXQgZXZlbiBjbGVhcmVyOiB0aGUgcGF0Y2ggbW9kaWZpZXMgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGFuZCBGYXN0IE9wZW4gY2hpbGQgY3JlYXRpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBNUFRDUCByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyAoYHJza19kcm9wX3JlcWApLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHRvdWNoaW5nIGZ1bmRhbWVudGFsIGNvZGUgcGF0aHMgdGhhdCBoYW5kbGUgaW5jb21pbmcgU1lOIHBhY2tldHMsIGFuZCBGYXN0IE9wZW4gY29ubmVjdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIE1QVENQIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBleHBvc2VkIHRvIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW5jcmVhc2VkIGNvbXBsZXhpdHkgb2YgTVBUQ1AuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCBhbmQgaWYgYW55IG5ldyBlZGdlIGNhc2VzIGFyZSBjcmVhdGVkLiBUaW1lIHRvIHJ1biBhIHF1aWNrIGBzZXQtcmVzdWx0c2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9jb25uX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7dGNwX3RyeV9mYXN0b3BlbiYjMzQ7LAogICAgJiMzNDt0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVENQL01QVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBoYW5kbGluZyBpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyBhbmQgVENQIEZhc3QgT3BlbiBjaGlsZCBjcmVhdGlvbiBpbiBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgd2hlbiBNUFRDUCBzdWJmbG93cyBhcmUgcmVqZWN0ZWQgb3IgZHJvcHBlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIFRDUCBoYW5kc2hha2UgYW5kIEZhc3QgT3BlbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF90cnlfZmFzdG9wZW4mIzM0OywKICAgICYjMzQ7dGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUC9NUFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgYW5kIFRDUCBGYXN0IE9wZW4gY2hpbGQgY3JlYXRpb24gaW4gbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMgdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGRyb3BwaW5nIHdoZW4gTVBUQ1Agc3ViZmxvd3MgYXJlIHJlamVjdGVkIG9yIGRyb3BwZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBUQ1AgaGFuZHNoYWtlIGFuZCBGYXN0IE9wZW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNsZWFudXAgcGF0aHMgZm9yIE1QVENQIGFuZCBUQ1AgRmFzdCBPcGVuLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGB0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSBmYWxzZWAgZHVyaW5nIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgYW5kIGNoZWNrcyBgcnNrX2Ryb3BfcmVxKHJlcSlgIGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKClgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHNvY2sgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHdoZW4gYSByZXF1ZXN0IGlzIGRyb3BwZWQuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOiBUaGUgZmllbGQgYGRyb3BfcmVxYCBpbiBgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB3aGVuIHRoZSByZXF1ZXN0X3NvY2sgaXMgY3JlYXRlZCwgZW5zdXJpbmcgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuIEluZm8tbGVhayAvIFVzZXItc3BhY2UgY29weSBBbmFseXNpczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBvcHRpb24gYnVmZmVycyBtb2RpZmllZC5cbjMuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcsIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBtZW1vcnkgZnJlZWluZyAocG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyksIHdoaWNoIGFyZSB0aG9yb3VnaGx5IG1vbml0b3JlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQga2VybmVsIHJlZmVyZW5jZSBjb3VudGVycy4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJiOGExNWVlOGIyZTQ5NGQ3ZjJmODQ2YTVmOGU4NTdkNDM5NjcwYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTY6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCmluZGV4IDQ3MWM3OGJlNTUxMzcuLjIyNDk0ZmY3NDZjNzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCkBAIC0zMzcsNiAmIzQzOzMzNywxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLAogCWlmICghY2hpbGQpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChvd25fcmVxICZhbXA7JmFtcDsgcnNrX2Ryb3BfcmVxKHJlcSkpIHsKJiM0MzsJCWJoX3VubG9ja19zb2NrKGNoaWxkKTsKJiM0MzsJCXNvY2tfcHV0KGNoaWxkKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJc3Bpbl9sb2NrKCZhbXA7cXVldWUtJmd0O2Zhc3RvcGVucS5sb2NrKTsKIAlxdWV1ZS0mZ3Q7ZmFzdG9wZW5xLnFsZW4mIzQzOyYjNDM7OwogCXNwaW5fdW5sb2NrKCZhbXA7cXVldWUtJmd0O2Zhc3RvcGVucS5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMGY2MGExZGJmOTI3NC4uZWIwZTQyNTljMjgwNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTc2NjksNiAmIzQzOzc2NjksNyBAQCBpbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcywKIAl0Y3BfcnNrKHJlcSktJmd0O3R4aGFzaCA9IG5ldF90eF9ybmRoYXNoKCk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApCiAJdGNwX3JzayhyZXEpLSZndDtpc19tcHRjcCA9IDA7CiYjNDM7CXRjcF9yc2socmVxKS0mZ3Q7ZHJvcF9yZXEgPSBmYWxzZTsKICNlbmRpZgogCiAJdGNwX2NsZWFyX29wdGlvbnMoJmFtcDt0bXBfb3B0KTsKQEAgLTc3NzUsNiAmIzQzOzc3NzYsMTAgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsCiAJCVJFQURfT05DRShzay0mZ3Q7c2tfZGF0YV9yZWFkeSkoc2spOwogCQliaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7CiAJCXNvY2tfcHV0KGZhc3RvcGVuX3NrKTsKJiM0MzsJfSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkgewomIzQzOwkJcmVxc2tfZnJlZShyZXEpOwomIzQzOwkJZHN0X3JlbGVhc2UoZHN0KTsKJiM0MzsJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCXRjcF9yc2socmVxKS0mZ3Q7dGZvX2xpc3RlbmVyID0gZmFsc2U7CiAJCWlmICghd2FudF9jb29raWUgJmFtcDsmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwYXRjaDoKCioqQW5hbHl6aW5nIHRoZSBQYXRjaDogSWRlbnRpZnlpbmcgYHJza19kcm9wX3JlcWAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBtb3ZlIHdvdWxkIGJlIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgYHJza19kcm9wX3JlcWAuIEZpcnN0LCBhIHF1aWNrIGBncmVwYCBmb3IgdGhhdCBzdHJpbmcgd2l0aGluIHRoZSBwYXRjaCBpdHNlbGYsIGFuZCB0aGVuIGV4cGFuZGluZyB0aGUgc2VhcmNoIGJleW9uZCwgaWYgbmVjZXNzYXJ5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQgYHJza19kcm9wX3JlcWAgKmlzKi4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBJcyBpdCBhIGZ1bmN0aW9uLCBhIG1hY3JvLCBhIHZhcmlhYmxlPyBBbmQganVzdCBhcyBpbXBvcnRhbnRseSwgd2hlcmUgYW5kIGhvdyBpcyBpdCAqdXNlZCogd2l0aGluIHRoZSBleGlzdGluZyBjb2RlYmFzZT8gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgcGF0dGVybnMgd2lsbCBnaXZlIHRoZSBtb3N0IGltbWVkaWF0ZSBjb250ZXh0LiBBbHNvLCBpdCBtYXkgYmUgdGhlIGludGVudGlvbiBvZiB0aGUgcGF0Y2ggdG8gaW50cm9kdWNlIGEgYGRyb3BfcmVxYCBhbmQgcGVyaGFwcyBgcnNrX2Ryb3BfcmVxYCBpcyBhIHJlbmFtZSBvciBhbGlhcy4gSSBzaG91bGQgaWRlbnRpZnkgaG93IGBkcm9wX3JlcWAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgZGVmaW5pdGlvbnMgYW5kIGNhbGwgc2l0ZXMgaXMgdGhlIGtleSB0byBhc3Nlc3NpbmcgaW1wYWN0IGFuZCByaXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2tfZHJvcF9yZXEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaD0xMzc9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDEtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE0MjpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTQzLXtcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI0NT1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI0OS1cbmluY2x1ZGUvbmV0L21wdGNwLmg6MjUwOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNTEte1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTAtXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjExOlx0XHRpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTItXHRcdFx0cmVxc2tfcHV0KHJlcSk7XG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MzI2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzM5LVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6MzQwOlx0aWYgKG93bl9yZXEgXHUwMDI2XHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zNDEtXHRcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NzgtXHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3Nzk6XHR9IGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVx0XHRyZXFza19mcmVlKHJlcSk7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5NDM6XHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy05NDQtXHRcdHJlcXNrX3F1ZXVlX3JlbW92ZWQoXHUwMDI2aW5ldF9jc2socmVxLVx1MDAzZXJza19saXN0ZW5lciktXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Ryb3BfcmVxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmM9OTQ9aW50IGJuZ2Vfc2VuZF9tc2coc3RydWN0IGJuZ2VfYXV4cl9kZXYgKmF1eHJfZGV2LCBzdHJ1Y3QgYm5nZV9md19tc2cgKmZ3X21zZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jLTEwNy1cdGlmIChyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmM6MTA4Olx0XHRnb3RvIGRyb3BfcmVxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMTktXHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jOjEyMDpkcm9wX3JlcTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmMtMTIxLVx0Ym5nZV9od3JtX3JlcV9kcm9wKGJkLCByZXEpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jPTE1MjM9aW50IGJuZ2VfaHdybV9wb3J0X3FzdGF0c19leHQoc3RydWN0IGJuZ2VfZGV2ICpiZCwgdTggZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTU5Ny1cdFx0XHRcdHJjID0gLUVJTlZBTDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE1OTg6XHRcdFx0XHRnb3RvIGRyb3BfcmVxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTU5OS1cdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTYwNi1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE2MDc6ZHJvcF9yZXE6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYy0xNjA4LVx0Ym5nZV9od3JtX3JlcV9kcm9wKGJkLCByZXFfcWMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jPTQ2PXN0YXRpYyBpbnQgYm54dF9od3JtX3RlbXBfcXVlcnkoc3RydWN0IGJueHQgKmJwLCB1OCAqdGVtcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01Ny1cdGlmIChyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jOjU4Olx0XHRnb3RvIGRyb3BfcmVxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmMtNTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmMtNjktXHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYzo3MDpkcm9wX3JlcTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTcxLVx0aHdybV9yZXFfZHJvcChicCwgcmVxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9MjM2PWludCBibnh0X3NlbmRfbXNnKHN0cnVjdCBibnh0X2VuX2RldiAqZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjU0LVx0aWYgKHJjKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjI1NTpcdFx0Z290byBkcm9wX3JlcTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy0yNTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI2Ni1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzoyNjc6ZHJvcF9yZXE6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjY4LVx0aHdybV9yZXFfZHJvcChicCwgcmVxKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTExMDY9c3RhdGljIGludCBmX21pZGkyX3N0YXJ0X2VwKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTEyMS0vKiBEcm9wIHBlbmRpbmcgcmVxdWVzdHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTEyMjpzdGF0aWMgdm9pZCBmX21pZGkyX2Ryb3BfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTEyMy17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjA0PXN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwNS17XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDY6XHRmX21pZGkyX2Ryb3BfcmVxcyh1c2JfZXApO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA3LVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTI0MD1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQyLXtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0MzpcdGZfbWlkaTJfZHJvcF9yZXFzKGVwX2luKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcdGZfbWlkaTJfZHJvcF9yZXFzKGVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDUtXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyhlcF9pbik7XG4tLVxuaW5jbHVkZS9saW51eC90Y3AuaD0xNTA9c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sge1xuLS1cbmluY2x1ZGUvbGludXgvdGNwLmgtMTU3LSNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcbmluY2x1ZGUvbGludXgvdGNwLmg6MTU4Olx0Ym9vbFx0XHRcdFx0ZHJvcF9yZXE7XG5pbmNsdWRlL2xpbnV4L3RjcC5oLTE1OS0jZW5kaWZcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTEzNz1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0MS1cbmluY2x1ZGUvbmV0L21wdGNwLmg6MTQyOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDMte1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNDQ6XHRyZXR1cm4gdGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwIFx1MDAyNlx1MDAyNiB0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXE7XG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0NS19XG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0yNDU9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNDktXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI1MDpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjUxLXtcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MTk3PXN0cnVjdCBzb2NrICp0Y3BfZ2V0X2Nvb2tpZV9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjEwLVxubmV0L2lwdjQvc3luY29va2llcy5jOjIxMTpcdFx0aWYgKHJza19kcm9wX3JlcShyZXEpKSB7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjEyLVx0XHRcdHJlcXNrX3B1dChyZXEpO1xuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTMyNj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMzOS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjM0MDpcdGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzQxLVx0XHRiaF91bmxvY2tfc29jayhjaGlsZCk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0MjItXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDIzOnN0YXRpYyBpbmxpbmUgdm9pZCBwcl9kcm9wX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIF9fdTE2IHBvcnQsIGludCBmYW1pbHkpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDI0LXtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NzEtXHR0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgPSAwO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzY3MjpcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY3My0jZW5kaWZcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzMwLVx0XHRcdCAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzczMTpcdFx0XHRwcl9kcm9wX3JlcShyZXEsIG50b2hzKHRjcF9oZHIoc2tiKS1cdTAwM2Vzb3VyY2UpLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczMi1cdFx0XHRcdCAgICByc2tfb3BzLVx1MDAzZWZhbWlseSk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc3OC1cdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc3OTpcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3ODAtXHRcdHJlcXNrX2ZyZWUocmVxKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTQyLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjk0MzpcdGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cdFx0cmVxc2tfcXVldWVfcmVtb3ZlZChcdTAwMjZpbmV0X2NzayhyZXEtXHUwMDNlcnNrX2xpc3RlbmVyKS1cdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZSwgcmVxKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgwND1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy04NjItXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg2MzpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg2NC1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTk0OC1cdFx0XHRTVUJGTE9XX1JFUV9JTkNfU1RBVFMocmVxLCBNUFRDUF9NSUJfSk9JTkFDS1JYKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6OTQ5Olx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IHRydWU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTk1MC1cdFx0fVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtOTYyLVx0bXB0Y3Bfc3ViZmxvd19kcm9wX2N0eChjaGlsZCk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjk2MzpcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IHRydWU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTk2NC1cdGluZXRfY3NrX3ByZXBhcmVfZm9yX2Rlc3Ryb3lfc29jayhjaGlsZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODcKCQkJCQkJCW91dHB1dDogNzIKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBhbmQgTVBUQ1AgS2VybmVsIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIFRDUCBhbmQgTVBUQ1AgaW1wbGVtZW50YXRpb25zLiBJJiMzOTttIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIGlzIHdpdGggYGluY2x1ZGUvbGludXgvdGNwLmhgLCBhcm91bmQgbGluZSAxNTAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgY29yZSBUQ1AgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYXliZSBzb21lIGtleSBmdW5jdGlvbiBwcm90b3R5cGVzLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgYW5kIGluc3BlY3QgYGluY2x1ZGUvbmV0L21wdGNwLmhgIGFyb3VuZCBsaW5lIDEzNy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBNUFRDUC1zcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBwb3NzaWJseSBzb21lIGNvcmUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBtdWx0aXBhdGggVENQIGNvbm5lY3Rpb25zIHRoZXJlLgoKVGhlbiwgSSYjMzk7bGwgc3dpdGNoIG92ZXIgdG8gdGhlIGltcGxlbWVudGF0aW9ucywgc28gSSBuZWVkIHRvIGNoZWNrIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEkga25vdyB0aGF0JiMzOTtzIHdoZXJlIGEgbG90IG9mIHRoZSBpbmNvbWluZyBUQ1AgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgcmVzaWRlcy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoaW5ncyBsaWtlIHNlZ21lbnQgcmVhc3NlbWJseSwgQUNLIHByb2Nlc3NpbmcsIGFuZCBjb25nZXN0aW9uIGNvbnRyb2wgdGhlcmUuIEFuZCBzaW5jZSBJJiMzOTttIGludGVyZXN0ZWQgaW4gVENQIEZhc3QgT3BlbiwgSSBzaG91bGQgYWxzbyBsb29rIGF0IGBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY2AuIEkgZXhwZWN0IHRoZXJlJiMzOTtsbCBiZSB0aGUgY29kZSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBmYXN0IG9wZW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBkYXRhIHRyYW5zZmVyLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgaGVhZGVyIGZpbGVzIHdpdGggdGhlc2UgaW1wbGVtZW50YXRpb24gZmlsZXMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NTpcdCAqIG9ubHkgZm91ciBvcHRpb25zIHdpbGwgZml0IGluIGEgc3RhbmRhcmQgVENQIGhlYWRlciAqL1xuIDE0NjpcdCNkZWZpbmUgVENQX05VTV9TQUNLUyA0XG4gMTQ3Olx0XG4gMTQ4Olx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzO1xuIDE0OTpcdFxuIDE1MDpcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrIHtcbiAxNTE6XHRcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayBcdHJlcTtcbiAxNTI6XHRcdGNvbnN0IHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrX29wcyAqYWZfc3BlY2lmaWM7XG4gMTUzOlx0XHR1NjRcdFx0XHRcdHNudF9zeW5hY2s7IC8qIGZpcnN0IFNZTkFDSyBzZW50IHRpbWUgKi9cbiAxNTQ6XHRcdGJvb2xcdFx0XHRcdHRmb19saXN0ZW5lcjtcbiAxNTU6XHRcdGJvb2xcdFx0XHRcdGlzX21wdGNwO1xuIDE1NjpcdFx0Ym9vbFx0XHRcdFx0cmVxX3VzZWNfdHM7XG4gMTU3Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuIDE1ODpcdFx0Ym9vbFx0XHRcdFx0ZHJvcF9yZXE7XG4gMTU5Olx0I2VuZGlmXG4gMTYwOlx0XHR1MzJcdFx0XHRcdHR4aGFzaDtcbiAxNjE6XHRcdHUzMlx0XHRcdFx0cmN2X2lzbjtcbiAxNjI6XHRcdHUzMlx0XHRcdFx0c250X2lzbjtcbiAxNjM6XHRcdHUzMlx0XHRcdFx0dHNfb2ZmO1xuIDE2NDpcdFx0dTMyXHRcdFx0XHRzbnRfdHN2YWxfZmlyc3Q7XG4gMTY1Olx0XHR1MzJcdFx0XHRcdHNudF90c3ZhbF9sYXN0O1xuIDE2NjpcdFx0dTMyXHRcdFx0XHRsYXN0X29vd19hY2tfdGltZTsgLyogbGFzdCBTWU5BQ0sgKi9cbiAxNjc6XHRcdHUzMlx0XHRcdFx0cmN2X254dDsgLyogdGhlIGFjayAjIGJ5IFNZTkFDSy4gRm9yXG4gMTY4Olx0XHRcdFx0XHRcdFx0ICAqIEZhc3RPcGVuIGl0JiMzOTtzIHRoZSBzZXEjXG4gMTY5Olx0XHRcdFx0XHRcdFx0ICAqIGFmdGVyIGRhdGEtaW4tU1lOLlxuIDE3MDpcdFx0XHRcdFx0XHRcdCAgKi9cbiAxNzE6XHRcdHU4XHRcdFx0XHRzeW5fdG9zO1xuIDE3MjpcdFx0Ym9vbFx0XHRcdFx0YWNjZWNuX29rO1xuIDE3MzpcdFx0dThcdFx0XHRcdHN5bl9lY3Rfc250OiAyLFxuIDE3NDpcdFx0XHRcdFx0XHRzeW5fZWN0X3JjdjogMixcbiAxNzU6XHRcdFx0XHRcdFx0YWNjZWNuX2ZhaWxfbW9kZTo0O1xuIDE3NjpcdFx0dThcdFx0XHRcdHNhd19hY2NlY25fb3B0ICA6MjtcbiAxNzc6XHQjaWZkZWYgQ09ORklHX1RDUF9BT1xuIDE3ODpcdFx0dThcdFx0XHRcdGFvX2tleWlkO1xuIDE3OTpcdFx0dThcdFx0XHRcdGFvX3Jjdl9uZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L21wdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAxMzg6XHR7XG4gMTM5Olx0XHRyZXR1cm4gdGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwO1xuIDE0MDpcdH1cbiAxNDE6XHRcbiAxNDI6XHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAxNDM6XHR7XG4gMTQ0Olx0XHRyZXR1cm4gdGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwIFx1MDAyNlx1MDAyNiB0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXE7XG4gMTQ1Olx0fVxuIDE0NjpcdFxuIDE0NzpcdHZvaWQgbXB0Y3Bfc3BhY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgaW50ICpzcGFjZSwgaW50ICpmdWxsX3NwYWNlKTtcbiAxNDg6XHRib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxNDk6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSwgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcbiAxNTA6XHRib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxuIDE1MTpcdFx0XHRcdCAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcbiAxNTI6XHRpbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gMTUzOlx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZywgYm9vbCBoYXNfdHMsXG4gMTU0Olx0XHRcdFx0ICAgICAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcbiAxNTU6XHRib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAxNTY6XHRcbiAxNTc6XHR2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuIDE1ODpcdFx0XHRcdCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuIDE1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODgyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgSGVhZGVyIERlZmluaXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5vbi1NUFRDUCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIE1QVENQIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbmV0L21wdGNwLmhgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyNDUuIEkga25vdyB0aG9zZSBkZWZpbml0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgaW50ZXJhY3RzIHdpdGggdGhlIE1QVENQIGxheWVyLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBsaW5lcyB1cCB3aXRoIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9tcHRjcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDI0MTpcdHtcbiAyNDI6XHRcdHJldHVybiBmYWxzZTtcbiAyNDM6XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gMjQ2Olx0e1xuIDI0NzpcdFx0cmV0dXJuIGZhbHNlO1xuIDI0ODpcdH1cbiAyNDk6XHRcbiAyNTA6XHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAyNTE6XHR7XG4gMjUyOlx0XHRyZXR1cm4gZmFsc2U7XG4gMjUzOlx0fVxuIDI1NDpcdFxuIDI1NTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtcHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMjU2Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCAqc2l6ZSxcbiAyNTc6XHRcdFx0XHRcdCAgICAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKVxuIDI1ODpcdHtcbiAyNTk6XHRcdHJldHVybiBmYWxzZTtcbiAyNjA6XHR9XG4gMjYxOlx0XG4gMjYyOlx0c3RhdGljIGlubGluZSBib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiAyNjM6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50ICpzaXplLFxuIDI2NDpcdFx0XHRcdFx0XHRzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjcKCQkJCQkJCW91dHB1dDogNzgKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBGYXN0IE9wZW4gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIFRDUCBGYXN0IE9wZW4gKFRGTykgYW5kIHN0YW5kYXJkIFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGFyb3VuZCBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIG5hdHVyYWxseS4gSSBzZWVtIHRvIHJlY2FsbCBzb21lIGtleSBsb2dpYyBiZWluZyBpbiBgdGNwX2Zhc3RvcGVuLmNgLCBhbmQgSSBiZWxpZXZlIHRoYXQgbGluZSAzMzcgaXMgYSBsaWtlbHkgYXJlYSB0byBzdGFydCwgbWF5YmUgbG9va2luZyBmb3IgdGhlIGtleSBmYXN0IG9wZW4gbG9naWMgaW4gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZy4gVGhlbiwgSSBzaG91bGQgaGVhZCBvdmVyIHRvIGB0Y3BfaW5wdXQuY2AuIEkgbmVlZCB0byBjb21wYXJlIGhvdyBub3JtYWwgVENQIGNvbm5lY3Rpb25zIGFyZSB0cmVhdGVkIGR1cmluZyBwcm9jZXNzaW5nLCBjb21wYXJlZCB0byBob3cgVEZPIG1pZ2h0IGJlIGhhbmRsZWQuIEkgZmlndXJlIHRoYXQgbGluZSA3NjY5IGluIGB0Y3BfaW5wdXQuY2AgaXMgcHJvYmFibHkgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gdGhlcmUuIFRoZXNlIHR3byBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIGNvbm5lY3Rpb24gc2V0dXAgcHJvY2VzcywgYW5kIHRoZSBkaWZmZXJlbmNlcyB3aGVuIFRGTyBpcyBpbiBwbGF5LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdH1cbiAzMjE6XHRvdXQ6XG4gMzIyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMjM6XHRcdHJldHVybiByZXQ7XG4gMzI0Olx0fVxuIDMyNTpcdFxuIDMyNjpcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4gMzI3Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gMzI4Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAzMjk6XHR7XG4gMzMwOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwO1xuIDMzMTpcdFx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcdTAwMjZpbmV0X2NzayhzayktXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XG4gMzMyOlx0XHRzdHJ1Y3Qgc29jayAqY2hpbGQ7XG4gMzMzOlx0XHRib29sIG93bl9yZXE7XG4gMzM0Olx0XG4gMzM1Olx0XHRjaGlsZCA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgTlVMTCxcbiAzMzY6XHRcdFx0XHRcdFx0XHRcdCBOVUxMLCBcdTAwMjZvd25fcmVxLCBOVUxMKTtcbiAzMzc6XHRcdGlmICghY2hpbGQpXG4gMzM4Olx0XHRcdHJldHVybiBOVUxMO1xuIDMzOTpcdFxuIDM0MDpcdFx0aWYgKG93bl9yZXEgXHUwMDI2XHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XG4gMzQxOlx0XHRcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcbiAzNDI6XHRcdFx0c29ja19wdXQoY2hpbGQpO1xuIDM0MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdHNwaW5fbG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4gMzQ3Olx0XHRxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucWxlbiYjNDM7JiM0Mzs7XG4gMzQ4Olx0XHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4gMzQ5Olx0XG4gMzUwOlx0XHQvKiBJbml0aWFsaXplIHRoZSBjaGlsZCBzb2NrZXQuIEhhdmUgdG8gZml4IHNvbWUgdmFsdWVzIHRvIHRha2VcbiAzNTE6XHRcdCAqIGludG8gYWNjb3VudCB0aGUgY2hpbGQgaXMgYSBGYXN0IE9wZW4gc29ja2V0IGFuZCBpcyBjcmVhdGVkXG4gMzUyOlx0XHQgKiBvbmx5IG91dCBvZiB0aGUgYml0cyBjYXJyaWVkIGluIHRoZSBTWU4gcGFja2V0LlxuIDM1MzpcdFx0ICovXG4gMzU0Olx0XHR0cCA9IHRjcF9zayhjaGlsZCk7XG4gMzU1Olx0XG4gMzU2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHAtXHUwMDNlZmFzdG9wZW5fcnNrLCByZXEpO1xuIDM1NzpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXRmb19saXN0ZW5lciA9IHRydWU7XG4gMzU4Olx0XG4gMzU5Olx0XHQvKiBSRkMxMzIzOiBUaGUgd2luZG93IGluIFNZTiBcdTAwMjYgU1lOL0FDSyBzZWdtZW50cyBpcyBuZXZlclxuIDM2MDpcdFx0ICogc2NhbGVkLiBTbyBjb3JyZWN0IGl0IGFwcHJvcHJpYXRlbHkuXG4gMzYxOlx0XHQgKi9cbiAzNjI6XHRcdHRwLVx1MDAzZXNuZF93bmQgPSBudG9ocyh0Y3BfaGRyKHNrYiktXHUwMDNld2luZG93KTtcbiAzNjM6XHRcdHRwLVx1MDAzZW1heF93aW5kb3cgPSB0cC1cdTAwM2VzbmRfd25kO1xuIDM2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NjYwOlx0XG43NjYxOlx0XHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKHJza19vcHMsIHNrLCAhd2FudF9jb29raWUpO1xuNzY2MjpcdFx0aWYgKCFyZXEpXG43NjYzOlx0XHRcdGdvdG8gZHJvcDtcbjc2NjQ6XHRcbjc2NjU6XHRcdHJlcS1cdTAwM2VzeW5jb29raWUgPSB3YW50X2Nvb2tpZTtcbjc2NjY6XHRcdHRjcF9yc2socmVxKS1cdTAwM2VhZl9zcGVjaWZpYyA9IGFmX29wcztcbjc2Njc6XHRcdHRjcF9yc2socmVxKS1cdTAwM2V0c19vZmYgPSAwO1xuNzY2ODpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXJlcV91c2VjX3RzID0gZmFsc2U7XG43NjY5Olx0XHR0Y3BfcnNrKHJlcSktXHUwMDNldHhoYXNoID0gbmV0X3R4X3JuZGhhc2goKTtcbjc2NzA6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG43NjcxOlx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgPSAwO1xuNzY3MjpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XG43NjczOlx0I2VuZGlmXG43Njc0Olx0XG43Njc1Olx0XHR0Y3BfY2xlYXJfb3B0aW9ucyhcdTAwMjZ0bXBfb3B0KTtcbjc2NzY6XHRcdHRtcF9vcHQubXNzX2NsYW1wID0gYWZfb3BzLVx1MDAzZW1zc19jbGFtcDtcbjc2Nzc6XHRcdHRtcF9vcHQudXNlcl9tc3MgID0gUkVBRF9PTkNFKHRwLVx1MDAzZXJ4X29wdC51c2VyX21zcyk7XG43Njc4Olx0XHR0Y3BfcGFyc2Vfb3B0aW9ucyhzb2NrX25ldChzayksIHNrYiwgXHUwMDI2dG1wX29wdCwgMCxcbjc2Nzk6XHRcdFx0XHQgIHdhbnRfY29va2llID8gTlVMTCA6IFx1MDAyNmZvYyk7XG43NjgwOlx0XG43NjgxOlx0XHRpZiAod2FudF9jb29raWUgXHUwMDI2XHUwMDI2ICF0bXBfb3B0LnNhd190c3RhbXApXG43NjgyOlx0XHRcdHRjcF9jbGVhcl9vcHRpb25zKFx1MDAyNnRtcF9vcHQpO1xuNzY4MzpcdFxuNzY4NDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NNQykgXHUwMDI2XHUwMDI2IHdhbnRfY29va2llKVxuNzY4NTpcdFx0XHR0bXBfb3B0LnNtY19vayA9IDA7XG43Njg2Olx0XG43Njg3Olx0XHR0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDtcbjc2ODg6XHRcdHRjcF9vcGVucmVxX2luaXQocmVxLCBcdTAwMjZ0bXBfb3B0LCBza2IsIHNrKTtcbjc2ODk6XHRcdGluZXRfcnNrKHJlcSktXHUwMDNlbm9fc3JjY2hlY2sgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XG43NjkwOlx0XG43NjkxOlx0XHQvKiBOb3RlOiB0Y3BfdjZfaW5pdF9yZXEoKSBtaWdodCBvdmVycmlkZSBpcl9paWYgZm9yIGxpbmsgbG9jYWxzICovXG43NjkyOlx0XHRpbmV0X3JzayhyZXEpLVx1MDAzZWlyX2lpZiA9IGluZXRfcmVxdWVzdF9ib3VuZF9kZXZfaWYoc2ssIHNrYik7XG43NjkzOlx0XG43Njk0Olx0XHRpZiAod2FudF9jb29raWUpIHtcbjc2OTU6XHRcdFx0aXNuID0gY29va2llX2luaXRfc2VxdWVuY2UoYWZfb3BzLCBza2IsIFx1MDAyNnJlcS1cdTAwM2Vtc3MpO1xuNzY5NjpcdFx0XHQvKiBVc2UgdGhlIGNvb2tpZSBhcyB0eGhhc2ggc28gdGhlIFNZTi1BQ0sgYW5kIHRoZSBsYXRlciBmdWxsXG43Njk3Olx0XHRcdCAqIHNvY2tldCBtYWtlIHRoZSBzYW1lIGVncmVzcyBjaG9pY2UgKElQdjYgRUNNUCBwYXRoOyBJUHY0IFRYIHF1ZXVlKS5cbjc2OTg6XHRcdFx0ICovXG43Njk5Olx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2V0eGhhc2ggPSBpc247XG43NzAwOlx0XHR9XG43NzAxOlx0XG43NzAyOlx0XHRkc3QgPSBhZl9vcHMtXHUwMDNlcm91dGVfcmVxKHNrLCBza2IsIFx1MDAyNmZsLCByZXEsIHdhbnRfY29va2llID8gMCA6IGlzbik7XG43NzAzOlx0XHRpZiAoIWRzdClcbjc3MDQ6XHRcdFx0Z290byBkcm9wX2FuZF9mcmVlO1xuNzcwNTpcdFxuNzcwNjpcdFx0aWYgKHRtcF9vcHQudHN0YW1wX29rIHx8ICghd2FudF9jb29raWUgXHUwMDI2XHUwMDI2ICFpc24pKVxuNzcwNzpcdFx0XHRzdCA9IElORElSRUNUX0NBTExfSU5FVChhZl9vcHMtXHUwMDNlaW5pdF9zZXFfYW5kX3RzX29mZixcbjc3MDg6XHRcdFx0XHRcdFx0dGNwX3Y2X2luaXRfc2VxX2FuZF90c19vZmYsXG43NzA5Olx0XHRcdFx0XHRcdHRjcF92NF9pbml0X3NlcV9hbmRfdHNfb2ZmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQgSSB3b3VsZCBiZSB0aGlua2luZywgZm9jdXNpbmcgb24gbGluZXMgNzc2NS03ODAwIG9mIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBUQ1AgSW5wdXQgSGFuZGxlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRob3NlIGxpbmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiBsaW5lcyA3NzY1LTc4MDAgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgVENQIGlucHV0IHByb2Nlc3NpbmcsIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBiZSBoYW5kbGluZyBhIGNyaXRpY2FsIGFzcGVjdCwgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgaW5jb21pbmcgVENQIHNlZ21lbnRzIGFyZSBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IGludGVncmF0ZWQgaW50byB0aGUgY29ubmVjdGlvbiYjMzk7cyBzdGF0ZS4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgbG9naWMgcmVsYXRlZCB0byByZWFzc2VtYmx5LCBhY2tub3dsZWRnZW1lbnQgaGFuZGxpbmcsIHdpbmRvdyBtYW5hZ2VtZW50LCBvciBwZXJoYXBzIGV2ZW4gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSB3aXRoaW4gdGhlIHJlY2VpdmluZyBUQ1Agc3RhY2suIFRoZSBjb2RlIGhlcmUgaXMgdGhlIGhlYXJ0IG9mIHJlbGlhYmxlIGRhdGEgdHJhbnNmZXIuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBjb2RlIGlzIGRvaW5nIGFueXRoaW5nIHVudXN1YWwsIG9yIG1heWJlIHNvbWV0aGluZyBJIGhhdmUgYmVlbiBxdWVzdGlvbmluZyBpbiBteSBvd24gaW1wbGVtZW50YXRpb24gZm9yIGEgd2hpbGUuIElzIHRoZXJlIGFueXRoaW5nIHBhcnRpY3VsYXJseSBpbmVmZmljaWVudCwgb3IgY2xldmVyPyBJdCYjMzk7cyBoaWdobHkgcHJvYmFibGUgdGhlIGNvZGUgbWFuYWdlcyBidWZmZXIgYWxsb2NhdGlvbnMgdG8gbWluaW1pemUgdW5uZWNlc3NhcnkgbWVtb3J5IGNvcGllcywgYW5kIG1hbmFnZXMgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZSBjaGFsbGVuZ2UgaXMgaW4gdGhlIGRldGFpbHMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2FyZWZ1bGx5IGF0IGhvdyB0aGlzIGNvZGUgc25pcHBldCB0YWNrbGVzIFRDUCYjMzk7cyBpbmhlcmVudCBjb21wbGV4aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NzY1Olx0XHRcdGZhc3RvcGVuX3NrID0gdGNwX3RyeV9mYXN0b3Blbihzaywgc2tiLCByZXEsIFx1MDAyNmZvYywgZHN0KTtcbjc3NjY6XHRcdH1cbjc3Njc6XHRcdGlmIChmYXN0b3Blbl9zaykge1xuNzc2ODpcdFx0XHRhZl9vcHMtXHUwMDNlc2VuZF9zeW5hY2soZmFzdG9wZW5fc2ssIGRzdCwgXHUwMDI2ZmwsIHJlcSxcbjc3Njk6XHRcdFx0XHRcdCAgICBcdTAwMjZmb2MsIFRDUF9TWU5BQ0tfRkFTVE9QRU4sIHNrYik7XG43NzcwOlx0XHRcdC8qIEFkZCB0aGUgY2hpbGQgc29ja2V0IGRpcmVjdGx5IGludG8gdGhlIGFjY2VwdCBxdWV1ZSAqL1xuNzc3MTpcdFx0XHRpZiAoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBmYXN0b3Blbl9zaykpIHtcbjc3NzI6XHRcdFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG43NzczOlx0XHRcdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xuNzc3NDpcdFx0XHRcdGdvdG8gZHJvcF9hbmRfZnJlZTtcbjc3NzU6XHRcdFx0fVxuNzc3NjpcdFx0XHRSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xuNzc3NzpcdFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG43Nzc4Olx0XHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbjc3Nzk6XHRcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbjc3ODA6XHRcdFx0cmVxc2tfZnJlZShyZXEpO1xuNzc4MTpcdFx0XHRkc3RfcmVsZWFzZShkc3QpO1xuNzc4MjpcdFx0XHRyZXR1cm4gMDtcbjc3ODM6XHRcdH0gZWxzZSB7XG43Nzg0Olx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIgPSBmYWxzZTtcbjc3ODU6XHRcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjZcbjc3ODY6XHRcdFx0ICAgIHVubGlrZWx5KCFpbmV0X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZChzaywgcmVxKSkpIHtcbjc3ODc6XHRcdFx0XHRyZXFza19mcmVlKHJlcSk7XG43Nzg4Olx0XHRcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbjc3ODk6XHRcdFx0XHRyZXR1cm4gMDtcbjc3OTA6XHRcdFx0fVxuNzc5MTpcdFx0XHRhZl9vcHMtXHUwMDNlc2VuZF9zeW5hY2soc2ssIGRzdCwgXHUwMDI2ZmwsIHJlcSwgXHUwMDI2Zm9jLFxuNzc5MjpcdFx0XHRcdFx0ICAgICF3YW50X2Nvb2tpZSA/IFRDUF9TWU5BQ0tfTk9STUFMIDpcbjc3OTM6XHRcdFx0XHRcdFx0XHQgICBUQ1BfU1lOQUNLX0NPT0tJRSxcbjc3OTQ6XHRcdFx0XHRcdCAgICBza2IpO1xuNzc5NTpcdFx0XHRpZiAod2FudF9jb29raWUpIHtcbjc3OTY6XHRcdFx0XHRyZXFza19mcmVlKHJlcSk7XG43Nzk3Olx0XHRcdFx0cmV0dXJuIDA7XG43Nzk4Olx0XHRcdH1cbjc3OTk6XHRcdH1cbjc4MDA6XHRcdHJlcXNrX3B1dChyZXEpO1xuNzgwMTpcdFx0cmV0dXJuIDA7XG43ODAyOlx0XG43ODAzOlx0ZHJvcF9hbmRfcmVsZWFzZTpcbjc4MDQ6XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzczCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIENvbm5lY3Rpb24gUmVxdWVzdCBGbG93KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtXaGF0IGV4YWN0bHkgaXMgdGhpcyBwYXRjaCB0cnlpbmcgdG8gYWNjb21wbGlzaD8mIzM0OyBJJiMzOTttIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgdGNwX2Nvbm5fcmVxdWVzdCgpYCBhbmQgc29tZSBpbml0aWFsaXphdGlvbiBvZiBgdGNwX3JzayhyZXEpLSZndDtkcm9wX3JlcSA9IGZhbHNlO2AuIFRoYXQgbWFrZXMgbWUgdGhpbmsgdGhpcyB2YXJpYWJsZSwgYGRyb3BfcmVxYCwgaXMgY3J1Y2lhbCB0byBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLiBJIGFsc28gc2VlIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGVjaywgYW4gYGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7IC4uLiB9YCwgbWVhbmluZyB0aGUgY29kZSBpcyBlaXRoZXIgYWNjZXB0aW5nIG9yIGRyb3BwaW5nIGEgcmVxdWVzdCBiYXNlZCBvbiB0aGF0IGZsYWcuIFNlZW1zIHByZXR0eSBmdW5kYW1lbnRhbC4KClRoZW4gSSBtb3ZlZCBvbnRvIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYC4gSGVyZSwgdGhlIGBkcm9wX3JlcWAgY2hlY2sgcmVhcHBlYXJzOiBgaWYgKG93bl9yZXEgJmFtcDsmYW1wOyByc2tfZHJvcF9yZXEocmVxKSkgeyAuLi4gfWAuIEl0JiMzOTtzIHVzZWQgdG8gYmFpbCBvdXQgb2YgY3JlYXRpbmcgYSBjaGlsZCBzb2NrZXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGUgYG93bl9yZXFgIGNvbmRpdGlvbiBsaWtlbHkgaXMgcmVsYXRlZCB0byBGYXN0IE9wZW4gb3IgYSBzaW1pbGFyIE1QVENQIGNvbnRleHQsIGFuZCBzdWdnZXN0cyB0aGF0IGBkcm9wX3JlcWAgaXMgdGhlIGZpbmFsIGRldGVybWluYW50IGZvciB3aGV0aGVyIGEgY2hpbGQgc29ja2V0IGlzIGFsbG9jYXRlZC4KClRoaXMgaXMgYSBnb29kIHBvaW50IHRvIHBhdXNlIGFuZCBpbnZlc3RpZ2F0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0YXRlcyBzdXJyb3VuZGluZyBgZHJvcF9yZXFgLiBSaWdodCBub3csIEkgc2VlIGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGZhbHNlLiBUaGUgY29uZGl0aW9uYWwgY2hlY2tzIEkgc2VlLCBzdWdnZXN0IGl0IGdldHMgc2V0IHRvIHRydWUsIGF0IHNvbWUgcG9pbnQsIGFuZCB0aGVuIHRoZSByZXF1ZXN0IGlzIGRyb3BwZWQuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBzZWFyY2ggZm9yIGl0cyB1c2FnZSwgaW4gdGhlIGNvZGUgYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgcnNrX2Ryb3BfcmVxKClgIGdldHMgc2V0IGFuZCB3aHkuIEdpdmVuIHRoZSBNUFRDUCBjb25uZWN0aW9uIGNvbnRleHQsIEkgd2lsbCBncmVwIHRoZSBtcHRjcCBkaXJlY3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODU1Olx0XG4gODU2Olx0Y3JlYXRlX2NoaWxkOlxuIDg1NzpcdFx0Y2hpbGQgPSBsaXN0ZW5lci1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxuIDg1ODpcdFx0XHRcdFx0XHRcdCAgICAgcmVxX3VuaGFzaCwgb3duX3JlcSwgb3B0X2NoaWxkX2luaXQpO1xuIDg1OTpcdFxuIDg2MDpcdFx0aWYgKGNoaWxkIFx1MDAyNlx1MDAyNiAqb3duX3JlcSkge1xuIDg2MTpcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChjaGlsZCk7XG4gODYyOlx0XG4gODYzOlx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xuIDg2NDpcdFxuIDg2NTpcdFx0XHQvKiB3ZSBuZWVkIHRvIGZhbGxiYWNrIG9uIGN0eCBhbGxvY2F0aW9uIGZhaWx1cmUgYW5kIG9uIHByZS1yZXFzXG4gODY2Olx0XHRcdCAqIGNoZWNraW5nIGFib3ZlLiBJbiB0aGUgbGF0dGVyIHNjZW5hcmlvIHdlIGFkZGl0aW9uYWxseSBuZWVkXG4gODY3Olx0XHRcdCAqIHRvIHJlc2V0IHRoZSBjb250ZXh0IHRvIG5vbiBNUFRDUCBzdGF0dXMuXG4gODY4Olx0XHRcdCAqL1xuIDg2OTpcdFx0XHRpZiAoIWN0eCB8fCBmYWxsYmFjaykge1xuIDg3MDpcdFx0XHRcdGlmIChmYWxsYmFja19pc19mYXRhbCkge1xuIDg3MTpcdFx0XHRcdFx0aWYgKCFjdHgpXG4gODcyOlx0XHRcdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG4gODczOlx0XHRcdFx0XHRcdFx0XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpO1xuIDg3NDpcdFx0XHRcdFx0ZWxzZVxuIDg3NTpcdFx0XHRcdFx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuIDg3NjpcdFx0XHRcdFx0XHRcdFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTtcbiA4Nzc6XHRcdFx0XHRcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApO1xuIDg3ODpcdFx0XHRcdFx0Z290byBkaXNwb3NlX2NoaWxkO1xuIDg3OTpcdFx0XHRcdH1cbiA4ODA6XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDg4MTpcdFx0XHR9XG4gODgyOlx0XG4gODgzOlx0XHRcdC8qIHNzayBpbmhlcml0cyBvcHRpb25zIG9mIGxpc3RlbmVyIHNrICovXG4gODg0Olx0XHRcdGN0eC1cdTAwM2VzZXRzb2Nrb3B0X3NlcSA9IGxpc3RlbmVyLVx1MDAzZXNldHNvY2tvcHRfc2VxO1xuIDg4NTpcdFxuIDg4NjpcdFx0XHRpZiAoY3R4LVx1MDAzZW1wX2NhcGFibGUpIHtcbiA4ODc6XHRcdFx0XHRjdHgtXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXHUwMDNlY29ubiwgXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcbiA4ODg6XHRcdFx0XHRpZiAoIWN0eC1cdTAwM2Vjb25uKVxuIDg4OTpcdFx0XHRcdFx0Z290byBmYWxsYmFjaztcbiA4OTA6XHRcbiA4OTE6XHRcdFx0XHRjdHgtXHUwMDNlc3ViZmxvd19pZCA9IDE7XG4gODkyOlx0XHRcdFx0b3duZXIgPSBtcHRjcF9zayhjdHgtXHUwMDNlY29ubik7XG4gODkzOlx0XG4gODk0Olx0XHRcdFx0aWYgKG1wX29wdC5kZW55X2pvaW5faWQwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU5MwoJCQkJCQkJb3V0cHV0OiAyNjMKCQkJCQkJCXRob3VnaHRzOiA5MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmVhc29uaW5nOiBEZXRlcm1pbmluZyB0aGUgTmVlZCBmb3IgYSBGdXp6aW5nIFNlc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWFpbiBjb25jZXJuIGhlcmUgaXMgbWFraW5nIHN1cmUgd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBob3cgTVBUQ1AgaGFuZGxlcyBGYXN0IE9wZW4gYW5kIGNvbm5lY3Rpb24gcmVxdWVzdHMsIHNwZWNpZmljYWxseSB3aGVuIGEgc3ViZmxvdyBmYWlscyBkdXJpbmcgdGhlIGpvaW4gcHJvY2Vzcy4gIEl0IGFwcGVhcnMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGBkcm9wX3JlcWAgZmxhZyB3aXRoaW4gYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGxvZ2ljLiBXaGVuIGB0Y3BfdHJ5X2Zhc3RvcGVuYCBjYWxscyBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAsIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgIG1pZ2h0IGJlIGNhbGxlZC4gSWYgYW4gTVBUQ1Agam9pbiBmYWlscywgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2Agc2V0cyBgdGNwX3JzayhyZXEpLSZndDtkcm9wX3JlcSA9IHRydWVgLiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBzaXR1YXRpb25zIHdoZXJlIHRoaXMgYGRyb3BfcmVxYCB3YXNuJiMzOTt0IHByb3Blcmx5IGNoZWNrZWQgYmVmb3JlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGRhbmdsaW5nIHNvY2tldHMgb3IgbWVtb3J5IGxlYWtzLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBvbiB0aGUgbWVtb3J5IHNhZmV0eTogRmlyc3QsIGBkcm9wX3JlcWAgaXMgYSBib29sZWFuIHdpdGhpbiBgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tgLiBJdCYjMzk7cyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHRjcF9jb25uX3JlcXVlc3RgIHdoZW4gdGhlIHJlcXVlc3Qgc29jayAoYHJlcWApIGlzIGFsbG9jYXRlZC4gSSBjb25maXJtZWQgdGhpcy4gVGhlIGBpbmV0X3JlcXNrX2FsbG9jYCB1c2VzIGVpdGhlciBga21lbV9jYWNoZV9hbGxvY2Agb3IgYHJlcXNrX2FsbG9jYCB3aGljaCBhbGxvY2F0ZXMgYSBgcmVxdWVzdF9zb2NrYC4gSSBhbHNvIHZlcmlmaWVkIHZpYSB0aGUgYG1wdGNwLmhgIGNvZGUgdGhhdCBldmVuIHdpdGggYENPTkZJR19NUFRDUGAgZW5hYmxlZCwgaXQmIzM5O3Mgc2V0IHRvIGBmYWxzZWAsIGFuZCBkaXNhYmxlZCwgaXQgcmV0dXJucyBmYWxzZS4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIHBhdGNoIHRvdWNoZXMgYW55IHVzZXItc3BhY2UgY29waWVzLiBOb3BlLCBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgc29ja29wdHMsIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4gIFRoaXMgZWxpbWluYXRlcyB0aGUgaW1tZWRpYXRlIHJpc2sgb2YgbGVha2luZyBrZXJuZWwtc3BhY2UgZGF0YS4KCkRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGFuc3dlciBpcyBuby4gVGhlIGluaXRpYWxpemF0aW9uIG9mIGBkcm9wX3JlcWAgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBwcmV2ZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4KClNvLCB3aGF0IGRvZXMgdGhlIHBhdGNoICpkbyo/IEl0IGVuc3VyZXMgY29ycmVjdCBjbGVhbnVwLiBTcGVjaWZpY2FsbHksIGl0IGhhbmRsZXMgdGhlIGRyb3BwaW5nIG9mIGByZXF1ZXN0X3NvY2tgIGFuZCBjaGlsZCBzb2NrZXRzIGluIE1QVENQIEZhc3RPcGVuIC8gY29ubmVjdGlvbiByZXF1ZXN0cyB3aGVuIHRoZSBgcnNrX2Ryb3BfcmVxYCBmbGFnIGlzIHRydWUsIGVuc3VyaW5nIHByb3BlciBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGF2b2lkaW5nIGxlYWtzLiBUaGVzZSBraW5kcyBvZiBidWdzIHdvdWxkIHR5cGljYWxseSBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBkb3VibGUtZnJlZSwgaXNzdWVzIGFscmVhZHkgZmxhZ2dlZCBieSBLQVNBTi9TTFVCIGRlYnVnL3JlZmNvdW50L3N0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMsIHdoaWNoIGFyZSBub3QgS01TQU4mIzM5O3Mgc3BlY2lhbHR5LgoKTm93IHRoZSBrZXkgZGlzdGluY3Rpb24gaXM6IEtBU0FOIGhlbHBzIGNhdGNoIG1lbW9yeSBzYWZldHkgaXNzdWVzIChvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGV0Yy4pIHdoaWxlIEtNU0FOIGhhbmRsZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGhlYXAsIHN0YWNrLCBwYWdlKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgaXQgbGVhbnMgbW9yZSB0b3dhcmRzIG1lbW9yeSBzYWZldHksIHdoaWNoIEtBU0FOIGNhbiBoYW5kbGUuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBkb2VzbiYjMzk7dCB0b3VjaCB1c2VyLXNwYWNlIGNvcGllcy4gS0FTQU4vcmVmY291bnQgdHJhY2tpbmcgY292ZXJzIHRoZSBwb3RlbnRpYWwgcmlza3Mgb2YgdXNlLWFmdGVyLWZyZWUgb3IgbGVha3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHBhdGhzIGZvciBNUFRDUCBhbmQgVENQIEZhc3QgT3Blbi4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGFuZCBjaGVja3MgYHJza19kcm9wX3JlcShyZXEpYCBpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCgpYCBhbmQgYHRjcF9jb25uX3JlcXVlc3QoKWAgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBzb2NrIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyB3aGVuIGEgcmVxdWVzdCBpcyBkcm9wcGVkLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczogVGhlIGZpZWxkIGBkcm9wX3JlcWAgaW4gYHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHRjcF9jb25uX3JlcXVlc3QoKWAgd2hlbiB0aGUgcmVxdWVzdF9zb2NrIGlzIGNyZWF0ZWQsIGVuc3VyaW5nIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4yLiBJbmZvLWxlYWsgLyBVc2VyLXNwYWNlIGNvcHkgQW5hbHlzaXM6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgb3B0aW9uIGJ1ZmZlcnMgbW9kaWZpZWQuXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHBhdGhzIGZvciBNUFRDUCBhbmQgVENQIEZhc3QgT3Blbi4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGFuZCBjaGVja3MgYHJza19kcm9wX3JlcShyZXEpYCBpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCgpYCBhbmQgYHRjcF9jb25uX3JlcXVlc3QoKWAgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBzb2NrIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyB3aGVuIGEgcmVxdWVzdCBpcyBkcm9wcGVkLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczogVGhlIGZpZWxkIGBkcm9wX3JlcWAgaW4gYHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHRjcF9jb25uX3JlcXVlc3QoKWAgd2hlbiB0aGUgcmVxdWVzdF9zb2NrIGlzIGNyZWF0ZWQsIGVuc3VyaW5nIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4yLiBJbmZvLWxlYWsgLyBVc2VyLXNwYWNlIGNvcHkgQW5hbHlzaXM6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgb3B0aW9uIGJ1ZmZlcnMgbW9kaWZpZWQuXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTY6NTcuMDcyOTQ1NDM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNDM1NjU3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2Nvbm5fcmVxdWVzdFwiLFxuICAgIFwidGNwX3RyeV9mYXN0b3BlblwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNsZWFudXAgcGF0aHMgZm9yIE1QVENQIGFuZCBUQ1AgRmFzdCBPcGVuLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGB0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGFuZCBjaGVja3MgYHJza19kcm9wX3JlcShyZXEpYCBpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCgpYCBhbmQgYHRjcF9jb25uX3JlcXVlc3QoKWAgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBzb2NrIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyB3aGVuIGEgcmVxdWVzdCBpcyBkcm9wcGVkLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOiBUaGUgZmllbGQgYGRyb3BfcmVxYCBpbiBgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB3aGVuIHRoZSByZXF1ZXN0X3NvY2sgaXMgY3JlYXRlZCwgZW5zdXJpbmcgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG4yLiBJbmZvLWxlYWsgLyBVc2VyLXNwYWNlIGNvcHkgQW5hbHlzaXM6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgb3B0aW9uIGJ1ZmZlcnMgbW9kaWZpZWQuXFxuMy4gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZywgc3RhdGUgbWFuYWdlbWVudCwgYW5kIG1lbW9yeSBmcmVlaW5nIChwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIHRob3JvdWdobHkgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgcmVmZXJlbmNlIGNvdW50ZXJzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AvTVBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIGFuZCBUQ1AgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIGluIG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSByZWplY3RlZCBvciBkcm9wcGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBleGVjdXRlZCBkdXJpbmcgVENQIGhhbmRzaGFrZSBhbmQgRmFzdCBPcGVuIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTY6NTcuMDcyOTU1MTk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI0MTU5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMmI4YTE1ZWU4YjJlNDk0ZDdmMmY4NDZhNWY4ZTg1N2Q0Mzk2NzBjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTY6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMgYi9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1xcbmluZGV4IDQ3MWM3OGJlNTUxMzcuLjIyNDk0ZmY3NDZjNzEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1xcbkBAIC0zMzcsNiArMzM3LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdGlmICghY2hpbGQpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0aWYgKG93bl9yZXEgXFx1MDAyNlxcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG4rXFx0XFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xcbitcXHRcXHRzb2NrX3B1dChjaGlsZCk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuIFxcdHF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEucWxlbisrO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2cXVldWUtXFx1MDAzZWZhc3RvcGVucS5sb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbmluZGV4IDBmNjBhMWRiZjkyNzQuLmViMGU0MjU5YzI4MDcgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbkBAIC03NjY5LDYgKzc2NjksNyBAQCBpbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG4gXFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0eGhhc2ggPSBuZXRfdHhfcm5kaGFzaCgpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuIFxcdHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgPSAwO1xcbitcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XFxuICNlbmRpZlxcbiBcXG4gXFx0dGNwX2NsZWFyX29wdGlvbnMoXFx1MDAyNnRtcF9vcHQpO1xcbkBAIC03Nzc1LDYgKzc3NzYsMTAgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXFxuIFxcdFxcdFJFQURfT05DRShzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xcbiBcXHRcXHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XFxuIFxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG4rXFx0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbitcXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuK1xcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXRmb19saXN0ZW5lciA9IGZhbHNlO1xcbiBcXHRcXHRpZiAoIXdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE2OjU3Ljc3NjIxNzgxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU2NTExODM1OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2Nvbm5fcmVxdWVzdFwiLFxuICAgIFwidGNwX3RyeV9mYXN0b3BlblwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVENQL01QVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBoYW5kbGluZyBpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyBhbmQgVENQIEZhc3QgT3BlbiBjaGlsZCBjcmVhdGlvbiBpbiBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgd2hlbiBNUFRDUCBzdWJmbG93cyBhcmUgcmVqZWN0ZWQgb3IgZHJvcHBlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIFRDUCBoYW5kc2hha2UgYW5kIEZhc3QgT3BlbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDJiOGExNWVlOGIyZTQ5NGQ3ZjJmODQ2YTVmOGU4NTdkNDM5NjcwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTY6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jXG5pbmRleCA0NzFjNzhiZTU1MTM3Li4yMjQ5NGZmNzQ2YzcxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbisrKyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jXG5AQCAtMzM3LDYgKzMzNywxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxuIFx0aWYgKCFjaGlsZClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbitcdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuK1x0XHRzb2NrX3B1dChjaGlsZCk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuIFx0c3Bpbl9sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbiBcdHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5xbGVuKys7XG4gXHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggMGY2MGExZGJmOTI3NC4uZWIwZTQyNTljMjgwNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTc2NjksNiArNzY2OSw3IEBAIGludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuIFx0dGNwX3JzayhyZXEpLVx1MDAzZXR4aGFzaCA9IG5ldF90eF9ybmRoYXNoKCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuIFx0dGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwID0gMDtcbitcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xuICNlbmRpZlxuIFxuIFx0dGNwX2NsZWFyX29wdGlvbnMoXHUwMDI2dG1wX29wdCk7XG5AQCAtNzc3NSw2ICs3Nzc2LDEwIEBAIGludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuIFx0XHRSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xuIFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG4gXHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbitcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbitcdFx0cmVxc2tfZnJlZShyZXEpO1xuK1x0XHRkc3RfcmVsZWFzZShkc3QpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG4gXHRcdHRjcF9yc2socmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIgPSBmYWxzZTtcbiBcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE2OjU3Ljc3NjIxOTkzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTUxMDE2MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBQYXRjaCBUcmlhZ2U6IFN5emthbGxlciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkndmUgZ290IGEgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIHRoZSBnb2FsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBzb21ldGhpbmcgc3l6a2FsbGVyIHNob3VsZCBiZSBmdXp6aW5nLiBJdCdzIGEgUUEgdGFzaywgY29tcGxldGVseSBkZWZlbnNpdmUsIG5vIG1hbGljaW91cyBjb2RlLCBqdXN0IHRyeWluZyB0byBpbXByb3ZlIGtlcm5lbCByb2J1c3RuZXNzLiBTcGVjaWZpY2FsbHksIHdlJ3JlIGxvb2tpbmcgYXQgY2hhbmdlcyBpbiB0aGUgVENQIHN1YnN5c3RlbSwgZm9jdXNpbmcgb24gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhbmQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gTXkgam9iIGlzIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byB0YXJnZXQuXG5cblRoZSBnb29kIG5ld3MgaXMsIEkndmUgZ290IHNvbWUgdG9vbHMgYXQgbXkgZGlzcG9zYWwuIEkgY2FuIHVzZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYCB0byBkaXNzZWN0IHRoZSBjb2RlLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGVyZSBhcmUgY2hhbmdlcyByZWxhdGVkIHRvIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBpbiBgdGNwX2Zhc3RvcGVuLmNgLiBOb3RhYmx5OlxuXG5gYGBjXG4rXHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbitcdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuK1x0XHRzb2NrX3B1dChjaGlsZCk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuYGBgXG5cbmFuZCBhbHNvIGNoYW5nZXMgdG8gYHRjcF9jb25uX3JlcXVlc3RgIGluIGB0Y3BfaW5wdXQuY2A6XG5cbmBgYGNcbiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcbiBcdHRjcF9yc2socmVxKS1cdTAwM2Vpc19tcHRjcCA9IDA7XG4rXHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcbiAjZW5kaWZcbi4uLlxuK1x0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xuK1x0XHRyZXFza19mcmVlKHJlcSk7XG4rXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4rXHRcdHJldHVybiAwO1xuYGBgXG5cbkl0IHNlZW1zIGxpa2UgdGhlIGNvZGUgaXMgdXNpbmcgYSBuZXcgZnVuY3Rpb24sIGByc2tfZHJvcF9yZXEoKWAsIGFzIHdlbGwgYXMgYSBmbGFnLCBgZHJvcF9yZXFgLiBOb3csIGxldCdzIHN0YXJ0IGRpZ2dpbmcuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3Igb2NjdXJyZW5jZXMgb2YgYm90aCBgcnNrX2Ryb3BfcmVxYCBhbmQgYGRyb3BfcmVxYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwncyBIRUFEIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYW5kIGxldCBtZSBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE3OjI0LjkyNzIzODg3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ3MjA4NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJza19kcm9wX3JlcVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9tcHRjcC5oPTEzNz1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTQxLVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTQyOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTQzLXtcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmg9MjQ1PXN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNDktXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNTA6c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNTEte1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTE5Nz1zdHJ1Y3Qgc29jayAqdGNwX2dldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjEwLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMTE6XFx0XFx0aWYgKHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMi1cXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTMyNj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzM5LVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjM0MDpcXHRpZiAob3duX3JlcSBcXHUwMDI2XFx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM0MS1cXHRcXHRiaF91bmxvY2tfc29jayhjaGlsZCk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc3OC1cXHRcXHRzb2NrX3B1dChmYXN0b3Blbl9zayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc3OTpcXHR9IGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc4MC1cXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy05NDItXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjk0MzpcXHRpZiAob3duX3JlcSBcXHUwMDI2XFx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy05NDQtXFx0XFx0cmVxc2tfcXVldWVfcmVtb3ZlZChcXHUwMDI2aW5ldF9jc2socmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIpLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZSwgcmVxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6MjcuOTc0NDU3NjUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ4MjIxNjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZmlsZXMuXG5cbioqRGVlcCBEaXZlIEluY29taW5nOiBNUFRDUCwgRmFzdCBPcGVuLCBhbmQgVENQIElucHV0KipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRvIHJlYWxseSBncmFzcCB3aGF0J3MgZ29pbmcgb24gYXJvdW5kICp0aGVzZSogbGluZXMsIEkgbmVlZCBhIGdvb2QgZm91bmRhdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUga2V5IHBsYXllcnMuIEZpcnN0LCBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAgLSBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBNUFRDUCBzdHJ1Y3R1cmVzLCB0aGUgY29yZSBkYXRhIG1vZGVscywgYW5kIHRoZSBrZXkgZGVmaW5pdGlvbnMgdGhhdCBnb3Zlcm4gTXVsdGlwYXRoIFRDUCBvcGVyYXRpb24gaW4gZ2VuZXJhbC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgKnN1cHBvc2VkKiB0byBiZWhhdmUsIHRoZSBiYXNpYyBpbnRlcmZhY2VzLCBhbmQgd2hlcmUgdGhlIGNvcmUgTVBUQ1AgY29uY2VwdHMgYXJlIGRlZmluZWQuIFRoZW4gSSdsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLlxuXG5OZXh0IHVwLCBJJ2xsIGhpdCBgbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNgLiBUaGlzIGlzIGNydWNpYWwuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgRmFzdCBPcGVuIG1lY2hhbmlzbSB3aXRoaW4gdGhlIHN0YW5kYXJkIFRDUC9JUCBwcm90b2NvbC4gSSdsbCBmb2N1cyBvbiBob3cgaXQgaG9va3MgaW50byB0aGUgZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb24sIGFuZCB3aGF0IG9wdGltaXphdGlvbnMgYXJlIG1hZGUuIEhvdyB0aGUgZmFzdCBvcGVuIGNvb2tpZSBpcyBnZW5lcmF0ZWQsIGhvdyBpdCdzIGhhbmRsZWQsIGFuZCB3aGVyZSB0aGlzIGludGVycGxheXMgd2l0aCB0aGUgb3RoZXIgbW9kdWxlcyBhcmUgcGFydGljdWxhcmx5IGltcG9ydGFudC4gV2hhdCdzIHRoZSBwcm90b2NvbCB3aXRoIHRoZSBjb29raWU/IEhvdyBkb2VzIE1QVENQIGNoYW5nZSB0aGUgZmFzdCBvcGVuIGNvbm5lY3Rpb24gcHJvdG9jb2wgaWYgYXQgYWxsP1xuXG5GaW5hbGx5LCBgbmV0L2lwdjQvdGNwX2lucHV0LmNgIGlzIGdvaW5nIHRvIGJlIHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYywgb3IgcG90ZW50aWFsIHByb2JsZW1zLCBsaWVzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIHBhdGggb2YgaW5jb21pbmcgVENQIHNlZ21lbnRzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGV5J3JlIGhhbmRsZWQgYmFzZWQgb24gdGhlIGNvbm5lY3Rpb24gc3RhdGUgYW5kIEZhc3QgT3BlbiBjb29raWUgKGlmIHByZXNlbnQpLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyBNUFRDUCBzZWdtZW50cyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGVzZSBmYXN0IG9wZW4gY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIGFuZCBtYWludGFpbmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVjb25jaWxlcyB0aGUgc3RhbmRhcmQgVENQIGhhbmRsaW5nIHdpdGggYW55IE1QVENQIGFkZGl0aW9ucyBhbmQgRmFzdCBPcGVuIG9wdGltaXphdGlvbnMuIFRoZSBzeW5jaHJvbml6YXRpb24gaXMga2V5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzozMS40NTY2ODQ2MjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbXB0Y3AuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gMTM4OlxcdHtcXG4gMTM5OlxcdFxcdHJldHVybiB0Y3BfcnNrKHJlcSktXFx1MDAzZWlzX21wdGNwO1xcbiAxNDA6XFx0fVxcbiAxNDE6XFx0XFxuIDE0MjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gMTQzOlxcdHtcXG4gMTQ0OlxcdFxcdHJldHVybiB0Y3BfcnNrKHJlcSktXFx1MDAzZWlzX21wdGNwIFxcdTAwMjZcXHUwMDI2IHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXE7XFxuIDE0NTpcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHZvaWQgbXB0Y3Bfc3BhY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgaW50ICpzcGFjZSwgaW50ICpmdWxsX3NwYWNlKTtcXG4gMTQ4OlxcdGJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxNDk6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSwgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcXG4gMTUwOlxcdGJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXFxuIDE1MTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XFxuIDE1MjpcXHRpbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIDE1MzpcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcXG4gMTU0OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XFxuIDE1NTpcXHRib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0dm9pZCBtcHRjcF93cml0ZV9vcHRpb25zKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4gMTU4OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xcbiAxNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE3OjMxLjQ1Njg1ODU0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMDE0NTg0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBsaW5lIG9mIHRoaW5raW5nLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIFRDUCBGYXN0IE9wZW4gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcmV2aXNpdGluZyBUQ1AgRmFzdCBPcGVuLCBhbmQgSSB3YW50IHRvIGRpdmUgaW50byB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHNlY3Rpb24gaW4gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhcm91bmQgbGluZXMgMzIwIHRvIDM3MC4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBwb3NzaWJseSB0aGUgaGFuZGxpbmcgb2YgdGhlIEZhc3QgT3BlbiBjb29raWUgYW5kIHRoZSBpbml0aWFsIGRhdGEgZXhjaGFuZ2UuIEknbGwgYmUgbG9va2luZyBmb3IgZGV0YWlscyByZWdhcmRpbmcgY29va2llIGdlbmVyYXRpb24sIHZhbGlkYXRpb24sIGFuZCBob3cgaXQgbWVzaGVzIHdpdGggdGhlIFNZTiBhbmQgU1lOLUFDSyBwcm9jZXNzIGZsb3cuIEl0J3MgbGlrZWx5IGhlcmUgdGhhdCBJJ2xsIGZpbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgRmFzdCBPcGVuIHN0YXRlLCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgYW5kIGFueSBzZWN1cml0eSBjaGVja3MgaW4gcGxhY2UgZm9yIHRoaXMgb3B0aW1pemF0aW9uLiBJJ20gaG9waW5nIEkgY2FuIHRyYWNlIHRoZSBjb29raWUncyBsaWZlY3ljbGUgYW5kIHJlbGF0ZSB0aGUgY29kZSBiYWNrIHRvIHRoZSBUQ1Agc3RhdGUgbWFjaGluZSBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIFRoaXMgc2VjdGlvbiBzaG91bGQgb2ZmZXIgaW5zaWdodHMgaW50byB0aGUgcHJhY3RpY2FsIGFzcGVjdHMgb2YgaG93IHRoZSBvcHRpbWl6YXRpb24gd29ya3MgdW5kZXIgdGhlIGhvb2QuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gaWRlbnRpZnksIGluIHRoaXMgYXJlYSwgdGhlIG1lY2hhbmlzbSBmb3IgaG93IHRoZSBrZXJuZWwga2VlcHMgdHJhY2sgb2YgYW5kIHJlYWN0cyB0byB0aGUgRmFzdCBPcGVuIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE3OjQwLjQ1ODMxOTU5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0XFx0fVxcbiAzMjE6XFx0b3V0OlxcbiAzMjI6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMyMzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMjQ6XFx0fVxcbiAzMjU6XFx0XFxuIDMyNjpcXHRzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbiAzMjc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMzI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gMzI5OlxcdHtcXG4gMzMwOlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHA7XFxuIDMzMTpcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSA9IFxcdTAwMjZpbmV0X2NzayhzayktXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlO1xcbiAzMzI6XFx0XFx0c3RydWN0IHNvY2sgKmNoaWxkO1xcbiAzMzM6XFx0XFx0Ym9vbCBvd25fcmVxO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRjaGlsZCA9IGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19hZl9vcHMtXFx1MDAzZXN5bl9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBOVUxMLFxcbiAzMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5VTEwsIFxcdTAwMjZvd25fcmVxLCBOVUxMKTtcXG4gMzM3OlxcdFxcdGlmICghY2hpbGQpXFxuIDMzODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0aWYgKG93bl9yZXEgXFx1MDAyNlxcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG4gMzQxOlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcXG4gMzQyOlxcdFxcdFxcdHNvY2tfcHV0KGNoaWxkKTtcXG4gMzQzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuIDM0NzpcXHRcXHRxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnFsZW4rKztcXG4gMzQ4OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLmxvY2spO1xcbiAzNDk6XFx0XFxuIDM1MDpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSBjaGlsZCBzb2NrZXQuIEhhdmUgdG8gZml4IHNvbWUgdmFsdWVzIHRvIHRha2VcXG4gMzUxOlxcdFxcdCAqIGludG8gYWNjb3VudCB0aGUgY2hpbGQgaXMgYSBGYXN0IE9wZW4gc29ja2V0IGFuZCBpcyBjcmVhdGVkXFxuIDM1MjpcXHRcXHQgKiBvbmx5IG91dCBvZiB0aGUgYml0cyBjYXJyaWVkIGluIHRoZSBTWU4gcGFja2V0LlxcbiAzNTM6XFx0XFx0ICovXFxuIDM1NDpcXHRcXHR0cCA9IHRjcF9zayhjaGlsZCk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0cC1cXHUwMDNlZmFzdG9wZW5fcnNrLCByZXEpO1xcbiAzNTc6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0Zm9fbGlzdGVuZXIgPSB0cnVlO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHQvKiBSRkMxMzIzOiBUaGUgd2luZG93IGluIFNZTiBcXHUwMDI2IFNZTi9BQ0sgc2VnbWVudHMgaXMgbmV2ZXJcXG4gMzYwOlxcdFxcdCAqIHNjYWxlZC4gU28gY29ycmVjdCBpdCBhcHByb3ByaWF0ZWx5LlxcbiAzNjE6XFx0XFx0ICovXFxuIDM2MjpcXHRcXHR0cC1cXHUwMDNlc25kX3duZCA9IG50b2hzKHRjcF9oZHIoc2tiKS1cXHUwMDNld2luZG93KTtcXG4gMzYzOlxcdFxcdHRwLVxcdTAwM2VtYXhfd2luZG93ID0gdHAtXFx1MDAzZXNuZF93bmQ7XFxuIDM2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6NDAuNDU4NDU3MjM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MTU1MTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBUQ1AgSW5wdXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBUQ1AgaW5wdXQgcHJvY2VzcywgYnV0IHRvIHJlYWxseSBuYWlsIGRvd24gdGhlIHNwZWNpZmljcyBhbmQgc2VlIGhvdyB0aGlzIGlzIGhhbmRsZWQgYXQgYSBkZXRhaWxlZCBsZXZlbCwgSSB3YW50IHRvIHplcm8gaW4gb24gYSBwYXJ0aWN1bGFyIGFyZWEuIEknbSB0aGlua2luZyB3ZSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSBsaW5lcyA3NjYwIHRocm91Z2ggNzc5MC4gVGhhdCByYW5nZSBzaG91bGQgZ2l2ZSB1cyBzb21lIGludGVyZXN0aW5nIGluc2lnaHRzLCBJJ20gZXhwZWN0aW5nLiBJdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3Npbmcgb3IgZXJyb3IgaGFuZGxpbmcgLSB0aG9zZSBhcmUgdGhlIGFyZWFzIEknbSBvZnRlbiBmb2N1c2luZyBvbiB3aGVuIEkgbG9vayBpbnRvIHRjcF9pbnB1dC5jLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo0Mi44MzAwMTIzNzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc2NjA6XFx0XFxuNzY2MTpcXHRcXHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKHJza19vcHMsIHNrLCAhd2FudF9jb29raWUpO1xcbjc2NjI6XFx0XFx0aWYgKCFyZXEpXFxuNzY2MzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuNzY2NDpcXHRcXG43NjY1OlxcdFxcdHJlcS1cXHUwMDNlc3luY29va2llID0gd2FudF9jb29raWU7XFxuNzY2NjpcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWFmX3NwZWNpZmljID0gYWZfb3BzO1xcbjc2Njc6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0c19vZmYgPSAwO1xcbjc2Njg6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VyZXFfdXNlY190cyA9IGZhbHNlO1xcbjc2Njk6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0eGhhc2ggPSBuZXRfdHhfcm5kaGFzaCgpO1xcbjc2NzA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxcbjc2NzE6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vpc19tcHRjcCA9IDA7XFxuNzY3MjpcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XFxuNzY3MzpcXHQjZW5kaWZcXG43Njc0OlxcdFxcbjc2NzU6XFx0XFx0dGNwX2NsZWFyX29wdGlvbnMoXFx1MDAyNnRtcF9vcHQpO1xcbjc2NzY6XFx0XFx0dG1wX29wdC5tc3NfY2xhbXAgPSBhZl9vcHMtXFx1MDAzZW1zc19jbGFtcDtcXG43Njc3OlxcdFxcdHRtcF9vcHQudXNlcl9tc3MgID0gUkVBRF9PTkNFKHRwLVxcdTAwM2VyeF9vcHQudXNlcl9tc3MpO1xcbjc2Nzg6XFx0XFx0dGNwX3BhcnNlX29wdGlvbnMoc29ja19uZXQoc2spLCBza2IsIFxcdTAwMjZ0bXBfb3B0LCAwLFxcbjc2Nzk6XFx0XFx0XFx0XFx0ICB3YW50X2Nvb2tpZSA/IE5VTEwgOiBcXHUwMDI2Zm9jKTtcXG43NjgwOlxcdFxcbjc2ODE6XFx0XFx0aWYgKHdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2ICF0bXBfb3B0LnNhd190c3RhbXApXFxuNzY4MjpcXHRcXHRcXHR0Y3BfY2xlYXJfb3B0aW9ucyhcXHUwMDI2dG1wX29wdCk7XFxuNzY4MzpcXHRcXG43Njg0OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTUMpIFxcdTAwMjZcXHUwMDI2IHdhbnRfY29va2llKVxcbjc2ODU6XFx0XFx0XFx0dG1wX29wdC5zbWNfb2sgPSAwO1xcbjc2ODY6XFx0XFxuNzY4NzpcXHRcXHR0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDtcXG43Njg4OlxcdFxcdHRjcF9vcGVucmVxX2luaXQocmVxLCBcXHUwMDI2dG1wX29wdCwgc2tiLCBzayk7XFxuNzY4OTpcXHRcXHRpbmV0X3JzayhyZXEpLVxcdTAwM2Vub19zcmNjaGVjayA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcXG43NjkwOlxcdFxcbjc2OTE6XFx0XFx0LyogTm90ZTogdGNwX3Y2X2luaXRfcmVxKCkgbWlnaHQgb3ZlcnJpZGUgaXJfaWlmIGZvciBsaW5rIGxvY2FscyAqL1xcbjc2OTI6XFx0XFx0aW5ldF9yc2socmVxKS1cXHUwMDNlaXJfaWlmID0gaW5ldF9yZXF1ZXN0X2JvdW5kX2Rldl9pZihzaywgc2tiKTtcXG43NjkzOlxcdFxcbjc2OTQ6XFx0XFx0aWYgKHdhbnRfY29va2llKSB7XFxuNzY5NTpcXHRcXHRcXHRpc24gPSBjb29raWVfaW5pdF9zZXF1ZW5jZShhZl9vcHMsIHNrYiwgXFx1MDAyNnJlcS1cXHUwMDNlbXNzKTtcXG43Njk2OlxcdFxcdFxcdC8qIFVzZSB0aGUgY29va2llIGFzIHR4aGFzaCBzbyB0aGUgU1lOLUFDSyBhbmQgdGhlIGxhdGVyIGZ1bGxcXG43Njk3OlxcdFxcdFxcdCAqIHNvY2tldCBtYWtlIHRoZSBzYW1lIGVncmVzcyBjaG9pY2UgKElQdjYgRUNNUCBwYXRoOyBJUHY0IFRYIHF1ZXVlKS5cXG43Njk4OlxcdFxcdFxcdCAqL1xcbjc2OTk6XFx0XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0eGhhc2ggPSBpc247XFxuNzcwMDpcXHRcXHR9XFxuNzcwMTpcXHRcXG43NzAyOlxcdFxcdGRzdCA9IGFmX29wcy1cXHUwMDNlcm91dGVfcmVxKHNrLCBza2IsIFxcdTAwMjZmbCwgcmVxLCB3YW50X2Nvb2tpZSA/IDAgOiBpc24pO1xcbjc3MDM6XFx0XFx0aWYgKCFkc3QpXFxuNzcwNDpcXHRcXHRcXHRnb3RvIGRyb3BfYW5kX2ZyZWU7XFxuNzcwNTpcXHRcXG43NzA2OlxcdFxcdGlmICh0bXBfb3B0LnRzdGFtcF9vayB8fCAoIXdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2ICFpc24pKVxcbjc3MDc6XFx0XFx0XFx0c3QgPSBJTkRJUkVDVF9DQUxMX0lORVQoYWZfb3BzLVxcdTAwM2Vpbml0X3NlcV9hbmRfdHNfb2ZmLFxcbjc3MDg6XFx0XFx0XFx0XFx0XFx0XFx0dGNwX3Y2X2luaXRfc2VxX2FuZF90c19vZmYsXFxuNzcwOTpcXHRcXHRcXHRcXHRcXHRcXHR0Y3BfdjRfaW5pdF9zZXFfYW5kX3RzX29mZixcXG43NzEwOlxcdFxcdFxcdFxcdFxcdFxcdG5ldCwgc2tiKTtcXG43NzExOlxcdFxcbjc3MTI6XFx0XFx0aWYgKHRtcF9vcHQudHN0YW1wX29rKSB7XFxuNzcxMzpcXHRcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXJlcV91c2VjX3RzID0gZHN0X3RjcF91c2VjX3RzKGRzdCk7XFxuNzcxNDpcXHRcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXRzX29mZiA9IHN0LnRzX29mZjtcXG43NzE1OlxcdFxcdH1cXG43NzE2OlxcdFxcdGlmICghd2FudF9jb29raWUgXFx1MDAyNlxcdTAwMjYgIWlzbikge1xcbjc3MTc6XFx0XFx0XFx0aW50IG1heF9zeW5fYmFja2xvZyA9IFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX21heF9zeW5fYmFja2xvZyk7XFxuNzcxODpcXHRcXG43NzE5OlxcdFxcdFxcdC8qIEtpbGwgdGhlIGZvbGxvd2luZyBjbGF1c2UsIGlmIHlvdSBkaXNsaWtlIHRoaXMgd2F5LiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo0Mi44MzAyOTkyNTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NjExMTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgdGNwX2Nvbm5fcmVxdWVzdGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBibG9jayBmcm9tIGFwcHJveGltYXRlbHkgbGluZSA3NzYwIHRvIDc3OTUuIEknbGwgbmVlZCB0byBhbmFseXplIHRoaXMgc2VnbWVudCBjYXJlZnVsbHkgdG8gZnVsbHkgZ3Jhc3AgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBUQ1AgY29ubmVjdGlvbiBoYW5kbGluZy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3Igc3BlY2lmaWMgZWxlbWVudHMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHNldHVwOiBhcmUgd2UgbG9va2luZyBhdCBTWU4gaGFuZGxpbmc/IEFDSyBwcm9jZWR1cmVzPyBTdGF0ZSB0cmFuc2l0aW9ucz8gQW55IGtpbmQgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbj8gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGlzIHNwZWNpZmljIGNvZGUgc2VnbWVudCByZWxhdGVzIHRvIGNvbm5lY3Rpb24gc3RhdGUuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSBtYXkgYmUgY2FsbHMgdG8gaW50ZXJuYWwgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo0NC45MDY0MTc1OTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc3NjA6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VzeW5fdG9zID0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VpcF9kc2ZpZWxkO1xcbjc3NjE6XFx0XFx0dGNwX29wZW5yZXFfaW5pdF9yd2luKHJlcSwgc2ssIGRzdCk7XFxuNzc2MjpcXHRcXHRza19yeF9xdWV1ZV9zZXQocmVxX3RvX3NrKHJlcSksIHNrYik7XFxuNzc2MzpcXHRcXHRpZiAoIXdhbnRfY29va2llKSB7XFxuNzc2NDpcXHRcXHRcXHR0Y3BfcmVxc2tfcmVjb3JkX3N5bihzaywgcmVxLCBza2IpO1xcbjc3NjU6XFx0XFx0XFx0ZmFzdG9wZW5fc2sgPSB0Y3BfdHJ5X2Zhc3RvcGVuKHNrLCBza2IsIHJlcSwgXFx1MDAyNmZvYywgZHN0KTtcXG43NzY2OlxcdFxcdH1cXG43NzY3OlxcdFxcdGlmIChmYXN0b3Blbl9zaykge1xcbjc3Njg6XFx0XFx0XFx0YWZfb3BzLVxcdTAwM2VzZW5kX3N5bmFjayhmYXN0b3Blbl9zaywgZHN0LCBcXHUwMDI2ZmwsIHJlcSxcXG43NzY5OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9jLCBUQ1BfU1lOQUNLX0ZBU1RPUEVOLCBza2IpO1xcbjc3NzA6XFx0XFx0XFx0LyogQWRkIHRoZSBjaGlsZCBzb2NrZXQgZGlyZWN0bHkgaW50byB0aGUgYWNjZXB0IHF1ZXVlICovXFxuNzc3MTpcXHRcXHRcXHRpZiAoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBmYXN0b3Blbl9zaykpIHtcXG43NzcyOlxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGZhc3RvcGVuX3NrKTtcXG43NzczOlxcdFxcdFxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG43Nzc0OlxcdFxcdFxcdFxcdGdvdG8gZHJvcF9hbmRfZnJlZTtcXG43Nzc1OlxcdFxcdFxcdH1cXG43Nzc2OlxcdFxcdFxcdFJFQURfT05DRShzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xcbjc3Nzc6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soZmFzdG9wZW5fc2spO1xcbjc3Nzg6XFx0XFx0XFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xcbjc3Nzk6XFx0XFx0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbjc3ODA6XFx0XFx0XFx0cmVxc2tfZnJlZShyZXEpO1xcbjc3ODE6XFx0XFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG43NzgyOlxcdFxcdFxcdHJldHVybiAwO1xcbjc3ODM6XFx0XFx0fSBlbHNlIHtcXG43Nzg0OlxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldGZvX2xpc3RlbmVyID0gZmFsc2U7XFxuNzc4NTpcXHRcXHRcXHRpZiAoIXdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2XFxuNzc4NjpcXHRcXHRcXHQgICAgdW5saWtlbHkoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKHNrLCByZXEpKSkge1xcbjc3ODc6XFx0XFx0XFx0XFx0cmVxc2tfZnJlZShyZXEpO1xcbjc3ODg6XFx0XFx0XFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG43Nzg5OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjc3OTA6XFx0XFx0XFx0fVxcbjc3OTE6XFx0XFx0XFx0YWZfb3BzLVxcdTAwM2VzZW5kX3N5bmFjayhzaywgZHN0LCBcXHUwMDI2ZmwsIHJlcSwgXFx1MDAyNmZvYyxcXG43NzkyOlxcdFxcdFxcdFxcdFxcdCAgICAhd2FudF9jb29raWUgPyBUQ1BfU1lOQUNLX05PUk1BTCA6XFxuNzc5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBUQ1BfU1lOQUNLX0NPT0tJRSxcXG43Nzk0OlxcdFxcdFxcdFxcdFxcdCAgICBza2IpO1xcbjc3OTU6XFx0XFx0XFx0aWYgKHdhbnRfY29va2llKSB7XFxuNzc5NjpcXHRcXHRcXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuNzc5NzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG43Nzk4OlxcdFxcdFxcdH1cXG43Nzk5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6NDQuOTA3Mzk2ODU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDkyMTMxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZHJvcF9yZXFgIEZsYWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGB0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXFgIGZsYWcgaXMgZ2V0dGluZyBzZXQgdG8gYHRydWVgLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIGNvbm5lY3Rpb24gcmVqZWN0aW9uIG9yIGVhcmx5IGRyb3AgY29uZGl0aW9uIHdpdGhpbiB0aGUgVENQIHN0YWNrLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvZGUgd291bGQgYmUgYSBxdWljayBncmVwLiBJJ2xsIHNlYXJjaCBmb3IgYGRyb3BfcmVxYCBhY3Jvc3MgdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgaW5zdGFuY2VzIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgdG91Y2hlZC4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgXCJkcm9wIHJlcXVlc3RcIiBiZWhhdmlvci4gVGhpcyBzaG91bGQgcXVpY2tseSBwaW5wb2ludCB0aGUgc291cmNlIG9mIHRoZSBkcm9wIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTcxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo0Ni42MTY2MTM4NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODM4MzEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJvcF9yZXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYz05ND1pbnQgYm5nZV9zZW5kX21zZyhzdHJ1Y3QgYm5nZV9hdXhyX2RldiAqYXV4cl9kZXYsIHN0cnVjdCBibmdlX2Z3X21zZyAqZndfbXNnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDctXFx0aWYgKHJjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmM6MTA4OlxcdFxcdGdvdG8gZHJvcF9yZXE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jLTExOS1cXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYzoxMjA6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMjEtXFx0Ym5nZV9od3JtX3JlcV9kcm9wKGJkLCByZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmM9MTUyMz1pbnQgYm5nZV9od3JtX3BvcnRfcXN0YXRzX2V4dChzdHJ1Y3QgYm5nZV9kZXYgKmJkLCB1OCBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE1OTctXFx0XFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE1OTg6XFx0XFx0XFx0XFx0Z290byBkcm9wX3JlcTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYy0xNTk5LVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE2MDYtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE2MDc6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTYwOC1cXHRibmdlX2h3cm1fcmVxX2Ryb3AoYmQsIHJlcV9xYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYz00Nj1zdGF0aWMgaW50IGJueHRfaHdybV90ZW1wX3F1ZXJ5KHN0cnVjdCBibnh0ICpicCwgdTggKnRlbXApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01Ny1cXHRpZiAocmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmM6NTg6XFx0XFx0Z290byBkcm9wX3JlcTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTY5LVxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYzo3MDpkcm9wX3JlcTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy03MS1cXHRod3JtX3JlcV9kcm9wKGJwLCByZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTIzNj1pbnQgYm54dF9zZW5kX21zZyhzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjU0LVxcdGlmIChyYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6MjU1OlxcdFxcdGdvdG8gZHJvcF9yZXE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy0yNjYtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzoyNjc6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI2OC1cXHRod3JtX3JlcV9kcm9wKGJwLCByZXEpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTA2PXN0YXRpYyBpbnQgZl9taWRpMl9zdGFydF9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTEyMS0vKiBEcm9wIHBlbmRpbmcgcmVxdWVzdHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExMjI6c3RhdGljIHZvaWQgZl9taWRpMl9kcm9wX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIwND1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXAoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA1LXtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDY6XFx0Zl9taWRpMl9kcm9wX3JlcXModXNiX2VwKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDctXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDA9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQyLXtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDM6XFx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfaW4pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcXHRmX21pZGkyX2Ryb3BfcmVxcyhlcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0NS1cXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyhlcF9pbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oPTE1MD1zdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oLTE1Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuaW5jbHVkZS9saW51eC90Y3AuaDoxNTg6XFx0Ym9vbFxcdFxcdFxcdFxcdGRyb3BfcmVxO1xcbmluY2x1ZGUvbGludXgvdGNwLmgtMTU5LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0xMzc9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0MS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE0MjpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0My17XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNDQ6XFx0cmV0dXJuIHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgXFx1MDAyNlxcdTAwMjYgdGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0NS19XFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI0NT1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjQ5LVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjUwOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjUxLXtcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMC1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjExOlxcdFxcdGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTItXFx0XFx0XFx0cmVxc2tfcHV0KHJlcSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz0zMjY9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMzOS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozNDA6XFx0aWYgKG93bl9yZXEgXFx1MDAyNlxcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zNDEtXFx0XFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyMi1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDIzOnN0YXRpYyBpbmxpbmUgdm9pZCBwcl9kcm9wX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIF9fdTE2IHBvcnQsIGludCBmYW1pbHkpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyNC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY3MS1cXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWlzX21wdGNwID0gMDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjcyOlxcdHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjczLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczMC1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NzMxOlxcdFxcdFxcdHByX2Ryb3BfcmVxKHJlcSwgbnRvaHModGNwX2hkcihza2IpLVxcdTAwM2Vzb3VyY2UpLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3MzItXFx0XFx0XFx0XFx0ICAgIHJza19vcHMtXFx1MDAzZWZhbWlseSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Nzc4LVxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Nzc5OlxcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVxcdFxcdHJlcXNrX2ZyZWUocmVxKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTQzOlxcdGlmIChvd25fcmVxIFxcdTAwMjZcXHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cXHRcXHRyZXFza19xdWV1ZV9yZW1vdmVkKFxcdTAwMjZpbmV0X2NzayhyZXEtXFx1MDAzZXJza19saXN0ZW5lciktXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlLCByZXEpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy04NjItXFxubmV0L21wdGNwL3N1YmZsb3cuYzo4NjM6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODY0LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05NDgtXFx0XFx0XFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5BQ0tSWCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5NDk6XFx0XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IHRydWU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05NTAtXFx0XFx0fVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05NjItXFx0bXB0Y3Bfc3ViZmxvd19kcm9wX2N0eChjaGlsZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5NjM6XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IHRydWU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05NjQtXFx0aW5ldF9jc2tfcHJlcGFyZV9mb3JfZGVzdHJveV9zb2NrKGNoaWxkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6NDkuMDAwNDU4NjUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1Nzk0OTcyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE1QVENQIFN1YmZsb3cgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgTXVsdGlQYXRoIFRDUCBzdWJmbG93IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkuIExldCBtZSBwdWxsIHVwIHRoZSBgbmV0L21wdGNwL3N1YmZsb3cuY2AgZmlsZSDigJMgdGhhdCdzIHRoZSBjZW50cmFsIHBsYWNlIGZvciB0aGUgY29yZSBzdWJmbG93IGxvZ2ljLCByaWdodD8gTm93LCBJIHdhbnQgdG8gemVybyBpbiBvbiBhIGNyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSwgZnJvbSBhcHByb3hpbWF0ZWx5IGxpbmVzIDgwNCB0aHJvdWdoIDk3MC4gSSdtIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgY29kZSBibG9jayB3aWxsIGlsbHVtaW5hdGUgdGhlIGJlaGF2aW91ciBhbmQgbG9naWMgSSBuZWVkIHRvIGdyYXNwLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIGNvbnRhaW4gdGhlIGNydWNpYWwgZGV0YWlscyBJJ20gc2Vla2luZyByZWdhcmRpbmcgdGhlIHN1YmZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjU2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6NTQuNTc5OTYxODM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXHR9IGVsc2UgaWYgKHN1YmZsb3dfcmVxLVxcdTAwM2VtcF9qb2luKSB7XFxuIDg1MTpcXHRcXHRcXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFxcdTAwMjZtcF9vcHQpO1xcbiA4NTI6XFx0XFx0XFx0aWYgKCEobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBKX0FDSykpXFxuIDg1MzpcXHRcXHRcXHRcXHRmYWxsYmFjayA9IHRydWU7XFxuIDg1NDpcXHRcXHR9XFxuIDg1NTpcXHRcXG4gODU2OlxcdGNyZWF0ZV9jaGlsZDpcXG4gODU3OlxcdFxcdGNoaWxkID0gbGlzdGVuZXItXFx1MDAzZWljc2tfYWZfb3BzLVxcdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxcbiA4NTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICByZXFfdW5oYXNoLCBvd25fcmVxLCBvcHRfY2hpbGRfaW5pdCk7XFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdGlmIChjaGlsZCBcXHUwMDI2XFx1MDAyNiAqb3duX3JlcSkge1xcbiA4NjE6XFx0XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqY3R4ID0gbXB0Y3Bfc3ViZmxvd19jdHgoY2hpbGQpO1xcbiA4NjI6XFx0XFxuIDg2MzpcXHRcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdFxcdC8qIHdlIG5lZWQgdG8gZmFsbGJhY2sgb24gY3R4IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgb24gcHJlLXJlcXNcXG4gODY2OlxcdFxcdFxcdCAqIGNoZWNraW5nIGFib3ZlLiBJbiB0aGUgbGF0dGVyIHNjZW5hcmlvIHdlIGFkZGl0aW9uYWxseSBuZWVkXFxuIDg2NzpcXHRcXHRcXHQgKiB0byByZXNldCB0aGUgY29udGV4dCB0byBub24gTVBUQ1Agc3RhdHVzLlxcbiA4Njg6XFx0XFx0XFx0ICovXFxuIDg2OTpcXHRcXHRcXHRpZiAoIWN0eCB8fCBmYWxsYmFjaykge1xcbiA4NzA6XFx0XFx0XFx0XFx0aWYgKGZhbGxiYWNrX2lzX2ZhdGFsKSB7XFxuIDg3MTpcXHRcXHRcXHRcXHRcXHRpZiAoIWN0eClcXG4gODcyOlxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXFxuIDg3MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpO1xcbiA4NzQ6XFx0XFx0XFx0XFx0XFx0ZWxzZVxcbiA4NzU6XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG4gODc2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTik7XFxuIDg3NzpcXHRcXHRcXHRcXHRcXHRzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTtcXG4gODc4OlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzcG9zZV9jaGlsZDtcXG4gODc5OlxcdFxcdFxcdFxcdH1cXG4gODgwOlxcdFxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDg4MTpcXHRcXHRcXHR9XFxuIDg4MjpcXHRcXG4gODgzOlxcdFxcdFxcdC8qIHNzayBpbmhlcml0cyBvcHRpb25zIG9mIGxpc3RlbmVyIHNrICovXFxuIDg4NDpcXHRcXHRcXHRjdHgtXFx1MDAzZXNldHNvY2tvcHRfc2VxID0gbGlzdGVuZXItXFx1MDAzZXNldHNvY2tvcHRfc2VxO1xcbiA4ODU6XFx0XFxuIDg4NjpcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VtcF9jYXBhYmxlKSB7XFxuIDg4NzpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWNvbm4gPSBtcHRjcF9za19jbG9uZV9pbml0KGxpc3RlbmVyLVxcdTAwM2Vjb25uLCBcXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcXG4gODg4OlxcdFxcdFxcdFxcdGlmICghY3R4LVxcdTAwM2Vjb25uKVxcbiA4ODk6XFx0XFx0XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gODkwOlxcdFxcbiA4OTE6XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VzdWJmbG93X2lkID0gMTtcXG4gODkyOlxcdFxcdFxcdFxcdG93bmVyID0gbXB0Y3Bfc2soY3R4LVxcdTAwM2Vjb25uKTtcXG4gODkzOlxcdFxcbiA4OTQ6XFx0XFx0XFx0XFx0aWYgKG1wX29wdC5kZW55X2pvaW5faWQwKVxcbiA4OTU6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShvd25lci1cXHUwMDNlcG0ucmVtb3RlX2Rlbnlfam9pbl9pZDAsIHRydWUpO1xcbiA4OTY6XFx0XFxuIDg5NzpcXHRcXHRcXHRcXHRtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihvd25lciwgY2hpbGQsIDEpO1xcbiA4OTg6XFx0XFxuIDg5OTpcXHRcXHRcXHRcXHQvKiB3aXRoIE9vTyBwYWNrZXRzIHdlIGNhbiByZWFjaCBoZXJlIHdpdGhvdXQgaW5ncmVzc1xcbiA5MDA6XFx0XFx0XFx0XFx0ICogbXBjIG9wdGlvblxcbiA5MDE6XFx0XFx0XFx0XFx0ICovXFxuIDkwMjpcXHRcXHRcXHRcXHRpZiAobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSykge1xcbiA5MDM6XFx0XFx0XFx0XFx0XFx0bXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQob3duZXIsIGNoaWxkKTtcXG4gOTA0OlxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlcG1fbm90aWZpZWQgPSAxO1xcbiA5MDU6XFx0XFx0XFx0XFx0fVxcbiA5MDY6XFx0XFx0XFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZW1wX2pvaW4pIHtcXG4gOTA3OlxcdFxcdFxcdFxcdG93bmVyID0gc3ViZmxvd19yZXEtXFx1MDAzZW1zaztcXG4gOTA4OlxcdFxcdFxcdFxcdGlmICghb3duZXIpIHtcXG4gOTA5OlxcdFxcdFxcdFxcdFxcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FUFJPSElCSVQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo1NC41ODAxMTc0MTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzNjI5NTA5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIEZhc3QgT3BlbiBhbmQgQ29ubmVjdGlvbiBSZXF1ZXN0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkxldCdzIGRpdmUgaW50byB0aGUgZ2l0IGxvZyB0byB1bmRlcnN0YW5kIHRoZSAnd2h5JyBiZWhpbmQgdGhpcyBjaGFuZ2UuXCIgQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhhdCwgbWF5YmUgYSBxdWljayBgZ3JlcHBlcmAgcnVuIHdvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLCBvciBwZXJoYXBzIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgZGlmZiB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gZ2xlYW4gdGhlIHB1cnBvc2UuIFRoZSBjb21taXQgaW4gdGhlIHdvcmtzcGFjZSBpcyBgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3YCwgd2hpY2ggZG9lc24ndCB0ZWxsIG1lIG11Y2guXG5cbk5vdywgbG9va2luZyBhdCB0aGUgZGlmZiBpdHNlbGYsIGl0IHNlZW1zIGxpa2Ugd2UncmUgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhbmQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gVENQIEZhc3QgT3BlbiBjaGlsZCBzb2NrZXQgY3JlYXRpb24gYW5kIFRDUCBjb25uZWN0aW9uIHJlcXVlc3RzLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgcmVxdWVzdCBzb2NrZXRzIGFuZCBhIG5ldyBgZHJvcF9yZXFgIGZpZWxkLiAgVGhlIGFkZGVkIGByc2tfZHJvcF9yZXFgIGNhbGxzIHdpdGhpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YCBhcmUgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuXG5cbk15IGV4cGVydCBleWVzIHRlbGwgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suICBUaGlzIGFmZmVjdHMgVENQL01QVENQIHNvY2tldCBjcmVhdGlvbiBhbmQgU1lOIGhhbmRsaW5nLCB3aGljaCBpcyBmdW5kYW1lbnRhbC4gVGhpcyBjb2RlIHdpbGwgYmUgcmVhY2hlZCBieSBzaW1wbHkgY3JlYXRpbmcgc3RhbmRhcmQgVENQL01QVENQIHNvY2tldHMgYW5kIHNlbmRpbmcgU1lOcyB3aXRoIG9yIHdpdGhvdXQgVENQIEZhc3QgT3BlbiBjb29raWVzLiBXZSdyZSB0YWxraW5nIHN0YW5kYXJkIHNvY2tldHMsIGxvb3BiYWNrLCB0dW4vdGFwLCBhbmQgbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24g4oCTIGl0J3MgYWxsIGluIHRoZSBtaXguXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFRDUCBzdGFjayBpbiBgbmV0L2lwdjQvYCB0aGlzIHBhdGNoICpzaG91bGQqIGJlIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIEl0IGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIHB1cnZpZXcgb2YgYmVpbmcgcmVhY2hhYmxlIGNvZGUgYW5kIG5vdCBiZWluZyBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgdW5yZWFjaGFibGUgaGFyZHdhcmUsIHRlYXJkb3duLCB1bmJpbmRpbmcsIG9yIGFyY2gtc3BlY2lmaWMuXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdG8gYmUgY29tcGlsZWQgYW5kIHJlYWNoYWJsZS4gSSdsbCBjaGVjayBmb3IgYENPTkZJR19JTkVUYCAvIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19JUFY0YCBhcyB0aGUgYmFyZSBtaW5pbXVtLiBBIGRlZXBlciBkaXZlIHdpbGwgY29uZmlybSBgQ09ORklHX01QVENQYCBpcyBhbHNvIG5lZWRlZCwgZ2l2ZW4gdGhlIHJlZmVyZW5jZXMgdG8gYElTX0VOQUJMRUQoQ09ORklHX01QVENQKWAgYW5kIHRoZSBgcnNrX2Ryb3BfcmVxYCBmdW5jdGlvbnMuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBgQ09ORklHX01QVENQYCBpbiBgbmV0L21wdGNwL0tjb25maWdgIGFuZCBgbmV0L2lwdjQvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxODowNC45NDMwNzEzNDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjI2OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cXFxcJFxcXFwoQ09ORklHLip0Y3BfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19JTkVUX0RJQUcpICs9IGluZXRfZGlhZy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0lORVRfVENQX0RJQUcpICs9IHRjcF9kaWFnLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfSU5FVF9VRFBfRElBRykgKz0gdWRwX2RpYWcub1xcbm5ldC9pcHY0L01ha2VmaWxlPTQ2PW9iai0kKENPTkZJR19JTkVUX1JBV19ESUFHKSArPSByYXdfZGlhZy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX1RDUF9DT05HX0JCUikgKz0gdGNwX2Jici5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgKz0gdGNwX2JpYy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX1RDUF9DT05HX0NERykgKz0gdGNwX2NkZy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTA6b2JqLSQoQ09ORklHX1RDUF9DT05HX0NVQklDKSArPSB0Y3BfY3ViaWMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19UQ1BfQ09OR19EQ1RDUCkgKz0gdGNwX2RjdGNwLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1MjpvYmotJChDT05GSUdfVENQX0NPTkdfV0VTVFdPT0QpICs9IHRjcF93ZXN0d29vZC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX1RDUF9DT05HX0hTVENQKSArPSB0Y3BfaGlnaHNwZWVkLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1NDpvYmotJChDT05GSUdfVENQX0NPTkdfSFlCTEEpICs9IHRjcF9oeWJsYS5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTU6b2JqLSQoQ09ORklHX1RDUF9DT05HX0hUQ1ApICs9IHRjcF9odGNwLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1NjpvYmotJChDT05GSUdfVENQX0NPTkdfVkVHQVMpICs9IHRjcF92ZWdhcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTc6b2JqLSQoQ09ORklHX1RDUF9DT05HX05WKSArPSB0Y3BfbnYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjU4Om9iai0kKENPTkZJR19UQ1BfQ09OR19WRU5PKSArPSB0Y3BfdmVuby5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFKSArPSB0Y3Bfc2NhbGFibGUub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYwOm9iai0kKENPTkZJR19UQ1BfQ09OR19MUCkgKz0gdGNwX2xwLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MTpvYmotJChDT05GSUdfVENQX0NPTkdfWUVBSCkgKz0gdGNwX3llYWgub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgKz0gdGNwX2lsbGlub2lzLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGU9Njc9b2JqLSQoQ09ORklHX1hGUk0pICs9IHhmcm00X3BvbGljeS5vIHhmcm00X3N0YXRlLm8geGZybTRfaW5wdXQubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtNjgtXFx0XFx0ICAgICAgeGZybTRfb3V0cHV0Lm8geGZybTRfcHJvdG9jb2wub1xcbm5ldC9pcHY0L01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19UQ1BfQU8pICs9IHRjcF9hby5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNzAtXFxubmV0L2lwdjQvTWFrZWZpbGU9NzE9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5uZXQvaXB2NC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl90Y3BfY2Eub1xcbm5ldC9pcHY0L01ha2VmaWxlLTczLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE4OjA1LjAyMzMwNjMxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI2NTQ4NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgYWdhaW4uIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIGJ1dCBJJ20gdHJ5aW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGlzIHNlY3Rpb24uIEkgd2FudCB0byBzZWUgd2hhdCdzIGJlaW5nIGJ1aWx0LCBob3cgaXQncyBiZWluZyBidWlsdCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBidWlsZCBmbGFncyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBJdCdzIGVhc3kgdG8gZm9jdXMgb24gaW5kaXZpZHVhbCBmaWxlcywgYnV0IHRoZSBNYWtlZmlsZSdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgKnN5c3RlbSogYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGFueSByZWNlbnQgY2hhbmdlcyBoZXJlLCBhbmQgbG9vayBmb3IgYW55IGNsdWVzLiBJ4oCZbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgbW9kdWxlcyBhbmQga2VybmVsIG9iamVjdHMuIFRpbWUgdG8gZGl2ZSBpbi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg1MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE4OjA3LjA0OTg1OTAxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUQ1AvSVAgKElORVQpIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbiAgIDc6XFx0XFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxcXFxuICAgODpcXHRcXHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcXFxcbiAgIDk6XFx0XFx0ICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0ICAgICB0Y3BfbWluaXNvY2tzLm8gdGNwX2NvbmcubyB0Y3BfbWV0cmljcy5vIHRjcF9mYXN0b3Blbi5vIFxcXFxcXG4gIDEyOlxcdFxcdCAgICAgdGNwX3JlY292ZXJ5Lm8gdGNwX3VscC5vIFxcXFxcXG4gIDEzOlxcdFxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxuICAxNDpcXHRcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcXFxcbiAgMTY6XFx0XFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxuICAxNzpcXHRcXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXFxuICAxODpcXHRcXG4gIDE5OlxcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSArPSBpcF90dW5uZWwub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDIyOlxcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfSVBfTVJPVVRFKSArPSBpcG1yLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG4gIDI2OlxcdGdyZS15IDo9IGdyZV9kZW11eC5vXFxuICAyNzpcXHRmb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xcbiAgMjg6XFx0b2JqLSQoQ09ORklHX05FVF9GT1UpICs9IGZvdS5vXFxuICAyOTpcXHRvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSArPSBncmUub1xcbiAgMzA6XFx0b2JqLSQoQ09ORklHX05FVF9JUEdSRSkgKz0gaXBfZ3JlLm9cXG4gIDMxOlxcdHVkcF90dW5uZWwteSA6PSB1ZHBfdHVubmVsX2NvcmUubyB1ZHBfdHVubmVsX25pYy5vXFxuICAzMjpcXHRvYmotJChDT05GSUdfTkVUX1VEUF9UVU5ORUwpICs9IHVkcF90dW5uZWwub1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX05FVF9JUFZUSSkgKz0gaXBfdnRpLm9cXG4gIDM0OlxcdG9iai0kKENPTkZJR19TWU5fQ09PS0lFUykgKz0gc3luY29va2llcy5vXFxuICAzNTpcXHRvYmotJChDT05GSUdfSU5FVF9BSCkgKz0gYWg0Lm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19JTkVUX0VTUCkgKz0gZXNwNC5vXFxuICAzNzpcXHRvYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgKz0gZXNwNF9vZmZsb2FkLm9cXG4gIDM4OlxcdG9iai0kKENPTkZJR19JTkVUX0lQQ09NUCkgKz0gaXBjb21wLm9cXG4gIDM5OlxcdG9iai0kKENPTkZJR19JTkVUX1hGUk1fVFVOTkVMKSArPSB4ZnJtNF90dW5uZWwub1xcbiAgNDA6XFx0b2JqLSQoQ09ORklHX0lORVRfVFVOTkVMKSArPSB0dW5uZWw0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTg6MDcuMDQ5OTQ4NDk2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDUwODU2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYENPTkZJR19NUFRDUGAgaW4gYG5ldC9tcHRjcC9LY29uZmlnYDpcblxuKipDaGVja2luZyB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBNUFRDUCBjb25maWd1cmF0aW9uIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBsYWNlIHdoZXJlIHRoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGZvciBgQ09ORklHX01QVENQYCwgd2hpY2ggSSdsbCB0aGVuIHVzZSB0byBndWlkZSB3aGF0IEkgY2hlY2sgbmV4dC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhhdCBvcHRpb24sIHRvby4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBhbmQgd2hhdCBzdXBwb3J0aW5nIG9wdGlvbnMgbWlnaHQgYmUgcmVxdWlyZWQgb3IgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTg6MTEuNDU1MDM3ODc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0XFxuICAgMjpcXHRjb25maWcgTVBUQ1BcXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXFxuICAxMDpcXHRcXHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XFxuICAxMTpcXHRcXHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcXG4gIDEyOlxcdFxcdCAgTVBUQ1AuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIE1QVENQXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICAxODpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNUFRDUF9JUFY2XFxuICAyMTpcXHRcXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2PXlcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbiAgMjY6XFx0XFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiAgMjg6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDI5OlxcdFxcdGhlbHBcXG4gIDMwOlxcdFxcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxcbiAgMzE6XFx0XFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcXG4gIDMyOlxcdFxcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxcbiAgMzU6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTg6MTEuNDU1MTI5Mjc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MzY0OTcxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGByc2tfZHJvcF9yZXFgIGFuZCBGb2N1c1N5bWJvbCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGByc2tfZHJvcF9yZXFgIGZ1bmN0aW9uIGFuZCBob3cgaXQncyB1c2VkLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoaXMgbmV3IGNvZGUuIExvb2tpbmcgYXQgYGluY2x1ZGUvbmV0L21wdGNwLmhgLCBJIHNlZSB0aGUgZGVmaW5pdGlvbiBpcyBjb25kaXRpb25hbC4gSWYgYENPTkZJR19NUFRDUGAgaXMgKmRpc2FibGVkKiwgdGhlbiBgcnNrX2Ryb3BfcmVxYCBqdXN0IHJldHVybnMgYGZhbHNlYC4gVGhhdCdzIGltcG9ydGFudC4gSXQgbWVhbnMgdGhvc2UgYGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSlgIGFuZCBgfSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSlgIGNoZWNrcyBhcmUgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIHVubGVzcyBNUFRDUCBpcyBlbmFibGVkLiAgQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfSU5FVGAgd291bGQgYWxzbyBiZSByZXF1aXJlZCBieSB2aXJ0dWUgb2YgVENQLlxuXG5Ob3csIHNoaWZ0aW5nIGdlYXJzLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYEZvY3VzU3ltYm9sc2AuICBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YC4gSSByZWNhbGwgdGhhdCBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgaXMgc3RhdGljLiBGcm9tIHdoYXQgSSd2ZSBzZWVuLCBpdCdzIGNhbGxlZCBieSBgdGNwX3RyeV9mYXN0b3BlbmAgYW5kIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3NlbnRgIGFuZCB0aGUgcXVlc3Rpb24gaXMgaW4gd2hhdCBvdGhlciBjb250ZXh0IGl0IG1pZ2h0IGJlIHVzZWQuIE5vdyBJIHNob3VsZCBncmVwIGZvciBib3RoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcxOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE4OjE0Ljk5MTYzMDEyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMjg3Njc3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTI5OD1zdGF0aWMgaW50IHRjcF9mYXN0b3Blbl9jb29raWVfZ2VuX2NoZWNrKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMyNS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozMjY6c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMjctXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTQ0ND1zdHJ1Y3Qgc29jayAqdGNwX3RyeV9mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy00ODctZmFzdG9wZW46XFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6NDg4OlxcdFxcdFxcdGNoaWxkID0gdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzaywgc2tiLCByZXEpO1xcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTQ4OS1cXHRcXHRcXHRpZiAoY2hpbGQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTg6MTcuNDA0NTMwNjcxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNTY3NjExMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdGNwX2Nvbm5fcmVxdWVzdGAgQ2FsbGVycyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgcGF0aHMuIExldCdzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSB0cmFjaW5nIHRoZSBjYWxsZXJzIG9mIGB0Y3BfY29ubl9yZXF1ZXN0YC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIGluaXRpYXRlZCBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgVENQL0lQIHN0YWNrLiBJdCdzIG5vdCBlbm91Z2ggdG8ganVzdCBsb29rIGF0IHRoZSBkaXJlY3QgY2FsbGVyczsgSSBuZWVkIHRvIGNvbnNpZGVyIGluZGlyZWN0IGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbHNpdGUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFjdGl2ZSBvcGVucywgcGFzc2l2ZSBvcGVucywgb3Igc29tZSBjb21iaW5hdGlvbj8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGF0IGVhY2ggbGV2ZWw/XG5cbkkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBleGFtaW5lIHJlbGF0ZWQgZnVuY3Rpb25zLCBub3QganVzdCBgdGNwX2Nvbm5fcmVxdWVzdGAuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCB0ZWFyZG93biwgYW5kIG1hbmFnZW1lbnQ/IFRoaW5ncyBsaWtlIGB0Y3BfdjRfcmN2YCwgYHRjcF9hY2NlcHRgLCBgaW5ldF9saXN0ZW5gLCBhbmQgYW55dGhpbmcgZGVhbGluZyB3aXRoIFNZTiwgU1lOLUFDSywgYW5kIEFDSyBwcm9jZXNzaW5nIGFyZSBpbW1lZGlhdGVseSBqdW1waW5nIHRvIG1pbmQuIEkgc2hvdWxkIGJlIGFibGUgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBhbnkgcGF0dGVybnMgb3IgYXJlYXMgdGhhdCB3YXJyYW50IGRlZXBlciBzY3J1dGlueS4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGdvaW5nIHRvIGdvIGZhc3Qgc28gdGhhdCBJIGNhbiBxdWlja2x5IGFzc2VzcyB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE5OjE5Ljk3MjE0NTg2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMDE0Njk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfY29ubl9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTI0NzE9aW50IHRjcF9ydHhfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG5pbmNsdWRlL25ldC90Y3AuaDoyNDcyOmludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTI0NzMtXFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgKmFmX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTMyNj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzg2LVxcdHRwLVxcdTAwM2VyY3ZfbXduZF9zZXEgPSB0cC1cXHUwMDNlcmN2X3d1cCArIHRwLVxcdTAwM2VyY3Zfd25kO1xcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjM4NzpcXHQvKiB0Y3BfY29ubl9yZXF1ZXN0KCkgaXMgc2VuZGluZyB0aGUgU1lOQUNLLFxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM4OC1cXHQgKiBhbmQgcXVldWVzIHRoZSBjaGlsZCBpbnRvIGxpc3RlbmVyIGFjY2VwdCBxdWV1ZS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc1OTQ9dTE2IHRjcF9nZXRfc3luY29va2llX21zcyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MTktXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyMDppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjIxLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NTU9aW50IHRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjYwLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTY2MTpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHMsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjYyLVxcdFxcdFxcdFxcdFxcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLCBzaywgc2tiKTtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTMxNj1zdGF0aWMgaW50IHRjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzI4LVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTMyOTpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMzMC1cXHRcXHRcXHRcXHRcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19pcHY2X29wcywgc2ssIHNrYik7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY3Mj1zdGF0aWMgaW50IHN1YmZsb3dfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjgxLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjgyOlxcdHJldHVybiB0Y3BfY29ubl9yZXF1ZXN0KFxcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHMsXFxubmV0L21wdGNwL3N1YmZsb3cuYy02ODMtXFx0XFx0XFx0XFx0XFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03MDM9c3RhdGljIGludCBzdWJmbG93X3Y2X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcxOS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjcyMDpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2bXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzIxLVxcdFxcdFxcdFxcdFxcdTAwMjZzdWJmbG93X3JlcXVlc3Rfc29ja19pcHY2X29wcywgc2ssIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE5OjIzLjEwMjMwNTAyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQxNDMwMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHByb2plY3QgZ3VpZGVsaW5lcyBmb3IgbGlzdGluZyB0YXJnZXRlZCBmZWF0dXJlIGxvZ2ljLiBGaXJzdCwgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyB0b3VjaGVkOiBJJ20gdHJhY2tpbmcgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AgYW5kIHdoZXJlIGB0Y3BfdHJ5X2Zhc3RvcGVuYCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBGYXN0IE9wZW4gYW5kIE1QVENQLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGhhcyBiZWVuIG1vZGlmaWVkIGluIGBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY2AsIGFsb25nIHdpdGggY2FsbHMgdG8gYHRjcF90cnlfZmFzdG9wZW5gIHdoaWNoIGl0c2VsZiBjYWxscyBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAsIGFsc28gaW4gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCwgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YCBpbiBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLiBUaGVuIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgIGlzIGluIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYC4gSSBuZWVkIHRvIGVuc3VyZSBJJ3ZlIGNvdmVyZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIHNvIGEgZG91YmxlLWNoZWNrIGlzIG5lY2Vzc2FyeS5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgaXMgKnN0YXRpYyosIGJ1dCBJIGtub3cgdGhhdCBpbiBDLCBzdGF0aWMgZnVuY3Rpb25zIG9mdGVuIHN0aWxsIGhhdmUgc3ltYm9scyBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLCBhbHRob3VnaCBJJ2xsIGJlIHN1cmUgdG8gaW5jbHVkZSBpdC4gYHRjcF90cnlfZmFzdG9wZW5gIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAgYXJlIGJvdGggbm9uLXN0YXRpYy4gU2luY2UgdGhlIGd1aWRlbGluZXMgYXNrIG1lIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyIGZ1bmN0aW9ucyB0aGF0IGV4ZXJjaXNlIHN0YXRpYyBpbmxpbmUgaGVscGVycywgYW5kIHRob3NlIGFyZTpcbi0gICBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGBcbi0gICBgdGNwX3RyeV9mYXN0b3BlbmBcbi0gICBgdGNwX2Nvbm5fcmVxdWVzdGBcblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSBrbm93IEknbGwgbmVlZCBgSU5FVGAgYW5kIGBNUFRDUGAsIGJ1dCBsZXQncyBjb25maXJtIHdoZXRoZXIgYFRDUF9GQVNUT1BFTmAgaXMgYSBzZXBhcmF0ZSBjb25maWcgb3B0aW9uIG9yIGlmIGl0J3MgaW1wbGljaXRseSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyMiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOToyNy45NDM3Mzg4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0ODAyMDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVENQX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTQ1NT1jb25maWcgSU5FVF9ESUFHX0RFU1RST1lcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDY3LVxcbm5ldC9pcHY0L0tjb25maWc6NDY4Om1lbnVjb25maWcgVENQX0NPTkdfQURWQU5DRURcXG5uZXQvaXB2NC9LY29uZmlnLTQ2OS1cXHRib29sIFxcXCJUQ1A6IGFkdmFuY2VkIGNvbmdlc3Rpb24gY29udHJvbFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9NDc5PWlmIFRDUF9DT05HX0FEVkFOQ0VEXFxubmV0L2lwdjQvS2NvbmZpZy00ODAtXFxubmV0L2lwdjQvS2NvbmZpZzo0ODE6Y29uZmlnIFRDUF9DT05HX0JJQ1xcbm5ldC9pcHY0L0tjb25maWctNDgyLVxcdHRyaXN0YXRlIFxcXCJCaW5hcnkgSW5jcmVhc2UgQ29uZ2VzdGlvbiAoQklDKSBjb250cm9sXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00OTQtXFxubmV0L2lwdjQvS2NvbmZpZzo0OTU6Y29uZmlnIFRDUF9DT05HX0NVQklDXFxubmV0L2lwdjQvS2NvbmZpZy00OTYtXFx0dHJpc3RhdGUgXFxcIkNVQklDIFRDUFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNTAyLVxcbm5ldC9pcHY0L0tjb25maWc6NTAzOmNvbmZpZyBUQ1BfQ09OR19XRVNUV09PRFxcbm5ldC9pcHY0L0tjb25maWctNTA0LVxcdHRyaXN0YXRlIFxcXCJUQ1AgV2VzdHdvb2QrXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy01MTYtXFxubmV0L2lwdjQvS2NvbmZpZzo1MTc6Y29uZmlnIFRDUF9DT05HX0hUQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTUxOC1cXHR0cmlzdGF0ZSBcXFwiSC1UQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTUyNy1cXG5uZXQvaXB2NC9LY29uZmlnOjUyODpjb25maWcgVENQX0NPTkdfSFNUQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTUyOS1cXHR0cmlzdGF0ZSBcXFwiSGlnaCBTcGVlZCBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTUzNy1cXG5uZXQvaXB2NC9LY29uZmlnOjUzODpjb25maWcgVENQX0NPTkdfSFlCTEFcXG5uZXQvaXB2NC9LY29uZmlnLTUzOS1cXHR0cmlzdGF0ZSBcXFwiVENQLUh5YmxhIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTU0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjU0Nzpjb25maWcgVENQX0NPTkdfVkVHQVNcXG5uZXQvaXB2NC9LY29uZmlnLTU0OC1cXHR0cmlzdGF0ZSBcXFwiVENQIFZlZ2FzXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy01NTYtXFxubmV0L2lwdjQvS2NvbmZpZzo1NTc6Y29uZmlnIFRDUF9DT05HX05WXFxubmV0L2lwdjQvS2NvbmZpZy01NTgtXFx0dHJpc3RhdGUgXFxcIlRDUCBOVlxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNTcyLVxcbm5ldC9pcHY0L0tjb25maWc6NTczOmNvbmZpZyBUQ1BfQ09OR19TQ0FMQUJMRVxcbm5ldC9pcHY0L0tjb25maWctNTc0LVxcdHRyaXN0YXRlIFxcXCJTY2FsYWJsZSBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTU4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjU4Mjpjb25maWcgVENQX0NPTkdfTFBcXG5uZXQvaXB2NC9LY29uZmlnLTU4My1cXHR0cmlzdGF0ZSBcXFwiVENQIExvdyBQcmlvcml0eVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNTkwLVxcbm5ldC9pcHY0L0tjb25maWc6NTkxOmNvbmZpZyBUQ1BfQ09OR19WRU5PXFxubmV0L2lwdjQvS2NvbmZpZy01OTItXFx0dHJpc3RhdGUgXFxcIlRDUCBWZW5vXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy02MDEtXFxubmV0L2lwdjQvS2NvbmZpZzo2MDI6Y29uZmlnIFRDUF9DT05HX1lFQUhcXG5uZXQvaXB2NC9LY29uZmlnLTYwMy1cXHR0cmlzdGF0ZSBcXFwiWWVBSCBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTYxNS1cXG5uZXQvaXB2NC9LY29uZmlnOjYxNjpjb25maWcgVENQX0NPTkdfSUxMSU5PSVNcXG5uZXQvaXB2NC9LY29uZmlnLTYxNy1cXHR0cmlzdGF0ZSBcXFwiVENQIElsbGlub2lzXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy02MjctXFxubmV0L2lwdjQvS2NvbmZpZzo2Mjg6Y29uZmlnIFRDUF9DT05HX0RDVENQXFxubmV0L2lwdjQvS2NvbmZpZy02MjktXFx0dHJpc3RhdGUgXFxcIkRhdGFDZW50ZXIgVENQIChEQ1RDUClcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTY0OC1cXG5uZXQvaXB2NC9LY29uZmlnOjY0OTpjb25maWcgVENQX0NPTkdfQ0RHXFxubmV0L2lwdjQvS2NvbmZpZy02NTAtXFx0dHJpc3RhdGUgXFxcIkNBSUEgRGVsYXktR3JhZGllbnQgKENERylcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTY2NS1cXG5uZXQvaXB2NC9LY29uZmlnOjY2Njpjb25maWcgVENQX0NPTkdfQkJSXFxubmV0L2lwdjQvS2NvbmZpZy02NjctXFx0dHJpc3RhdGUgXFxcIkJCUiBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTcyMj1lbmRpZlxcbm5ldC9pcHY0L0tjb25maWctNzIzLVxcbm5ldC9pcHY0L0tjb25maWc6NzI0OmNvbmZpZyBUQ1BfQ09OR19DVUJJQ1xcbm5ldC9pcHY0L0tjb25maWctNzI1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTcyOT1jb25maWcgREVGQVVMVF9UQ1BfQ09OR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy03NDMtXFxubmV0L2lwdjQvS2NvbmZpZzo3NDQ6Y29uZmlnIFRDUF9BT1xcbm5ldC9pcHY0L0tjb25maWctNzQ1LVxcdGJvb2wgXFxcIlRDUDogQXV0aGVudGljYXRpb24gT3B0aW9uIChSRkM1OTI1KVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNzU4LVxcbm5ldC9pcHY0L0tjb25maWc6NzU5OmNvbmZpZyBUQ1BfTUQ1U0lHXFxubmV0L2lwdjQvS2NvbmZpZy03NjAtXFx0Ym9vbCBcXFwiVENQOiBNRDUgU2lnbmF0dXJlIE9wdGlvbiBzdXBwb3J0IChSRkMyMzg1KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6MzAuMjkxNzcyMTA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MTA1ODcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGB0Y3BfZmFzdG9wZW4uY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB0Y3BfZmFzdG9wZW4uY2AsIEkgc2VlIGl0J3MgaW5jbHVkZWQgaW4gdGhlIGBvYmoteWAgbGlzdCBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgcGFydCBvZiB0aGUgY29yZSBJUHY0IG5ldHdvcmtpbmcgc3RhY2suIEFuZCB0aGUgZmFjdCB0aGF0IE1QVENQIGhhcyBhIGRlcGVuZGVuY3kgb24gSU5FVCBpcyBhbHNvIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHR3byAqcmVhbGx5KiByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSBhcmUgYElORVRgIGFuZCBgTVBUQ1BgLiBUaG9zZSBhcmUgdGhlIHRoaW5ncyBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYXMgSSBldmFsdWF0ZSB0aGlzLlxuXG5MZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgY29ycmVjdGx5LiBUaGlzIGlzIHdvcnRoIGZ1enppbmcsIHRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgYXJlIGBJTkVUYCBhbmQgYE1QVENQYCwgc28gdGhhdCBhbGlnbnMgd2l0aCBteSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdC1vbjsgYHRjcF9jb25uX3JlcXVlc3RgLCBgdGNwX3RyeV9mYXN0b3BlbmAsIGFuZCBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgYXJlIGFsbCByaWdodCBpbiB0aGUgaGVhcnQgb2YgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBGYXN0IE9wZW4sIHdoaWNoIHRoaXMgcGF0Y2ggY2xlYXJseSBhaW1zIHRvIG1vZGlmeS5cblxuVGhlIHJlYXNvbmluZyBzZWN0aW9uIG1ha2VzIGl0IGV2ZW4gY2xlYXJlcjogdGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgcHJvY2Vzc2luZyBhbmQgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIHRvIGNvcnJlY3RseSBoYW5kbGUgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgKGByc2tfZHJvcF9yZXFgKS4gVGhpcyBtZWFucyBpdCdzIHRvdWNoaW5nIGZ1bmRhbWVudGFsIGNvZGUgcGF0aHMgdGhhdCBoYW5kbGUgaW5jb21pbmcgU1lOIHBhY2tldHMsIGFuZCBGYXN0IE9wZW4gY29ubmVjdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIE1QVENQIGlzIGVuYWJsZWQuIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIHBvdGVudGlhbGx5IGV4cG9zZWQgdG8gdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmNyZWFzZWQgY29tcGxleGl0eSBvZiBNUFRDUC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3QgYW5kIGlmIGFueSBuZXcgZWRnZSBjYXNlcyBhcmUgY3JlYXRlZC4gVGltZSB0byBydW4gYSBxdWljayBgc2V0LXJlc3VsdHNgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0NSwiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6MzQuMjAyMzY1NTU1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU2ODQ4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2Nvbm5fcmVxdWVzdFwiLFxuICAgIFwidGNwX3RyeV9mYXN0b3BlblwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVENQL01QVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBoYW5kbGluZyBpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyBhbmQgVENQIEZhc3QgT3BlbiBjaGlsZCBjcmVhdGlvbiBpbiBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgd2hlbiBNUFRDUCBzdWJmbG93cyBhcmUgcmVqZWN0ZWQgb3IgZHJvcHBlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIFRDUCBoYW5kc2hha2UgYW5kIEZhc3QgT3BlbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfdHJ5X2Zhc3RvcGVuXCIsXG4gICAgXCJ0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AvTVBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIGFuZCBUQ1AgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIGluIG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSByZWplY3RlZCBvciBkcm9wcGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBleGVjdXRlZCBkdXJpbmcgVENQIGhhbmRzaGFrZSBhbmQgRmFzdCBPcGVuIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6MzQuMjg4MDU4NjI5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDIyMDUzMTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE5OjM0LjI4ODY5NjM1OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0MjE5ODg3ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBhbmQgY2xlYW51cCBwYXRocyBmb3IgTVBUQ1AgYW5kIFRDUCBGYXN0IE9wZW4uIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZWAgZHVyaW5nIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgYW5kIGNoZWNrcyBgcnNrX2Ryb3BfcmVxKHJlcSlgIGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKClgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHNvY2sgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHdoZW4gYSByZXF1ZXN0IGlzIGRyb3BwZWQuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6IFRoZSBmaWVsZCBgZHJvcF9yZXFgIGluIGBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGB0Y3BfY29ubl9yZXF1ZXN0KClgIHdoZW4gdGhlIHJlcXVlc3Rfc29jayBpcyBjcmVhdGVkLCBlbnN1cmluZyBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcbjIuIEluZm8tbGVhayAvIFVzZXItc3BhY2UgY29weSBBbmFseXNpczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBvcHRpb24gYnVmZmVycyBtb2RpZmllZC5cXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMmI4YTE1ZWU4YjJlNDk0ZDdmMmY4NDZhNWY4ZTg1N2Q0Mzk2NzBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNDoxNjo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIGIvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbmluZGV4IDQ3MWM3OGJlNTUxMzcuLjIyNDk0ZmY3NDZjNzEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1xuKysrIGIvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbkBAIC0zMzcsNiArMzM3LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAoIWNoaWxkKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xuK1x0XHRiaF91bmxvY2tfc29jayhjaGlsZCk7XG4rXHRcdHNvY2tfcHV0KGNoaWxkKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRzcGluX2xvY2soXHUwMDI2cXVldWUtXHUwMDNlZmFzdG9wZW5xLmxvY2spO1xuIFx0cXVldWUtXHUwMDNlZmFzdG9wZW5xLnFsZW4rKztcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li5lYjBlNDI1OWMyODA3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtNzY2OSw2ICs3NjY5LDcgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXG4gXHR0Y3BfcnNrKHJlcSktXHUwMDNldHhoYXNoID0gbmV0X3R4X3JuZGhhc2goKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4gXHR0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgPSAwO1xuK1x0dGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XG4gI2VuZGlmXG4gXG4gXHR0Y3BfY2xlYXJfb3B0aW9ucyhcdTAwMjZ0bXBfb3B0KTtcbkBAIC03Nzc1LDYgKzc3NzYsMTAgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXG4gXHRcdFJFQURfT05DRShzay1cdTAwM2Vza19kYXRhX3JlYWR5KShzayk7XG4gXHRcdGJoX3VubG9ja19zb2NrKGZhc3RvcGVuX3NrKTtcbiBcdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xuK1x0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xuK1x0XHRyZXFza19mcmVlKHJlcSk7XG4rXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4rXHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIHtcbiBcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXRmb19saXN0ZW5lciA9IGZhbHNlO1xuIFx0XHRpZiAoIXdhbnRfY29va2llIFx1MDAyNlx1MDAyNlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6MzQuMjg4Njk3ODY5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3NzU5MDgwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHBhdGNoOlxuXG4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IElkZW50aWZ5aW5nIGByc2tfZHJvcF9yZXFgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIG1vdmUgd291bGQgYmUgdG8gcGlucG9pbnQgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGByc2tfZHJvcF9yZXFgLiBGaXJzdCwgYSBxdWljayBgZ3JlcGAgZm9yIHRoYXQgc3RyaW5nIHdpdGhpbiB0aGUgcGF0Y2ggaXRzZWxmLCBhbmQgdGhlbiBleHBhbmRpbmcgdGhlIHNlYXJjaCBiZXlvbmQsIGlmIG5lY2Vzc2FyeS4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0IGByc2tfZHJvcF9yZXFgICppcyouIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQncyBkZWZpbmVkLiBJcyBpdCBhIGZ1bmN0aW9uLCBhIG1hY3JvLCBhIHZhcmlhYmxlPyBBbmQganVzdCBhcyBpbXBvcnRhbnRseSwgd2hlcmUgYW5kIGhvdyBpcyBpdCAqdXNlZCogd2l0aGluIHRoZSBleGlzdGluZyBjb2RlYmFzZT8gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgcGF0dGVybnMgd2lsbCBnaXZlIHRoZSBtb3N0IGltbWVkaWF0ZSBjb250ZXh0LiBBbHNvLCBpdCBtYXkgYmUgdGhlIGludGVudGlvbiBvZiB0aGUgcGF0Y2ggdG8gaW50cm9kdWNlIGEgYGRyb3BfcmVxYCBhbmQgcGVyaGFwcyBgcnNrX2Ryb3BfcmVxYCBpcyBhIHJlbmFtZSBvciBhbGlhcy4gSSBzaG91bGQgaWRlbnRpZnkgaG93IGBkcm9wX3JlcWAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgZGVmaW5pdGlvbnMgYW5kIGNhbGwgc2l0ZXMgaXMgdGhlIGtleSB0byBhc3Nlc3NpbmcgaW1wYWN0IGFuZCByaXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo0Mi4wNjQ2MTA1MTdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjcwODU4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNrX2Ryb3BfcmVxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L21wdGNwLmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDEtXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNDI6c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDMte1xcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0yNDU9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI0OS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI1MDpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI1MS17XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MTk3PXN0cnVjdCBzb2NrICp0Y3BfZ2V0X2Nvb2tpZV9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTAtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjIxMTpcXHRcXHRpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjEyLVxcdFxcdFxcdHJlcXNrX3B1dChyZXEpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MzI2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMzktXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6MzQwOlxcdGlmIChvd25fcmVxIFxcdTAwMjZcXHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzQxLVxcdFxcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc2MjA9aW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Nzc4LVxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Nzc5OlxcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVxcdFxcdHJlcXNrX2ZyZWUocmVxKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTQzOlxcdGlmIChvd25fcmVxIFxcdTAwMjZcXHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cXHRcXHRyZXFza19xdWV1ZV9yZW1vdmVkKFxcdTAwMjZpbmV0X2NzayhyZXEtXFx1MDAzZXJza19saXN0ZW5lciktXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlLCByZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo0NC4yOTE3MDQwMTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzYyMDIxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJvcF9yZXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYz05ND1pbnQgYm5nZV9zZW5kX21zZyhzdHJ1Y3QgYm5nZV9hdXhyX2RldiAqYXV4cl9kZXYsIHN0cnVjdCBibmdlX2Z3X21zZyAqZndfbXNnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDctXFx0aWYgKHJjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmM6MTA4OlxcdFxcdGdvdG8gZHJvcF9yZXE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jLTExOS1cXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYzoxMjA6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMjEtXFx0Ym5nZV9od3JtX3JlcV9kcm9wKGJkLCByZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmM9MTUyMz1pbnQgYm5nZV9od3JtX3BvcnRfcXN0YXRzX2V4dChzdHJ1Y3QgYm5nZV9kZXYgKmJkLCB1OCBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE1OTctXFx0XFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE1OTg6XFx0XFx0XFx0XFx0Z290byBkcm9wX3JlcTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYy0xNTk5LVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE2MDYtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE2MDc6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTYwOC1cXHRibmdlX2h3cm1fcmVxX2Ryb3AoYmQsIHJlcV9xYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYz00Nj1zdGF0aWMgaW50IGJueHRfaHdybV90ZW1wX3F1ZXJ5KHN0cnVjdCBibnh0ICpicCwgdTggKnRlbXApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01Ny1cXHRpZiAocmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmM6NTg6XFx0XFx0Z290byBkcm9wX3JlcTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTY5LVxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYzo3MDpkcm9wX3JlcTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy03MS1cXHRod3JtX3JlcV9kcm9wKGJwLCByZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTIzNj1pbnQgYm54dF9zZW5kX21zZyhzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjU0LVxcdGlmIChyYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6MjU1OlxcdFxcdGdvdG8gZHJvcF9yZXE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy0yNjYtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzoyNjc6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI2OC1cXHRod3JtX3JlcV9kcm9wKGJwLCByZXEpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTA2PXN0YXRpYyBpbnQgZl9taWRpMl9zdGFydF9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTEyMS0vKiBEcm9wIHBlbmRpbmcgcmVxdWVzdHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExMjI6c3RhdGljIHZvaWQgZl9taWRpMl9kcm9wX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIwND1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXAoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA1LXtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDY6XFx0Zl9taWRpMl9kcm9wX3JlcXModXNiX2VwKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDctXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDA9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQyLXtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDM6XFx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfaW4pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcXHRmX21pZGkyX2Ryb3BfcmVxcyhlcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0NS1cXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyhlcF9pbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oPTE1MD1zdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oLTE1Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuaW5jbHVkZS9saW51eC90Y3AuaDoxNTg6XFx0Ym9vbFxcdFxcdFxcdFxcdGRyb3BfcmVxO1xcbmluY2x1ZGUvbGludXgvdGNwLmgtMTU5LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0xMzc9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0MS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE0MjpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0My17XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNDQ6XFx0cmV0dXJuIHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgXFx1MDAyNlxcdTAwMjYgdGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0NS19XFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI0NT1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjQ5LVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjUwOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjUxLXtcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMC1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjExOlxcdFxcdGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTItXFx0XFx0XFx0cmVxc2tfcHV0KHJlcSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz0zMjY9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMzOS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozNDA6XFx0aWYgKG93bl9yZXEgXFx1MDAyNlxcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zNDEtXFx0XFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyMi1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDIzOnN0YXRpYyBpbmxpbmUgdm9pZCBwcl9kcm9wX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIF9fdTE2IHBvcnQsIGludCBmYW1pbHkpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyNC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY3MS1cXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWlzX21wdGNwID0gMDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjcyOlxcdHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjczLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczMC1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NzMxOlxcdFxcdFxcdHByX2Ryb3BfcmVxKHJlcSwgbnRvaHModGNwX2hkcihza2IpLVxcdTAwM2Vzb3VyY2UpLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3MzItXFx0XFx0XFx0XFx0ICAgIHJza19vcHMtXFx1MDAzZWZhbWlseSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Nzc4LVxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Nzc5OlxcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVxcdFxcdHJlcXNrX2ZyZWUocmVxKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTQzOlxcdGlmIChvd25fcmVxIFxcdTAwMjZcXHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cXHRcXHRyZXFza19xdWV1ZV9yZW1vdmVkKFxcdTAwMjZpbmV0X2NzayhyZXEtXFx1MDAzZXJza19saXN0ZW5lciktXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlLCByZXEpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy04NjItXFxubmV0L21wdGNwL3N1YmZsb3cuYzo4NjM6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODY0LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05NDgtXFx0XFx0XFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5BQ0tSWCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5NDk6XFx0XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IHRydWU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05NTAtXFx0XFx0fVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05NjItXFx0bXB0Y3Bfc3ViZmxvd19kcm9wX2N0eChjaGlsZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5NjM6XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IHRydWU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05NjQtXFx0aW5ldF9jc2tfcHJlcGFyZV9mb3JfZGVzdHJveV9zb2NrKGNoaWxkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6NDYuNDY3OTE2NDQ5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMTE5NjcxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgYW5kIE1QVENQIEtlcm5lbCBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gVENQIGFuZCBNUFRDUCBpbXBsZW1lbnRhdGlvbnMuIEknbSB0aGlua2luZyB0aGUgYmVzdCBwbGFjZSB0byBiZWdpbiBpcyB3aXRoIGBpbmNsdWRlL2xpbnV4L3RjcC5oYCwgYXJvdW5kIGxpbmUgMTUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhlIGNvcmUgVENQIGRhdGEgc3RydWN0dXJlcyBhbmQgbWF5YmUgc29tZSBrZXkgZnVuY3Rpb24gcHJvdG90eXBlcy4gQWZ0ZXIgdGhhdCwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIGluc3BlY3QgYGluY2x1ZGUvbmV0L21wdGNwLmhgIGFyb3VuZCBsaW5lIDEzNy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIE1QVENQLXNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIHBvc3NpYmx5IHNvbWUgY29yZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIG11bHRpcGF0aCBUQ1AgY29ubmVjdGlvbnMgdGhlcmUuXG5cblRoZW4sIEknbGwgc3dpdGNoIG92ZXIgdG8gdGhlIGltcGxlbWVudGF0aW9ucywgc28gSSBuZWVkIHRvIGNoZWNrIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEkga25vdyB0aGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGluY29taW5nIFRDUCBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyByZXNpZGVzLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpbmdzIGxpa2Ugc2VnbWVudCByZWFzc2VtYmx5LCBBQ0sgcHJvY2Vzc2luZywgYW5kIGNvbmdlc3Rpb24gY29udHJvbCB0aGVyZS4gQW5kIHNpbmNlIEknbSBpbnRlcmVzdGVkIGluIFRDUCBGYXN0IE9wZW4sIEkgc2hvdWxkIGFsc28gbG9vayBhdCBgbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNgLiBJIGV4cGVjdCB0aGVyZSdsbCBiZSB0aGUgY29kZSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBmYXN0IG9wZW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBkYXRhIHRyYW5zZmVyLiBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBoZWFkZXIgZmlsZXMgd2l0aCB0aGVzZSBpbXBsZW1lbnRhdGlvbiBmaWxlcyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4NywiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo0OS40Nzk4ODczODhaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdGNwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdCAqIG9ubHkgZm91ciBvcHRpb25zIHdpbGwgZml0IGluIGEgc3RhbmRhcmQgVENQIGhlYWRlciAqL1xcbiAxNDY6XFx0I2RlZmluZSBUQ1BfTlVNX1NBQ0tTIDRcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayB7XFxuIDE1MTpcXHRcXHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgXFx0cmVxO1xcbiAxNTI6XFx0XFx0Y29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9zcGVjaWZpYztcXG4gMTUzOlxcdFxcdHU2NFxcdFxcdFxcdFxcdHNudF9zeW5hY2s7IC8qIGZpcnN0IFNZTkFDSyBzZW50IHRpbWUgKi9cXG4gMTU0OlxcdFxcdGJvb2xcXHRcXHRcXHRcXHR0Zm9fbGlzdGVuZXI7XFxuIDE1NTpcXHRcXHRib29sXFx0XFx0XFx0XFx0aXNfbXB0Y3A7XFxuIDE1NjpcXHRcXHRib29sXFx0XFx0XFx0XFx0cmVxX3VzZWNfdHM7XFxuIDE1NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuIDE1ODpcXHRcXHRib29sXFx0XFx0XFx0XFx0ZHJvcF9yZXE7XFxuIDE1OTpcXHQjZW5kaWZcXG4gMTYwOlxcdFxcdHUzMlxcdFxcdFxcdFxcdHR4aGFzaDtcXG4gMTYxOlxcdFxcdHUzMlxcdFxcdFxcdFxcdHJjdl9pc247XFxuIDE2MjpcXHRcXHR1MzJcXHRcXHRcXHRcXHRzbnRfaXNuO1xcbiAxNjM6XFx0XFx0dTMyXFx0XFx0XFx0XFx0dHNfb2ZmO1xcbiAxNjQ6XFx0XFx0dTMyXFx0XFx0XFx0XFx0c250X3RzdmFsX2ZpcnN0O1xcbiAxNjU6XFx0XFx0dTMyXFx0XFx0XFx0XFx0c250X3RzdmFsX2xhc3Q7XFxuIDE2NjpcXHRcXHR1MzJcXHRcXHRcXHRcXHRsYXN0X29vd19hY2tfdGltZTsgLyogbGFzdCBTWU5BQ0sgKi9cXG4gMTY3OlxcdFxcdHUzMlxcdFxcdFxcdFxcdHJjdl9ueHQ7IC8qIHRoZSBhY2sgIyBieSBTWU5BQ0suIEZvclxcbiAxNjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAqIEZhc3RPcGVuIGl0J3MgdGhlIHNlcSNcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgKiBhZnRlciBkYXRhLWluLVNZTi5cXG4gMTcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgKi9cXG4gMTcxOlxcdFxcdHU4XFx0XFx0XFx0XFx0c3luX3RvcztcXG4gMTcyOlxcdFxcdGJvb2xcXHRcXHRcXHRcXHRhY2NlY25fb2s7XFxuIDE3MzpcXHRcXHR1OFxcdFxcdFxcdFxcdHN5bl9lY3Rfc250OiAyLFxcbiAxNzQ6XFx0XFx0XFx0XFx0XFx0XFx0c3luX2VjdF9yY3Y6IDIsXFxuIDE3NTpcXHRcXHRcXHRcXHRcXHRcXHRhY2NlY25fZmFpbF9tb2RlOjQ7XFxuIDE3NjpcXHRcXHR1OFxcdFxcdFxcdFxcdHNhd19hY2NlY25fb3B0ICA6MjtcXG4gMTc3OlxcdCNpZmRlZiBDT05GSUdfVENQX0FPXFxuIDE3ODpcXHRcXHR1OFxcdFxcdFxcdFxcdGFvX2tleWlkO1xcbiAxNzk6XFx0XFx0dThcXHRcXHRcXHRcXHRhb19yY3ZfbmV4dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6NDkuNDc5OTk5MTE4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L21wdGNwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRyZXR1cm4gdGNwX3JzayhyZXEpLVxcdTAwM2Vpc19tcHRjcDtcXG4gMTQwOlxcdH1cXG4gMTQxOlxcdFxcbiAxNDI6XFx0c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIDE0MzpcXHR7XFxuIDE0NDpcXHRcXHRyZXR1cm4gdGNwX3JzayhyZXEpLVxcdTAwM2Vpc19tcHRjcCBcXHUwMDI2XFx1MDAyNiB0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxO1xcbiAxNDU6XFx0fVxcbiAxNDY6XFx0XFxuIDE0NzpcXHR2b2lkIG1wdGNwX3NwYWNlKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCAqc3BhY2UsIGludCAqZnVsbF9zcGFjZSk7XFxuIDE0ODpcXHRib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTQ5OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XFxuIDE1MDpcXHRib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxcbiAxNTE6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xcbiAxNTI6XFx0aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxNTM6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZywgYm9vbCBoYXNfdHMsXFxuIDE1NDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xcbiAxNTU6XFx0Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIDE1NjpcXHRcXG4gMTU3OlxcdHZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxuIDE1ODpcXHRcXHRcXHRcXHQgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcXG4gMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo0OS40ODAwNTk0OThaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzODczMzY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgSGVhZGVyIERlZmluaXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbm9uLU1QVENQIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gTVBUQ1AgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIGBpbmNsdWRlL25ldC9tcHRjcC5oYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMjQ1LiBJIGtub3cgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIGludGVyYWN0cyB3aXRoIHRoZSBNUFRDUCBsYXllci4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbGluZXMgdXAgd2l0aCBteSBtZW50YWwgbW9kZWwgb2YgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODgyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1MS42MTg3OTU4NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbXB0Y3AuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0c3RhdGljIGlubGluZSBib29sIHNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gMjQxOlxcdHtcXG4gMjQyOlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQzOlxcdH1cXG4gMjQ0OlxcdFxcbiAyNDU6XFx0c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIDI0NjpcXHR7XFxuIDI0NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI0ODpcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiAyNTE6XFx0e1xcbiAyNTI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNTM6XFx0fVxcbiAyNTQ6XFx0XFxuIDI1NTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAyNTY6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgKnNpemUsXFxuIDI1NzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG4gMjU4OlxcdHtcXG4gMjU5OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjYwOlxcdH1cXG4gMjYxOlxcdFxcbiAyNjI6XFx0c3RhdGljIGlubGluZSBib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gMjYzOlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCAqc2l6ZSxcXG4gMjY0OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6NTEuNjE4ODk3ODQ5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDM3NTI3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgRmFzdCBPcGVuIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIFRDUCBGYXN0IE9wZW4gKFRGTykgYW5kIHN0YW5kYXJkIFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBhcm91bmQgaW4gdGhlIGBuZXQvaXB2NGAgZGlyZWN0b3J5LCBuYXR1cmFsbHkuIEkgc2VlbSB0byByZWNhbGwgc29tZSBrZXkgbG9naWMgYmVpbmcgaW4gYHRjcF9mYXN0b3Blbi5jYCwgYW5kIEkgYmVsaWV2ZSB0aGF0IGxpbmUgMzM3IGlzIGEgbGlrZWx5IGFyZWEgdG8gc3RhcnQsIG1heWJlIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmFzdCBvcGVuIGxvZ2ljIGluIHRoZSBrZXJuZWwncyBoYW5kbGluZy4gVGhlbiwgSSBzaG91bGQgaGVhZCBvdmVyIHRvIGB0Y3BfaW5wdXQuY2AuIEkgbmVlZCB0byBjb21wYXJlIGhvdyBub3JtYWwgVENQIGNvbm5lY3Rpb25zIGFyZSB0cmVhdGVkIGR1cmluZyBwcm9jZXNzaW5nLCBjb21wYXJlZCB0byBob3cgVEZPIG1pZ2h0IGJlIGhhbmRsZWQuIEkgZmlndXJlIHRoYXQgbGluZSA3NjY5IGluIGB0Y3BfaW5wdXQuY2AgaXMgcHJvYmFibHkgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gdGhlcmUuIFRoZXNlIHR3byBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIGNvbm5lY3Rpb24gc2V0dXAgcHJvY2VzcywgYW5kIHRoZSBkaWZmZXJlbmNlcyB3aGVuIFRGTyBpcyBpbiBwbGF5LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDI3LCJPdXRwdXRUb2tlbnMiOjc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1NC4xMjI2NTM0MTNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRcXHR9XFxuIDMyMTpcXHRvdXQ6XFxuIDMyMjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzIzOlxcdFxcdHJldHVybiByZXQ7XFxuIDMyNDpcXHR9XFxuIDMyNTpcXHRcXG4gMzI2OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXFxuIDMyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiAzMjk6XFx0e1xcbiAzMzA6XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cDtcXG4gMzMxOlxcdFxcdHN0cnVjdCByZXF1ZXN0X3NvY2tfcXVldWUgKnF1ZXVlID0gXFx1MDAyNmluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XFxuIDMzMjpcXHRcXHRzdHJ1Y3Qgc29jayAqY2hpbGQ7XFxuIDMzMzpcXHRcXHRib29sIG93bl9yZXE7XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdGNoaWxkID0gaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FmX29wcy1cXHUwMDNlc3luX3JlY3Zfc29jayhzaywgc2tiLCByZXEsIE5VTEwsXFxuIDMzNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgTlVMTCwgXFx1MDAyNm93bl9yZXEsIE5VTEwpO1xcbiAzMzc6XFx0XFx0aWYgKCFjaGlsZClcXG4gMzM4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRpZiAob3duX3JlcSBcXHUwMDI2XFx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xcbiAzNDE6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xcbiAzNDI6XFx0XFx0XFx0c29ja19wdXQoY2hpbGQpO1xcbiAzNDM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDM0NDpcXHRcXHR9XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2cXVldWUtXFx1MDAzZWZhc3RvcGVucS5sb2NrKTtcXG4gMzQ3OlxcdFxcdHF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEucWxlbisrO1xcbiAzNDg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdC8qIEluaXRpYWxpemUgdGhlIGNoaWxkIHNvY2tldC4gSGF2ZSB0byBmaXggc29tZSB2YWx1ZXMgdG8gdGFrZVxcbiAzNTE6XFx0XFx0ICogaW50byBhY2NvdW50IHRoZSBjaGlsZCBpcyBhIEZhc3QgT3BlbiBzb2NrZXQgYW5kIGlzIGNyZWF0ZWRcXG4gMzUyOlxcdFxcdCAqIG9ubHkgb3V0IG9mIHRoZSBiaXRzIGNhcnJpZWQgaW4gdGhlIFNZTiBwYWNrZXQuXFxuIDM1MzpcXHRcXHQgKi9cXG4gMzU0OlxcdFxcdHRwID0gdGNwX3NrKGNoaWxkKTtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRwLVxcdTAwM2VmYXN0b3Blbl9yc2ssIHJlcSk7XFxuIDM1NzpcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXRmb19saXN0ZW5lciA9IHRydWU7XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdC8qIFJGQzEzMjM6IFRoZSB3aW5kb3cgaW4gU1lOIFxcdTAwMjYgU1lOL0FDSyBzZWdtZW50cyBpcyBuZXZlclxcbiAzNjA6XFx0XFx0ICogc2NhbGVkLiBTbyBjb3JyZWN0IGl0IGFwcHJvcHJpYXRlbHkuXFxuIDM2MTpcXHRcXHQgKi9cXG4gMzYyOlxcdFxcdHRwLVxcdTAwM2VzbmRfd25kID0gbnRvaHModGNwX2hkcihza2IpLVxcdTAwM2V3aW5kb3cpO1xcbiAzNjM6XFx0XFx0dHAtXFx1MDAzZW1heF93aW5kb3cgPSB0cC1cXHUwMDNlc25kX3duZDtcXG4gMzY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1NC4xMjI3NTc5NDNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NjYwOlxcdFxcbjc2NjE6XFx0XFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcXG43NjYyOlxcdFxcdGlmICghcmVxKVxcbjc2NjM6XFx0XFx0XFx0Z290byBkcm9wO1xcbjc2NjQ6XFx0XFxuNzY2NTpcXHRcXHRyZXEtXFx1MDAzZXN5bmNvb2tpZSA9IHdhbnRfY29va2llO1xcbjc2NjY6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VhZl9zcGVjaWZpYyA9IGFmX29wcztcXG43NjY3OlxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldHNfb2ZmID0gMDtcXG43NjY4OlxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlcmVxX3VzZWNfdHMgPSBmYWxzZTtcXG43NjY5OlxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldHhoYXNoID0gbmV0X3R4X3JuZGhhc2goKTtcXG43NjcwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcXG43NjcxOlxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgPSAwO1xcbjc2NzI6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xcbjc2NzM6XFx0I2VuZGlmXFxuNzY3NDpcXHRcXG43Njc1OlxcdFxcdHRjcF9jbGVhcl9vcHRpb25zKFxcdTAwMjZ0bXBfb3B0KTtcXG43Njc2OlxcdFxcdHRtcF9vcHQubXNzX2NsYW1wID0gYWZfb3BzLVxcdTAwM2Vtc3NfY2xhbXA7XFxuNzY3NzpcXHRcXHR0bXBfb3B0LnVzZXJfbXNzICA9IFJFQURfT05DRSh0cC1cXHUwMDNlcnhfb3B0LnVzZXJfbXNzKTtcXG43Njc4OlxcdFxcdHRjcF9wYXJzZV9vcHRpb25zKHNvY2tfbmV0KHNrKSwgc2tiLCBcXHUwMDI2dG1wX29wdCwgMCxcXG43Njc5OlxcdFxcdFxcdFxcdCAgd2FudF9jb29raWUgPyBOVUxMIDogXFx1MDAyNmZvYyk7XFxuNzY4MDpcXHRcXG43NjgxOlxcdFxcdGlmICh3YW50X2Nvb2tpZSBcXHUwMDI2XFx1MDAyNiAhdG1wX29wdC5zYXdfdHN0YW1wKVxcbjc2ODI6XFx0XFx0XFx0dGNwX2NsZWFyX29wdGlvbnMoXFx1MDAyNnRtcF9vcHQpO1xcbjc2ODM6XFx0XFxuNzY4NDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU01DKSBcXHUwMDI2XFx1MDAyNiB3YW50X2Nvb2tpZSlcXG43Njg1OlxcdFxcdFxcdHRtcF9vcHQuc21jX29rID0gMDtcXG43Njg2OlxcdFxcbjc2ODc6XFx0XFx0dG1wX29wdC50c3RhbXBfb2sgPSB0bXBfb3B0LnNhd190c3RhbXA7XFxuNzY4ODpcXHRcXHR0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgXFx1MDAyNnRtcF9vcHQsIHNrYiwgc2spO1xcbjc2ODk6XFx0XFx0aW5ldF9yc2socmVxKS1cXHUwMDNlbm9fc3JjY2hlY2sgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XFxuNzY5MDpcXHRcXG43NjkxOlxcdFxcdC8qIE5vdGU6IHRjcF92Nl9pbml0X3JlcSgpIG1pZ2h0IG92ZXJyaWRlIGlyX2lpZiBmb3IgbGluayBsb2NhbHMgKi9cXG43NjkyOlxcdFxcdGluZXRfcnNrKHJlcSktXFx1MDAzZWlyX2lpZiA9IGluZXRfcmVxdWVzdF9ib3VuZF9kZXZfaWYoc2ssIHNrYik7XFxuNzY5MzpcXHRcXG43Njk0OlxcdFxcdGlmICh3YW50X2Nvb2tpZSkge1xcbjc2OTU6XFx0XFx0XFx0aXNuID0gY29va2llX2luaXRfc2VxdWVuY2UoYWZfb3BzLCBza2IsIFxcdTAwMjZyZXEtXFx1MDAzZW1zcyk7XFxuNzY5NjpcXHRcXHRcXHQvKiBVc2UgdGhlIGNvb2tpZSBhcyB0eGhhc2ggc28gdGhlIFNZTi1BQ0sgYW5kIHRoZSBsYXRlciBmdWxsXFxuNzY5NzpcXHRcXHRcXHQgKiBzb2NrZXQgbWFrZSB0aGUgc2FtZSBlZ3Jlc3MgY2hvaWNlIChJUHY2IEVDTVAgcGF0aDsgSVB2NCBUWCBxdWV1ZSkuXFxuNzY5ODpcXHRcXHRcXHQgKi9cXG43Njk5OlxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldHhoYXNoID0gaXNuO1xcbjc3MDA6XFx0XFx0fVxcbjc3MDE6XFx0XFxuNzcwMjpcXHRcXHRkc3QgPSBhZl9vcHMtXFx1MDAzZXJvdXRlX3JlcShzaywgc2tiLCBcXHUwMDI2ZmwsIHJlcSwgd2FudF9jb29raWUgPyAwIDogaXNuKTtcXG43NzAzOlxcdFxcdGlmICghZHN0KVxcbjc3MDQ6XFx0XFx0XFx0Z290byBkcm9wX2FuZF9mcmVlO1xcbjc3MDU6XFx0XFxuNzcwNjpcXHRcXHRpZiAodG1wX29wdC50c3RhbXBfb2sgfHwgKCF3YW50X2Nvb2tpZSBcXHUwMDI2XFx1MDAyNiAhaXNuKSlcXG43NzA3OlxcdFxcdFxcdHN0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKGFmX29wcy1cXHUwMDNlaW5pdF9zZXFfYW5kX3RzX29mZixcXG43NzA4OlxcdFxcdFxcdFxcdFxcdFxcdHRjcF92Nl9pbml0X3NlcV9hbmRfdHNfb2ZmLFxcbjc3MDk6XFx0XFx0XFx0XFx0XFx0XFx0dGNwX3Y0X2luaXRfc2VxX2FuZF90c19vZmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE5OjU0LjEyMzgyODgzM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzU4OTYxMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBmb2N1c2luZyBvbiBsaW5lcyA3NzY1LTc4MDAgb2YgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYDpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIElucHV0IEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRob3NlIGxpbmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiBsaW5lcyA3NzY1LTc4MDAgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgVENQIGlucHV0IHByb2Nlc3NpbmcsIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBiZSBoYW5kbGluZyBhIGNyaXRpY2FsIGFzcGVjdCwgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgaW5jb21pbmcgVENQIHNlZ21lbnRzIGFyZSBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IGludGVncmF0ZWQgaW50byB0aGUgY29ubmVjdGlvbidzIHN0YXRlLlxuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgbG9naWMgcmVsYXRlZCB0byByZWFzc2VtYmx5LCBhY2tub3dsZWRnZW1lbnQgaGFuZGxpbmcsIHdpbmRvdyBtYW5hZ2VtZW50LCBvciBwZXJoYXBzIGV2ZW4gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSB3aXRoaW4gdGhlIHJlY2VpdmluZyBUQ1Agc3RhY2suIFRoZSBjb2RlIGhlcmUgaXMgdGhlIGhlYXJ0IG9mIHJlbGlhYmxlIGRhdGEgdHJhbnNmZXIuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGlzIGNvZGUgaXMgZG9pbmcgYW55dGhpbmcgdW51c3VhbCwgb3IgbWF5YmUgc29tZXRoaW5nIEkgaGF2ZSBiZWVuIHF1ZXN0aW9uaW5nIGluIG15IG93biBpbXBsZW1lbnRhdGlvbiBmb3IgYSB3aGlsZS4gSXMgdGhlcmUgYW55dGhpbmcgcGFydGljdWxhcmx5IGluZWZmaWNpZW50LCBvciBjbGV2ZXI/IEl0J3MgaGlnaGx5IHByb2JhYmxlIHRoZSBjb2RlIG1hbmFnZXMgYnVmZmVyIGFsbG9jYXRpb25zIHRvIG1pbmltaXplIHVubmVjZXNzYXJ5IG1lbW9yeSBjb3BpZXMsIGFuZCBtYW5hZ2VzIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGUgY2hhbGxlbmdlIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJJ2xsIGJlIGxvb2tpbmcgY2FyZWZ1bGx5IGF0IGhvdyB0aGlzIGNvZGUgc25pcHBldCB0YWNrbGVzIFRDUCdzIGluaGVyZW50IGNvbXBsZXhpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1Ni40ODI3OTUzNzZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc3NjU6XFx0XFx0XFx0ZmFzdG9wZW5fc2sgPSB0Y3BfdHJ5X2Zhc3RvcGVuKHNrLCBza2IsIHJlcSwgXFx1MDAyNmZvYywgZHN0KTtcXG43NzY2OlxcdFxcdH1cXG43NzY3OlxcdFxcdGlmIChmYXN0b3Blbl9zaykge1xcbjc3Njg6XFx0XFx0XFx0YWZfb3BzLVxcdTAwM2VzZW5kX3N5bmFjayhmYXN0b3Blbl9zaywgZHN0LCBcXHUwMDI2ZmwsIHJlcSxcXG43NzY5OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9jLCBUQ1BfU1lOQUNLX0ZBU1RPUEVOLCBza2IpO1xcbjc3NzA6XFx0XFx0XFx0LyogQWRkIHRoZSBjaGlsZCBzb2NrZXQgZGlyZWN0bHkgaW50byB0aGUgYWNjZXB0IHF1ZXVlICovXFxuNzc3MTpcXHRcXHRcXHRpZiAoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBmYXN0b3Blbl9zaykpIHtcXG43NzcyOlxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGZhc3RvcGVuX3NrKTtcXG43NzczOlxcdFxcdFxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG43Nzc0OlxcdFxcdFxcdFxcdGdvdG8gZHJvcF9hbmRfZnJlZTtcXG43Nzc1OlxcdFxcdFxcdH1cXG43Nzc2OlxcdFxcdFxcdFJFQURfT05DRShzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xcbjc3Nzc6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soZmFzdG9wZW5fc2spO1xcbjc3Nzg6XFx0XFx0XFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xcbjc3Nzk6XFx0XFx0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbjc3ODA6XFx0XFx0XFx0cmVxc2tfZnJlZShyZXEpO1xcbjc3ODE6XFx0XFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG43NzgyOlxcdFxcdFxcdHJldHVybiAwO1xcbjc3ODM6XFx0XFx0fSBlbHNlIHtcXG43Nzg0OlxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldGZvX2xpc3RlbmVyID0gZmFsc2U7XFxuNzc4NTpcXHRcXHRcXHRpZiAoIXdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2XFxuNzc4NjpcXHRcXHRcXHQgICAgdW5saWtlbHkoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKHNrLCByZXEpKSkge1xcbjc3ODc6XFx0XFx0XFx0XFx0cmVxc2tfZnJlZShyZXEpO1xcbjc3ODg6XFx0XFx0XFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG43Nzg5OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjc3OTA6XFx0XFx0XFx0fVxcbjc3OTE6XFx0XFx0XFx0YWZfb3BzLVxcdTAwM2VzZW5kX3N5bmFjayhzaywgZHN0LCBcXHUwMDI2ZmwsIHJlcSwgXFx1MDAyNmZvYyxcXG43NzkyOlxcdFxcdFxcdFxcdFxcdCAgICAhd2FudF9jb29raWUgPyBUQ1BfU1lOQUNLX05PUk1BTCA6XFxuNzc5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBUQ1BfU1lOQUNLX0NPT0tJRSxcXG43Nzk0OlxcdFxcdFxcdFxcdFxcdCAgICBza2IpO1xcbjc3OTU6XFx0XFx0XFx0aWYgKHdhbnRfY29va2llKSB7XFxuNzc5NjpcXHRcXHRcXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuNzc5NzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG43Nzk4OlxcdFxcdFxcdH1cXG43Nzk5OlxcdFxcdH1cXG43ODAwOlxcdFxcdHJlcXNrX3B1dChyZXEpO1xcbjc4MDE6XFx0XFx0cmV0dXJuIDA7XFxuNzgwMjpcXHRcXG43ODAzOlxcdGRyb3BfYW5kX3JlbGVhc2U6XFxuNzgwNDpcXHRcXHRkc3RfcmVsZWFzZShkc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1Ni40ODMyMTg1NTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg2MzYxMDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBDb25uZWN0aW9uIFJlcXVlc3QgRmxvdyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIldoYXQgZXhhY3RseSBpcyB0aGlzIHBhdGNoIHRyeWluZyB0byBhY2NvbXBsaXNoP1wiIEknbSBzZWVpbmcgYSByZWZlcmVuY2UgdG8gYHRjcF9jb25uX3JlcXVlc3QoKWAgYW5kIHNvbWUgaW5pdGlhbGl6YXRpb24gb2YgYHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO2AuIFRoYXQgbWFrZXMgbWUgdGhpbmsgdGhpcyB2YXJpYWJsZSwgYGRyb3BfcmVxYCwgaXMgY3J1Y2lhbCB0byBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLiBJIGFsc28gc2VlIHRoYXQgdGhlcmUncyBhIGNoZWNrLCBhbiBgZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHsgLi4uIH1gLCBtZWFuaW5nIHRoZSBjb2RlIGlzIGVpdGhlciBhY2NlcHRpbmcgb3IgZHJvcHBpbmcgYSByZXF1ZXN0IGJhc2VkIG9uIHRoYXQgZmxhZy4gU2VlbXMgcHJldHR5IGZ1bmRhbWVudGFsLlxuXG5UaGVuIEkgbW92ZWQgb250byBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAuIEhlcmUsIHRoZSBgZHJvcF9yZXFgIGNoZWNrIHJlYXBwZWFyczogYGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkgeyAuLi4gfWAuIEl0J3MgdXNlZCB0byBiYWlsIG91dCBvZiBjcmVhdGluZyBhIGNoaWxkIHNvY2tldCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoZSBgb3duX3JlcWAgY29uZGl0aW9uIGxpa2VseSBpcyByZWxhdGVkIHRvIEZhc3QgT3BlbiBvciBhIHNpbWlsYXIgTVBUQ1AgY29udGV4dCwgYW5kIHN1Z2dlc3RzIHRoYXQgYGRyb3BfcmVxYCBpcyB0aGUgZmluYWwgZGV0ZXJtaW5hbnQgZm9yIHdoZXRoZXIgYSBjaGlsZCBzb2NrZXQgaXMgYWxsb2NhdGVkLlxuXG5UaGlzIGlzIGEgZ29vZCBwb2ludCB0byBwYXVzZSBhbmQgaW52ZXN0aWdhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdGF0ZXMgc3Vycm91bmRpbmcgYGRyb3BfcmVxYC4gUmlnaHQgbm93LCBJIHNlZSBpdCdzIGluaXRpYWxpemVkIHRvIGZhbHNlLiBUaGUgY29uZGl0aW9uYWwgY2hlY2tzIEkgc2VlLCBzdWdnZXN0IGl0IGdldHMgc2V0IHRvIHRydWUsIGF0IHNvbWUgcG9pbnQsIGFuZCB0aGVuIHRoZSByZXF1ZXN0IGlzIGRyb3BwZWQuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBzZWFyY2ggZm9yIGl0cyB1c2FnZSwgaW4gdGhlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGByc2tfZHJvcF9yZXEoKWAgZ2V0cyBzZXQgYW5kIHdoeS4gR2l2ZW4gdGhlIE1QVENQIGNvbm5lY3Rpb24gY29udGV4dCwgSSB3aWxsIGdyZXAgdGhlIG1wdGNwIGRpcmVjdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyMDowMC4zNDY4MzQyNjdaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9zdWJmbG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODU1OlxcdFxcbiA4NTY6XFx0Y3JlYXRlX2NoaWxkOlxcbiA4NTc6XFx0XFx0Y2hpbGQgPSBsaXN0ZW5lci1cXHUwMDNlaWNza19hZl9vcHMtXFx1MDAzZXN5bl9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBkc3QsXFxuIDg1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJlcV91bmhhc2gsIG93bl9yZXEsIG9wdF9jaGlsZF9pbml0KTtcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0aWYgKGNoaWxkIFxcdTAwMjZcXHUwMDI2ICpvd25fcmVxKSB7XFxuIDg2MTpcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChjaGlsZCk7XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0XFx0Lyogd2UgbmVlZCB0byBmYWxsYmFjayBvbiBjdHggYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBvbiBwcmUtcmVxc1xcbiA4NjY6XFx0XFx0XFx0ICogY2hlY2tpbmcgYWJvdmUuIEluIHRoZSBsYXR0ZXIgc2NlbmFyaW8gd2UgYWRkaXRpb25hbGx5IG5lZWRcXG4gODY3OlxcdFxcdFxcdCAqIHRvIHJlc2V0IHRoZSBjb250ZXh0IHRvIG5vbiBNUFRDUCBzdGF0dXMuXFxuIDg2ODpcXHRcXHRcXHQgKi9cXG4gODY5OlxcdFxcdFxcdGlmICghY3R4IHx8IGZhbGxiYWNrKSB7XFxuIDg3MDpcXHRcXHRcXHRcXHRpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHtcXG4gODcxOlxcdFxcdFxcdFxcdFxcdGlmICghY3R4KVxcbiA4NzI6XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG4gODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCk7XFxuIDg3NDpcXHRcXHRcXHRcXHRcXHRlbHNlXFxuIDg3NTpcXHRcXHRcXHRcXHRcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxcbiA4NzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTtcXG4gODc3OlxcdFxcdFxcdFxcdFxcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApO1xcbiA4Nzg6XFx0XFx0XFx0XFx0XFx0Z290byBkaXNwb3NlX2NoaWxkO1xcbiA4Nzk6XFx0XFx0XFx0XFx0fVxcbiA4ODA6XFx0XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gODgxOlxcdFxcdFxcdH1cXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0XFx0Lyogc3NrIGluaGVyaXRzIG9wdGlvbnMgb2YgbGlzdGVuZXIgc2sgKi9cXG4gODg0OlxcdFxcdFxcdGN0eC1cXHUwMDNlc2V0c29ja29wdF9zZXEgPSBsaXN0ZW5lci1cXHUwMDNlc2V0c29ja29wdF9zZXE7XFxuIDg4NTpcXHRcXG4gODg2OlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZW1wX2NhcGFibGUpIHtcXG4gODg3OlxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXFx1MDAzZWNvbm4sIFxcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xcbiA4ODg6XFx0XFx0XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWNvbm4pXFxuIDg4OTpcXHRcXHRcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbiA4OTA6XFx0XFxuIDg5MTpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXN1YmZsb3dfaWQgPSAxO1xcbiA4OTI6XFx0XFx0XFx0XFx0b3duZXIgPSBtcHRjcF9zayhjdHgtXFx1MDAzZWNvbm4pO1xcbiA4OTM6XFx0XFxuIDg5NDpcXHRcXHRcXHRcXHRpZiAobXBfb3B0LmRlbnlfam9pbl9pZDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjIwOjAwLjM0Njk5NjgyN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTYxNTU4NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJlYXNvbmluZzogRGV0ZXJtaW5pbmcgdGhlIE5lZWQgZm9yIGEgRnV6emluZyBTZXNzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIGNvbmNlcm4gaGVyZSBpcyBtYWtpbmcgc3VyZSB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gaG93IE1QVENQIGhhbmRsZXMgRmFzdCBPcGVuIGFuZCBjb25uZWN0aW9uIHJlcXVlc3RzLCBzcGVjaWZpY2FsbHkgd2hlbiBhIHN1YmZsb3cgZmFpbHMgZHVyaW5nIHRoZSBqb2luIHByb2Nlc3MuICBJdCBhcHBlYXJzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBgZHJvcF9yZXFgIGZsYWcgd2l0aGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBhbmQgYHRjcF9jb25uX3JlcXVlc3RgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGxvZ2ljLiBXaGVuIGB0Y3BfdHJ5X2Zhc3RvcGVuYCBjYWxscyBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAsIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgIG1pZ2h0IGJlIGNhbGxlZC4gSWYgYW4gTVBUQ1Agam9pbiBmYWlscywgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2Agc2V0cyBgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gdHJ1ZWAuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNpdHVhdGlvbnMgd2hlcmUgdGhpcyBgZHJvcF9yZXFgIHdhc24ndCBwcm9wZXJseSBjaGVja2VkIGJlZm9yZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBkYW5nbGluZyBzb2NrZXRzIG9yIG1lbW9yeSBsZWFrcy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIG9uIHRoZSBtZW1vcnkgc2FmZXR5OiBGaXJzdCwgYGRyb3BfcmVxYCBpcyBhIGJvb2xlYW4gd2l0aGluIGBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja2AuIEl0J3MgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGB0Y3BfY29ubl9yZXF1ZXN0YCB3aGVuIHRoZSByZXF1ZXN0IHNvY2sgKGByZXFgKSBpcyBhbGxvY2F0ZWQuIEkgY29uZmlybWVkIHRoaXMuIFRoZSBgaW5ldF9yZXFza19hbGxvY2AgdXNlcyBlaXRoZXIgYGttZW1fY2FjaGVfYWxsb2NgIG9yIGByZXFza19hbGxvY2Agd2hpY2ggYWxsb2NhdGVzIGEgYHJlcXVlc3Rfc29ja2AuIEkgYWxzbyB2ZXJpZmllZCB2aWEgdGhlIGBtcHRjcC5oYCBjb2RlIHRoYXQgZXZlbiB3aXRoIGBDT05GSUdfTVBUQ1BgIGVuYWJsZWQsIGl0J3Mgc2V0IHRvIGBmYWxzZWAsIGFuZCBkaXNhYmxlZCwgaXQgcmV0dXJucyBmYWxzZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgcGF0Y2ggdG91Y2hlcyBhbnkgdXNlci1zcGFjZSBjb3BpZXMuIE5vcGUsIG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBzb2Nrb3B0cywgb3IgYW55dGhpbmcgbGlrZSB0aGF0LiAgVGhpcyBlbGltaW5hdGVzIHRoZSBpbW1lZGlhdGUgcmlzayBvZiBsZWFraW5nIGtlcm5lbC1zcGFjZSBkYXRhLlxuXG5Eb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBhbnN3ZXIgaXMgbm8uIFRoZSBpbml0aWFsaXphdGlvbiBvZiBgZHJvcF9yZXFgIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgcHJldmVudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXG5cblNvLCB3aGF0IGRvZXMgdGhlIHBhdGNoICpkbyo/IEl0IGVuc3VyZXMgY29ycmVjdCBjbGVhbnVwLiBTcGVjaWZpY2FsbHksIGl0IGhhbmRsZXMgdGhlIGRyb3BwaW5nIG9mIGByZXF1ZXN0X3NvY2tgIGFuZCBjaGlsZCBzb2NrZXRzIGluIE1QVENQIEZhc3RPcGVuIC8gY29ubmVjdGlvbiByZXF1ZXN0cyB3aGVuIHRoZSBgcnNrX2Ryb3BfcmVxYCBmbGFnIGlzIHRydWUsIGVuc3VyaW5nIHByb3BlciBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGF2b2lkaW5nIGxlYWtzLiBUaGVzZSBraW5kcyBvZiBidWdzIHdvdWxkIHR5cGljYWxseSBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBkb3VibGUtZnJlZSwgaXNzdWVzIGFscmVhZHkgZmxhZ2dlZCBieSBLQVNBTi9TTFVCIGRlYnVnL3JlZmNvdW50L3N0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMsIHdoaWNoIGFyZSBub3QgS01TQU4ncyBzcGVjaWFsdHkuXG5cbk5vdyB0aGUga2V5IGRpc3RpbmN0aW9uIGlzOiBLQVNBTiBoZWxwcyBjYXRjaCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBldGMuKSB3aGlsZSBLTVNBTiBoYW5kbGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChoZWFwLCBzdGFjaywgcGFnZSkgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gc29ja2V0IGxpZmVjeWNsZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGl0IGxlYW5zIG1vcmUgdG93YXJkcyBtZW1vcnkgc2FmZXR5LCB3aGljaCBLQVNBTiBjYW4gaGFuZGxlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBkb2Vzbid0IHRvdWNoIHVzZXItc3BhY2UgY29waWVzLiBLQVNBTi9yZWZjb3VudCB0cmFja2luZyBjb3ZlcnMgdGhlIHBvdGVudGlhbCByaXNrcyBvZiB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyByZWxhdGVkIHRvIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1OTMsIk91dHB1dFRva2VucyI6MjYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MjA6MDguNTA4NTU4ODA1WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBhbmQgY2xlYW51cCBwYXRocyBmb3IgTVBUQ1AgYW5kIFRDUCBGYXN0IE9wZW4uIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZWAgZHVyaW5nIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgYW5kIGNoZWNrcyBgcnNrX2Ryb3BfcmVxKHJlcSlgIGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKClgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHNvY2sgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHdoZW4gYSByZXF1ZXN0IGlzIGRyb3BwZWQuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6IFRoZSBmaWVsZCBgZHJvcF9yZXFgIGluIGBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGB0Y3BfY29ubl9yZXF1ZXN0KClgIHdoZW4gdGhlIHJlcXVlc3Rfc29jayBpcyBjcmVhdGVkLCBlbnN1cmluZyBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcbjIuIEluZm8tbGVhayAvIFVzZXItc3BhY2UgY29weSBBbmFseXNpczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBvcHRpb24gYnVmZmVycyBtb2RpZmllZC5cXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBhbmQgY2xlYW51cCBwYXRocyBmb3IgTVBUQ1AgYW5kIFRDUCBGYXN0IE9wZW4uIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZWAgZHVyaW5nIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgYW5kIGNoZWNrcyBgcnNrX2Ryb3BfcmVxKHJlcSlgIGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKClgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHNvY2sgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHdoZW4gYSByZXF1ZXN0IGlzIGRyb3BwZWQuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6IFRoZSBmaWVsZCBgZHJvcF9yZXFgIGluIGBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGB0Y3BfY29ubl9yZXF1ZXN0KClgIHdoZW4gdGhlIHJlcXVlc3Rfc29jayBpcyBjcmVhdGVkLCBlbnN1cmluZyBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcbjIuIEluZm8tbGVhayAvIFVzZXItc3BhY2UgY29weSBBbmFseXNpczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBvcHRpb24gYnVmZmVycyBtb2RpZmllZC5cXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfznpc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 13:54:18 +0000 UTC FinishedAt: 2026-09-04 14:20:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "MPTCP" ], "series_id": "017125fd-4f6b-4f87-a5c9-3eaded6f96c4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_conn_request", "tcp_try_fastopen", "tcp_fastopen_create_child" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF90cnlfZmFzdG9wZW4mIzM0OywKICAgICYjMzQ7dGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHBhdGhzIGZvciBNUFRDUCBhbmQgVENQIEZhc3QgT3Blbi4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGFuZCBjaGVja3MgYHJza19kcm9wX3JlcShyZXEpYCBpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCgpYCBhbmQgYHRjcF9jb25uX3JlcXVlc3QoKWAgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBzb2NrIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyB3aGVuIGEgcmVxdWVzdCBpcyBkcm9wcGVkLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczogVGhlIGZpZWxkIGBkcm9wX3JlcWAgaW4gYHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHRjcF9jb25uX3JlcXVlc3QoKWAgd2hlbiB0aGUgcmVxdWVzdF9zb2NrIGlzIGNyZWF0ZWQsIGVuc3VyaW5nIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4yLiBJbmZvLWxlYWsgLyBVc2VyLXNwYWNlIGNvcHkgQW5hbHlzaXM6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgb3B0aW9uIGJ1ZmZlcnMgbW9kaWZpZWQuXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AvTVBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIGFuZCBUQ1AgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIGluIG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSByZWplY3RlZCBvciBkcm9wcGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBleGVjdXRlZCBkdXJpbmcgVENQIGhhbmRzaGFrZSBhbmQgRmFzdCBPcGVuIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAyYjhhMTVlZThiMmU0OTRkN2YyZjg0NmE1ZjhlODU3ZDQzOTY3MGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDE0OjE2OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIGIvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbmluZGV4IDQ3MWM3OGJlNTUxMzcuLjIyNDk0ZmY3NDZjNzEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbkBAIC0zMzcsNiAmIzQzOzMzNywxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxuIFx0aWYgKCFjaGlsZClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0aWYgKG93bl9yZXEgXHUwMDI2XHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XG4mIzQzO1x0XHRiaF91bmxvY2tfc29jayhjaGlsZCk7XG4mIzQzO1x0XHRzb2NrX3B1dChjaGlsZCk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbiBcdHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5xbGVuJiM0MzsmIzQzOztcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li5lYjBlNDI1OWMyODA3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtNzY2OSw2ICYjNDM7NzY2OSw3IEBAIGludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuIFx0dGNwX3JzayhyZXEpLVx1MDAzZXR4aGFzaCA9IG5ldF90eF9ybmRoYXNoKCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuIFx0dGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwID0gMDtcbiYjNDM7XHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcbiAjZW5kaWZcbiBcbiBcdHRjcF9jbGVhcl9vcHRpb25zKFx1MDAyNnRtcF9vcHQpO1xuQEAgLTc3NzUsNiAmIzQzOzc3NzYsMTAgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXG4gXHRcdFJFQURfT05DRShzay1cdTAwM2Vza19kYXRhX3JlYWR5KShzayk7XG4gXHRcdGJoX3VubG9ja19zb2NrKGZhc3RvcGVuX3NrKTtcbiBcdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xuJiM0MztcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbiYjNDM7XHRcdHJlcXNrX2ZyZWUocmVxKTtcbiYjNDM7XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG4gXHRcdHRjcF9yc2socmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIgPSBmYWxzZTtcbiBcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O01QVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2Nvbm5fcmVxdWVzdCYjMzQ7LAogICAgJiMzNDt0Y3BfdHJ5X2Zhc3RvcGVuJiMzNDssCiAgICAmIzM0O3RjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AvTVBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIGFuZCBUQ1AgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIGluIG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSByZWplY3RlZCBvciBkcm9wcGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBleGVjdXRlZCBkdXJpbmcgVENQIGhhbmRzaGFrZSBhbmQgRmFzdCBPcGVuIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyYjhhMTVlZThiMmU0OTRkN2YyZjg0NmE1ZjhlODU3ZDQzOTY3MGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE0OjE2OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMgYi9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYwppbmRleCA0NzFjNzhiZTU1MTM3Li4yMjQ5NGZmNzQ2YzcxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYwpAQCAtMzM3LDYgJiM0MzszMzcsMTIgQEAgc3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzaywKIAlpZiAoIWNoaWxkKQogCQlyZXR1cm4gTlVMTDsKIAomIzQzOwlpZiAob3duX3JlcSAmYW1wOyZhbXA7IHJza19kcm9wX3JlcShyZXEpKSB7CiYjNDM7CQliaF91bmxvY2tfc29jayhjaGlsZCk7CiYjNDM7CQlzb2NrX3B1dChjaGlsZCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwogCXNwaW5fbG9jaygmYW1wO3F1ZXVlLSZndDtmYXN0b3BlbnEubG9jayk7CiAJcXVldWUtJmd0O2Zhc3RvcGVucS5xbGVuJiM0MzsmIzQzOzsKIAlzcGluX3VubG9jaygmYW1wO3F1ZXVlLSZndDtmYXN0b3BlbnEubG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDBmNjBhMWRiZjkyNzQuLmViMGU0MjU5YzI4MDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC03NjY5LDYgJiM0Mzs3NjY5LDcgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsCiAJdGNwX3JzayhyZXEpLSZndDt0eGhhc2ggPSBuZXRfdHhfcm5kaGFzaCgpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKQogCXRjcF9yc2socmVxKS0mZ3Q7aXNfbXB0Y3AgPSAwOwomIzQzOwl0Y3BfcnNrKHJlcSktJmd0O2Ryb3BfcmVxID0gZmFsc2U7CiAjZW5kaWYKIAogCXRjcF9jbGVhcl9vcHRpb25zKCZhbXA7dG1wX29wdCk7CkBAIC03Nzc1LDYgJiM0Mzs3Nzc2LDEwIEBAIGludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLAogCQlSRUFEX09OQ0Uoc2stJmd0O3NrX2RhdGFfcmVhZHkpKHNrKTsKIAkJYmhfdW5sb2NrX3NvY2soZmFzdG9wZW5fc2spOwogCQlzb2NrX3B1dChmYXN0b3Blbl9zayk7CiYjNDM7CX0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHsKJiM0MzsJCXJlcXNrX2ZyZWUocmVxKTsKJiM0MzsJCWRzdF9yZWxlYXNlKGRzdCk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQl0Y3BfcnNrKHJlcSktJmd0O3Rmb19saXN0ZW5lciA9IGZhbHNlOwogCQlpZiAoIXdhbnRfY29va2llICZhbXA7JmFtcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2OQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgUGF0Y2ggVHJpYWdlOiBTeXprYWxsZXIgRnV6emluZyBGb2N1cyoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O3ZlIGdvdCBhIExpbnV4IGtlcm5lbCBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCB0aGUgZ29hbCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgc29tZXRoaW5nIHN5emthbGxlciBzaG91bGQgYmUgZnV6emluZy4gSXQmIzM5O3MgYSBRQSB0YXNrLCBjb21wbGV0ZWx5IGRlZmVuc2l2ZSwgbm8gbWFsaWNpb3VzIGNvZGUsIGp1c3QgdHJ5aW5nIHRvIGltcHJvdmUga2VybmVsIHJvYnVzdG5lc3MuIFNwZWNpZmljYWxseSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyBpbiB0aGUgVENQIHN1YnN5c3RlbSwgZm9jdXNpbmcgb24gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhbmQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gTXkgam9iIGlzIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byB0YXJnZXQuCgpUaGUgZ29vZCBuZXdzIGlzLCBJJiMzOTt2ZSBnb3Qgc29tZSB0b29scyBhdCBteSBkaXNwb3NhbC4gSSBjYW4gdXNlIGBncmVwcGVyYCwgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCwgYHJlYWQtZmlsZWAsIGFuZCBgc2V0LXJlc3VsdHNgIHRvIGRpc3NlY3QgdGhlIGNvZGUuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGVyZSBhcmUgY2hhbmdlcyByZWxhdGVkIHRvIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBpbiBgdGNwX2Zhc3RvcGVuLmNgLiBOb3RhYmx5OgoKYGBgYwomIzQzOwlpZiAob3duX3JlcSAmYW1wOyZhbXA7IHJza19kcm9wX3JlcShyZXEpKSB7CiYjNDM7CQliaF91bmxvY2tfc29jayhjaGlsZCk7CiYjNDM7CQlzb2NrX3B1dChjaGlsZCk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQpgYGAKCmFuZCBhbHNvIGNoYW5nZXMgdG8gYHRjcF9jb25uX3JlcXVlc3RgIGluIGB0Y3BfaW5wdXQuY2A6CgpgYGBjCiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUCkKIAl0Y3BfcnNrKHJlcSktJmd0O2lzX21wdGNwID0gMDsKJiM0MzsJdGNwX3JzayhyZXEpLSZndDtkcm9wX3JlcSA9IGZhbHNlOwogI2VuZGlmCi4uLgomIzQzOwl9IGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7CiYjNDM7CQlyZXFza19mcmVlKHJlcSk7CiYjNDM7CQlkc3RfcmVsZWFzZShkc3QpOwomIzQzOwkJcmV0dXJuIDA7CmBgYAoKSXQgc2VlbXMgbGlrZSB0aGUgY29kZSBpcyB1c2luZyBhIG5ldyBmdW5jdGlvbiwgYHJza19kcm9wX3JlcSgpYCwgYXMgd2VsbCBhcyBhIGZsYWcsIGBkcm9wX3JlcWAuIE5vdywgbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuIEkmIzM5O2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIG9jY3VycmVuY2VzIG9mIGJvdGggYHJza19kcm9wX3JlcWAgYW5kIGBkcm9wX3JlcWAgdGhyb3VnaG91dCB0aGUga2VybmVsJiMzOTtzIEhFQUQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY2hhbmdlcyBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoaXMgc2hvdWxkIHJldmVhbCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCBhbmQgbGV0IG1lIGRldGVybWluZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmbGFncyBhbmQgZnV6emluZyB0YXJnZXRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jza19kcm9wX3JlcSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9tcHRjcC5oPTEzNz1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0MS1cbmluY2x1ZGUvbmV0L21wdGNwLmg6MTQyOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDMte1xuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmg9MjQ1PXN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMjQ5LVxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNTA6c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI1MS17XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTE5Nz1zdHJ1Y3Qgc29jayAqdGNwX2dldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMC1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMTE6XHRcdGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvc3luY29va2llcy5jLTIxMi1cdFx0XHRyZXFza19wdXQocmVxKTtcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz0zMjY9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMzktXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozNDA6XHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM0MS1cdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc2MjA9aW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc3OC1cdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc3OTpcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3ODAtXHRcdHJlcXNrX2ZyZWUocmVxKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTQyLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjk0MzpcdGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cdFx0cmVxc2tfcXVldWVfcmVtb3ZlZChcdTAwMjZpbmV0X2NzayhyZXEtXHUwMDNlcnNrX2xpc3RlbmVyKS1cdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZSwgcmVxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmaWxlcy4KCioqRGVlcCBEaXZlIEluY29taW5nOiBNUFRDUCwgRmFzdCBPcGVuLCBhbmQgVENQIElucHV0KioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBUbyByZWFsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiBhcm91bmQgKnRoZXNlKiBsaW5lcywgSSBuZWVkIGEgZ29vZCBmb3VuZGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUga2V5IHBsYXllcnMuIEZpcnN0LCBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAgLSBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgZnVuZGFtZW50YWwgTVBUQ1Agc3RydWN0dXJlcywgdGhlIGNvcmUgZGF0YSBtb2RlbHMsIGFuZCB0aGUga2V5IGRlZmluaXRpb25zIHRoYXQgZ292ZXJuIE11bHRpcGF0aCBUQ1Agb3BlcmF0aW9uIGluIGdlbmVyYWwuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyAqc3VwcG9zZWQqIHRvIGJlaGF2ZSwgdGhlIGJhc2ljIGludGVyZmFjZXMsIGFuZCB3aGVyZSB0aGUgY29yZSBNUFRDUCBjb25jZXB0cyBhcmUgZGVmaW5lZC4gVGhlbiBJJiMzOTtsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLgoKTmV4dCB1cCwgSSYjMzk7bGwgaGl0IGBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY2AuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHRoZSBGYXN0IE9wZW4gbWVjaGFuaXNtIHdpdGhpbiB0aGUgc3RhbmRhcmQgVENQL0lQIHByb3RvY29sLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgaXQgaG9va3MgaW50byB0aGUgZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb24sIGFuZCB3aGF0IG9wdGltaXphdGlvbnMgYXJlIG1hZGUuIEhvdyB0aGUgZmFzdCBvcGVuIGNvb2tpZSBpcyBnZW5lcmF0ZWQsIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBhbmQgd2hlcmUgdGhpcyBpbnRlcnBsYXlzIHdpdGggdGhlIG90aGVyIG1vZHVsZXMgYXJlIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQuIFdoYXQmIzM5O3MgdGhlIHByb3RvY29sIHdpdGggdGhlIGNvb2tpZT8gSG93IGRvZXMgTVBUQ1AgY2hhbmdlIHRoZSBmYXN0IG9wZW4gY29ubmVjdGlvbiBwcm90b2NvbCBpZiBhdCBhbGw/CgpGaW5hbGx5LCBgbmV0L2lwdjQvdGNwX2lucHV0LmNgIGlzIGdvaW5nIHRvIGJlIHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYywgb3IgcG90ZW50aWFsIHByb2JsZW1zLCBsaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGluY29taW5nIFRDUCBzZWdtZW50cywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhleSYjMzk7cmUgaGFuZGxlZCBiYXNlZCBvbiB0aGUgY29ubmVjdGlvbiBzdGF0ZSBhbmQgRmFzdCBPcGVuIGNvb2tpZSAoaWYgcHJlc2VudCkuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyBNUFRDUCBzZWdtZW50cyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGVzZSBmYXN0IG9wZW4gY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIGFuZCBtYWludGFpbmVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyBvZiB0aGUgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQuIFVsdGltYXRlbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHJlY29uY2lsZXMgdGhlIHN0YW5kYXJkIFRDUCBoYW5kbGluZyB3aXRoIGFueSBNUFRDUCBhZGRpdGlvbnMgYW5kIEZhc3QgT3BlbiBvcHRpbWl6YXRpb25zLiBUaGUgc3luY2hyb25pemF0aW9uIGlzIGtleSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTM1Olx0fVxuIDEzNjpcdFxuIDEzNzpcdHN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIDEzODpcdHtcbiAxMzk6XHRcdHJldHVybiB0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3A7XG4gMTQwOlx0fVxuIDE0MTpcdFxuIDE0MjpcdHN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuIDE0MzpcdHtcbiAxNDQ6XHRcdHJldHVybiB0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgXHUwMDI2XHUwMDI2IHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcTtcbiAxNDU6XHR9XG4gMTQ2Olx0XG4gMTQ3Olx0dm9pZCBtcHRjcF9zcGFjZShjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLCBpbnQgKnNwYWNlLCBpbnQgKmZ1bGxfc3BhY2UpO1xuIDE0ODpcdGJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIDE0OTpcdFx0XHQgICAgICAgdW5zaWduZWQgaW50ICpzaXplLCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuIDE1MDpcdGJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXG4gMTUxOlx0XHRcdFx0ICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuIDE1MjpcdGludCBtcHRjcF9lc3RhYmxpc2hlZF9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxNTM6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcbiAxNTQ6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuIDE1NTpcdGJvb2wgbXB0Y3BfaW5jb21pbmdfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIDE1NjpcdFxuIDE1NzpcdHZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4gMTU4Olx0XHRcdFx0IHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XG4gMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkxMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGxpbmUgb2YgdGhpbmtpbmcsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFRDUCBGYXN0IE9wZW4gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSByZXZpc2l0aW5nIFRDUCBGYXN0IE9wZW4sIGFuZCBJIHdhbnQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gYSBiaXQgZGVlcGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHNlY3Rpb24gaW4gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhcm91bmQgbGluZXMgMzIwIHRvIDM3MC4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBwb3NzaWJseSB0aGUgaGFuZGxpbmcgb2YgdGhlIEZhc3QgT3BlbiBjb29raWUgYW5kIHRoZSBpbml0aWFsIGRhdGEgZXhjaGFuZ2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRldGFpbHMgcmVnYXJkaW5nIGNvb2tpZSBnZW5lcmF0aW9uLCB2YWxpZGF0aW9uLCBhbmQgaG93IGl0IG1lc2hlcyB3aXRoIHRoZSBTWU4gYW5kIFNZTi1BQ0sgcHJvY2VzcyBmbG93LiBJdCYjMzk7cyBsaWtlbHkgaGVyZSB0aGF0IEkmIzM5O2xsIGZpbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgRmFzdCBPcGVuIHN0YXRlLCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgYW5kIGFueSBzZWN1cml0eSBjaGVja3MgaW4gcGxhY2UgZm9yIHRoaXMgb3B0aW1pemF0aW9uLiBJJiMzOTttIGhvcGluZyBJIGNhbiB0cmFjZSB0aGUgY29va2llJiMzOTtzIGxpZmVjeWNsZSBhbmQgcmVsYXRlIHRoZSBjb2RlIGJhY2sgdG8gdGhlIFRDUCBzdGF0ZSBtYWNoaW5lIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gVGhpcyBzZWN0aW9uIHNob3VsZCBvZmZlciBpbnNpZ2h0cyBpbnRvIHRoZSBwcmFjdGljYWwgYXNwZWN0cyBvZiBob3cgdGhlIG9wdGltaXphdGlvbiB3b3JrcyB1bmRlciB0aGUgaG9vZC4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBpZGVudGlmeSwgaW4gdGhpcyBhcmVhLCB0aGUgbWVjaGFuaXNtIGZvciBob3cgdGhlIGtlcm5lbCBrZWVwcyB0cmFjayBvZiBhbmQgcmVhY3RzIHRvIHRoZSBGYXN0IE9wZW4gZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdH1cbiAzMjE6XHRvdXQ6XG4gMzIyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMjM6XHRcdHJldHVybiByZXQ7XG4gMzI0Olx0fVxuIDMyNTpcdFxuIDMyNjpcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4gMzI3Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gMzI4Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAzMjk6XHR7XG4gMzMwOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwO1xuIDMzMTpcdFx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcdTAwMjZpbmV0X2NzayhzayktXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XG4gMzMyOlx0XHRzdHJ1Y3Qgc29jayAqY2hpbGQ7XG4gMzMzOlx0XHRib29sIG93bl9yZXE7XG4gMzM0Olx0XG4gMzM1Olx0XHRjaGlsZCA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgTlVMTCxcbiAzMzY6XHRcdFx0XHRcdFx0XHRcdCBOVUxMLCBcdTAwMjZvd25fcmVxLCBOVUxMKTtcbiAzMzc6XHRcdGlmICghY2hpbGQpXG4gMzM4Olx0XHRcdHJldHVybiBOVUxMO1xuIDMzOTpcdFxuIDM0MDpcdFx0aWYgKG93bl9yZXEgXHUwMDI2XHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XG4gMzQxOlx0XHRcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcbiAzNDI6XHRcdFx0c29ja19wdXQoY2hpbGQpO1xuIDM0MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdHNwaW5fbG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4gMzQ3Olx0XHRxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucWxlbiYjNDM7JiM0Mzs7XG4gMzQ4Olx0XHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4gMzQ5Olx0XG4gMzUwOlx0XHQvKiBJbml0aWFsaXplIHRoZSBjaGlsZCBzb2NrZXQuIEhhdmUgdG8gZml4IHNvbWUgdmFsdWVzIHRvIHRha2VcbiAzNTE6XHRcdCAqIGludG8gYWNjb3VudCB0aGUgY2hpbGQgaXMgYSBGYXN0IE9wZW4gc29ja2V0IGFuZCBpcyBjcmVhdGVkXG4gMzUyOlx0XHQgKiBvbmx5IG91dCBvZiB0aGUgYml0cyBjYXJyaWVkIGluIHRoZSBTWU4gcGFja2V0LlxuIDM1MzpcdFx0ICovXG4gMzU0Olx0XHR0cCA9IHRjcF9zayhjaGlsZCk7XG4gMzU1Olx0XG4gMzU2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHAtXHUwMDNlZmFzdG9wZW5fcnNrLCByZXEpO1xuIDM1NzpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXRmb19saXN0ZW5lciA9IHRydWU7XG4gMzU4Olx0XG4gMzU5Olx0XHQvKiBSRkMxMzIzOiBUaGUgd2luZG93IGluIFNZTiBcdTAwMjYgU1lOL0FDSyBzZWdtZW50cyBpcyBuZXZlclxuIDM2MDpcdFx0ICogc2NhbGVkLiBTbyBjb3JyZWN0IGl0IGFwcHJvcHJpYXRlbHkuXG4gMzYxOlx0XHQgKi9cbiAzNjI6XHRcdHRwLVx1MDAzZXNuZF93bmQgPSBudG9ocyh0Y3BfaGRyKHNrYiktXHUwMDNld2luZG93KTtcbiAzNjM6XHRcdHRwLVx1MDAzZW1heF93aW5kb3cgPSB0cC1cdTAwM2VzbmRfd25kO1xuIDM2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBUQ1AgSW5wdXQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIFRDUCBpbnB1dCBwcm9jZXNzLCBidXQgdG8gcmVhbGx5IG5haWwgZG93biB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgaG93IHRoaXMgaXMgaGFuZGxlZCBhdCBhIGRldGFpbGVkIGxldmVsLCBJIHdhbnQgdG8gemVybyBpbiBvbiBhIHBhcnRpY3VsYXIgYXJlYS4gSSYjMzk7bSB0aGlua2luZyB3ZSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSBsaW5lcyA3NjYwIHRocm91Z2ggNzc5MC4gVGhhdCByYW5nZSBzaG91bGQgZ2l2ZSB1cyBzb21lIGludGVyZXN0aW5nIGluc2lnaHRzLCBJJiMzOTttIGV4cGVjdGluZy4gSXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBwYWNrZXQgcHJvY2Vzc2luZyBvciBlcnJvciBoYW5kbGluZyAtIHRob3NlIGFyZSB0aGUgYXJlYXMgSSYjMzk7bSBvZnRlbiBmb2N1c2luZyBvbiB3aGVuIEkgbG9vayBpbnRvIHRjcF9pbnB1dC5jLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzY2MDpcdFxuNzY2MTpcdFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcbjc2NjI6XHRcdGlmICghcmVxKVxuNzY2MzpcdFx0XHRnb3RvIGRyb3A7XG43NjY0Olx0XG43NjY1Olx0XHRyZXEtXHUwMDNlc3luY29va2llID0gd2FudF9jb29raWU7XG43NjY2Olx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlYWZfc3BlY2lmaWMgPSBhZl9vcHM7XG43NjY3Olx0XHR0Y3BfcnNrKHJlcSktXHUwMDNldHNfb2ZmID0gMDtcbjc2Njg6XHRcdHRjcF9yc2socmVxKS1cdTAwM2VyZXFfdXNlY190cyA9IGZhbHNlO1xuNzY2OTpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXR4aGFzaCA9IG5ldF90eF9ybmRoYXNoKCk7XG43NjcwOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuNzY3MTpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwID0gMDtcbjc2NzI6XHRcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xuNzY3MzpcdCNlbmRpZlxuNzY3NDpcdFxuNzY3NTpcdFx0dGNwX2NsZWFyX29wdGlvbnMoXHUwMDI2dG1wX29wdCk7XG43Njc2Olx0XHR0bXBfb3B0Lm1zc19jbGFtcCA9IGFmX29wcy1cdTAwM2Vtc3NfY2xhbXA7XG43Njc3Olx0XHR0bXBfb3B0LnVzZXJfbXNzICA9IFJFQURfT05DRSh0cC1cdTAwM2VyeF9vcHQudXNlcl9tc3MpO1xuNzY3ODpcdFx0dGNwX3BhcnNlX29wdGlvbnMoc29ja19uZXQoc2spLCBza2IsIFx1MDAyNnRtcF9vcHQsIDAsXG43Njc5Olx0XHRcdFx0ICB3YW50X2Nvb2tpZSA/IE5VTEwgOiBcdTAwMjZmb2MpO1xuNzY4MDpcdFxuNzY4MTpcdFx0aWYgKHdhbnRfY29va2llIFx1MDAyNlx1MDAyNiAhdG1wX29wdC5zYXdfdHN0YW1wKVxuNzY4MjpcdFx0XHR0Y3BfY2xlYXJfb3B0aW9ucyhcdTAwMjZ0bXBfb3B0KTtcbjc2ODM6XHRcbjc2ODQ6XHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTUMpIFx1MDAyNlx1MDAyNiB3YW50X2Nvb2tpZSlcbjc2ODU6XHRcdFx0dG1wX29wdC5zbWNfb2sgPSAwO1xuNzY4NjpcdFxuNzY4NzpcdFx0dG1wX29wdC50c3RhbXBfb2sgPSB0bXBfb3B0LnNhd190c3RhbXA7XG43Njg4Olx0XHR0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgXHUwMDI2dG1wX29wdCwgc2tiLCBzayk7XG43Njg5Olx0XHRpbmV0X3JzayhyZXEpLVx1MDAzZW5vX3NyY2NoZWNrID0gaW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc2spO1xuNzY5MDpcdFxuNzY5MTpcdFx0LyogTm90ZTogdGNwX3Y2X2luaXRfcmVxKCkgbWlnaHQgb3ZlcnJpZGUgaXJfaWlmIGZvciBsaW5rIGxvY2FscyAqL1xuNzY5MjpcdFx0aW5ldF9yc2socmVxKS1cdTAwM2Vpcl9paWYgPSBpbmV0X3JlcXVlc3RfYm91bmRfZGV2X2lmKHNrLCBza2IpO1xuNzY5MzpcdFxuNzY5NDpcdFx0aWYgKHdhbnRfY29va2llKSB7XG43Njk1Olx0XHRcdGlzbiA9IGNvb2tpZV9pbml0X3NlcXVlbmNlKGFmX29wcywgc2tiLCBcdTAwMjZyZXEtXHUwMDNlbXNzKTtcbjc2OTY6XHRcdFx0LyogVXNlIHRoZSBjb29raWUgYXMgdHhoYXNoIHNvIHRoZSBTWU4tQUNLIGFuZCB0aGUgbGF0ZXIgZnVsbFxuNzY5NzpcdFx0XHQgKiBzb2NrZXQgbWFrZSB0aGUgc2FtZSBlZ3Jlc3MgY2hvaWNlIChJUHY2IEVDTVAgcGF0aDsgSVB2NCBUWCBxdWV1ZSkuXG43Njk4Olx0XHRcdCAqL1xuNzY5OTpcdFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNldHhoYXNoID0gaXNuO1xuNzcwMDpcdFx0fVxuNzcwMTpcdFxuNzcwMjpcdFx0ZHN0ID0gYWZfb3BzLVx1MDAzZXJvdXRlX3JlcShzaywgc2tiLCBcdTAwMjZmbCwgcmVxLCB3YW50X2Nvb2tpZSA/IDAgOiBpc24pO1xuNzcwMzpcdFx0aWYgKCFkc3QpXG43NzA0Olx0XHRcdGdvdG8gZHJvcF9hbmRfZnJlZTtcbjc3MDU6XHRcbjc3MDY6XHRcdGlmICh0bXBfb3B0LnRzdGFtcF9vayB8fCAoIXdhbnRfY29va2llIFx1MDAyNlx1MDAyNiAhaXNuKSlcbjc3MDc6XHRcdFx0c3QgPSBJTkRJUkVDVF9DQUxMX0lORVQoYWZfb3BzLVx1MDAzZWluaXRfc2VxX2FuZF90c19vZmYsXG43NzA4Olx0XHRcdFx0XHRcdHRjcF92Nl9pbml0X3NlcV9hbmRfdHNfb2ZmLFxuNzcwOTpcdFx0XHRcdFx0XHR0Y3BfdjRfaW5pdF9zZXFfYW5kX3RzX29mZixcbjc3MTA6XHRcdFx0XHRcdFx0bmV0LCBza2IpO1xuNzcxMTpcdFxuNzcxMjpcdFx0aWYgKHRtcF9vcHQudHN0YW1wX29rKSB7XG43NzEzOlx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2VyZXFfdXNlY190cyA9IGRzdF90Y3BfdXNlY190cyhkc3QpO1xuNzcxNDpcdFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNldHNfb2ZmID0gc3QudHNfb2ZmO1xuNzcxNTpcdFx0fVxuNzcxNjpcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjYgIWlzbikge1xuNzcxNzpcdFx0XHRpbnQgbWF4X3N5bl9iYWNrbG9nID0gUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY0LnN5c2N0bF9tYXhfc3luX2JhY2tsb2cpO1xuNzcxODpcdFxuNzcxOTpcdFx0XHQvKiBLaWxsIHRoZSBmb2xsb3dpbmcgY2xhdXNlLCBpZiB5b3UgZGlzbGlrZSB0aGlzIHdheS4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI2MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYHRjcF9jb25uX3JlcXVlc3RgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGNvZGUgYmxvY2sgZnJvbSBhcHByb3hpbWF0ZWx5IGxpbmUgNzc2MCB0byA3Nzk1LiBJJiMzOTtsbCBuZWVkIHRvIGFuYWx5emUgdGhpcyBzZWdtZW50IGNhcmVmdWxseSB0byBmdWxseSBncmFzcCBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGZvciBzcGVjaWZpYyBlbGVtZW50cyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gc2V0dXA6IGFyZSB3ZSBsb29raW5nIGF0IFNZTiBoYW5kbGluZz8gQUNLIHByb2NlZHVyZXM/IFN0YXRlIHRyYW5zaXRpb25zPyBBbnkga2luZCBvZiByZXNvdXJjZSBhbGxvY2F0aW9uPyBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGlzIHNwZWNpZmljIGNvZGUgc2VnbWVudCByZWxhdGVzIHRvIGNvbm5lY3Rpb24gc3RhdGUuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSBtYXkgYmUgY2FsbHMgdG8gaW50ZXJuYWwgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NzYwOlx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlc3luX3RvcyA9IFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2VpcF9kc2ZpZWxkO1xuNzc2MTpcdFx0dGNwX29wZW5yZXFfaW5pdF9yd2luKHJlcSwgc2ssIGRzdCk7XG43NzYyOlx0XHRza19yeF9xdWV1ZV9zZXQocmVxX3RvX3NrKHJlcSksIHNrYik7XG43NzYzOlx0XHRpZiAoIXdhbnRfY29va2llKSB7XG43NzY0Olx0XHRcdHRjcF9yZXFza19yZWNvcmRfc3luKHNrLCByZXEsIHNrYik7XG43NzY1Olx0XHRcdGZhc3RvcGVuX3NrID0gdGNwX3RyeV9mYXN0b3Blbihzaywgc2tiLCByZXEsIFx1MDAyNmZvYywgZHN0KTtcbjc3NjY6XHRcdH1cbjc3Njc6XHRcdGlmIChmYXN0b3Blbl9zaykge1xuNzc2ODpcdFx0XHRhZl9vcHMtXHUwMDNlc2VuZF9zeW5hY2soZmFzdG9wZW5fc2ssIGRzdCwgXHUwMDI2ZmwsIHJlcSxcbjc3Njk6XHRcdFx0XHRcdCAgICBcdTAwMjZmb2MsIFRDUF9TWU5BQ0tfRkFTVE9QRU4sIHNrYik7XG43NzcwOlx0XHRcdC8qIEFkZCB0aGUgY2hpbGQgc29ja2V0IGRpcmVjdGx5IGludG8gdGhlIGFjY2VwdCBxdWV1ZSAqL1xuNzc3MTpcdFx0XHRpZiAoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBmYXN0b3Blbl9zaykpIHtcbjc3NzI6XHRcdFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG43NzczOlx0XHRcdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xuNzc3NDpcdFx0XHRcdGdvdG8gZHJvcF9hbmRfZnJlZTtcbjc3NzU6XHRcdFx0fVxuNzc3NjpcdFx0XHRSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xuNzc3NzpcdFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG43Nzc4Olx0XHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbjc3Nzk6XHRcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbjc3ODA6XHRcdFx0cmVxc2tfZnJlZShyZXEpO1xuNzc4MTpcdFx0XHRkc3RfcmVsZWFzZShkc3QpO1xuNzc4MjpcdFx0XHRyZXR1cm4gMDtcbjc3ODM6XHRcdH0gZWxzZSB7XG43Nzg0Olx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIgPSBmYWxzZTtcbjc3ODU6XHRcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjZcbjc3ODY6XHRcdFx0ICAgIHVubGlrZWx5KCFpbmV0X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZChzaywgcmVxKSkpIHtcbjc3ODc6XHRcdFx0XHRyZXFza19mcmVlKHJlcSk7XG43Nzg4Olx0XHRcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbjc3ODk6XHRcdFx0XHRyZXR1cm4gMDtcbjc3OTA6XHRcdFx0fVxuNzc5MTpcdFx0XHRhZl9vcHMtXHUwMDNlc2VuZF9zeW5hY2soc2ssIGRzdCwgXHUwMDI2ZmwsIHJlcSwgXHUwMDI2Zm9jLFxuNzc5MjpcdFx0XHRcdFx0ICAgICF3YW50X2Nvb2tpZSA/IFRDUF9TWU5BQ0tfTk9STUFMIDpcbjc3OTM6XHRcdFx0XHRcdFx0XHQgICBUQ1BfU1lOQUNLX0NPT0tJRSxcbjc3OTQ6XHRcdFx0XHRcdCAgICBza2IpO1xuNzc5NTpcdFx0XHRpZiAod2FudF9jb29raWUpIHtcbjc3OTY6XHRcdFx0XHRyZXFza19mcmVlKHJlcSk7XG43Nzk3Olx0XHRcdFx0cmV0dXJuIDA7XG43Nzk4Olx0XHRcdH1cbjc3OTk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE3MQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBgZHJvcF9yZXFgIEZsYWcqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgdGNwX3JzayhyZXEpLSZndDtkcm9wX3JlcWAgZmxhZyBpcyBnZXR0aW5nIHNldCB0byBgdHJ1ZWAuIFRoaXMgbGlrZWx5IGluZGljYXRlcyBzb21lIGtpbmQgb2YgY29ubmVjdGlvbiByZWplY3Rpb24gb3IgZWFybHkgZHJvcCBjb25kaXRpb24gd2l0aGluIHRoZSBUQ1Agc3RhY2suIFRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSB3b3VsZCBiZSBhIHF1aWNrIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYGRyb3BfcmVxYCBhY3Jvc3MgdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgaW5zdGFuY2VzIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgdG91Y2hlZC4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgJiMzNDtkcm9wIHJlcXVlc3QmIzM0OyBiZWhhdmlvci4gVGhpcyBzaG91bGQgcXVpY2tseSBwaW5wb2ludCB0aGUgc291cmNlIG9mIHRoZSBkcm9wIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcm9wX3JlcSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jPTk0PWludCBibmdlX3NlbmRfbXNnKHN0cnVjdCBibmdlX2F1eHJfZGV2ICphdXhyX2Rldiwgc3RydWN0IGJuZ2VfZndfbXNnICpmd19tc2cpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDctXHRpZiAocmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jOjEwODpcdFx0Z290byBkcm9wX3JlcTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmMtMTA5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmMtMTE5LVx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYzoxMjA6ZHJvcF9yZXE6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jLTEyMS1cdGJuZ2VfaHdybV9yZXFfZHJvcChiZCwgcmVxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYz0xNTIzPWludCBibmdlX2h3cm1fcG9ydF9xc3RhdHNfZXh0KHN0cnVjdCBibmdlX2RldiAqYmQsIHU4IGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE1OTctXHRcdFx0XHRyYyA9IC1FSU5WQUw7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYzoxNTk4Olx0XHRcdFx0Z290byBkcm9wX3JlcTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE1OTktXHRcdFx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE2MDYtXHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYzoxNjA3OmRyb3BfcmVxOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTYwOC1cdGJuZ2VfaHdybV9yZXFfZHJvcChiZCwgcmVxX3FjKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYz00Nj1zdGF0aWMgaW50IGJueHRfaHdybV90ZW1wX3F1ZXJ5KHN0cnVjdCBibnh0ICpicCwgdTggKnRlbXApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmMtNTctXHRpZiAocmMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYzo1ODpcdFx0Z290byBkcm9wX3JlcTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTU5LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTY5LVx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmM6NzA6ZHJvcF9yZXE6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy03MS1cdGh3cm1fcmVxX2Ryb3AoYnAsIHJlcSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTIzNj1pbnQgYm54dF9zZW5kX21zZyhzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI1NC1cdGlmIChyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzoyNTU6XHRcdGdvdG8gZHJvcF9yZXE7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjU2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy0yNjYtXHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6MjY3OmRyb3BfcmVxOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI2OC1cdGh3cm1fcmVxX2Ryb3AoYnAsIHJlcSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTA2PXN0YXRpYyBpbnQgZl9taWRpMl9zdGFydF9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCxcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExMjEtLyogRHJvcCBwZW5kaW5nIHJlcXVlc3RzICovXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExMjI6c3RhdGljIHZvaWQgZl9taWRpMl9kcm9wX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTExMjMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIwND1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXAoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDUte1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYzoxMjA2Olx0Zl9taWRpMl9kcm9wX3JlcXModXNiX2VwKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwNy1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDA9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0Mi17XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDM6XHRmX21pZGkyX2Ryb3BfcmVxcyhlcF9pbik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDQ6XHRmX21pZGkyX2Ryb3BfcmVxcyhlcF9vdXQpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQ1LVx0Zl9taWRpMl9mcmVlX2VwX3JlcXMoZXBfaW4pO1xuLS1cbmluY2x1ZGUvbGludXgvdGNwLmg9MTUwPXN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3RjcC5oLTE1Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG5pbmNsdWRlL2xpbnV4L3RjcC5oOjE1ODpcdGJvb2xcdFx0XHRcdGRyb3BfcmVxO1xuaW5jbHVkZS9saW51eC90Y3AuaC0xNTktI2VuZGlmXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0xMzc9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDEtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE0MjpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTQzLXtcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTQ0Olx0cmV0dXJuIHRjcF9yc2socmVxKS1cdTAwM2Vpc19tcHRjcCBcdTAwMjZcdTAwMjYgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxO1xuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDUtfVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmg9MjQ1PXN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbmluY2x1ZGUvbmV0L21wdGNwLmgtMjQ5LVxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNTA6c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI1MS17XG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jPTE5Nz1zdHJ1Y3Qgc29jayAqdGNwX2dldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMC1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMTE6XHRcdGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvc3luY29va2llcy5jLTIxMi1cdFx0XHRyZXFza19wdXQocmVxKTtcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz0zMjY9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMzktXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozNDA6XHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM0MS1cdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTcxNTI9dGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDIyLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQyMzpzdGF0aWMgaW5saW5lIHZvaWQgcHJfZHJvcF9yZXEoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBfX3UxNiBwb3J0LCBpbnQgZmFtaWx5KVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyNC17XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzYyMD1pbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjcxLVx0dGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwID0gMDtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc2NzI6XHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NzMtI2VuZGlmXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczMC1cdFx0XHQgKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3MzE6XHRcdFx0cHJfZHJvcF9yZXEocmVxLCBudG9ocyh0Y3BfaGRyKHNrYiktXHUwMDNlc291cmNlKSxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3MzItXHRcdFx0XHQgICAgcnNrX29wcy1cdTAwM2VmYW1pbHkpO1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NzgtXHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3Nzk6XHR9IGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVx0XHRyZXFza19mcmVlKHJlcSk7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5NDM6XHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy05NDQtXHRcdHJlcXNrX3F1ZXVlX3JlbW92ZWQoXHUwMDI2aW5ldF9jc2socmVxLVx1MDAzZXJza19saXN0ZW5lciktXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz04MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtODYyLVxubmV0L21wdGNwL3N1YmZsb3cuYzo4NjM6XHRcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xubmV0L21wdGNwL3N1YmZsb3cuYy04NjQtXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy05NDgtXHRcdFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5BQ0tSWCk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjk0OTpcdFx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSB0cnVlO1xubmV0L21wdGNwL3N1YmZsb3cuYy05NTAtXHRcdH1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTk2Mi1cdG1wdGNwX3N1YmZsb3dfZHJvcF9jdHgoY2hpbGQpO1xubmV0L21wdGNwL3N1YmZsb3cuYzo5NjM6XHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSB0cnVlO1xubmV0L21wdGNwL3N1YmZsb3cuYy05NjQtXHRpbmV0X2Nza19wcmVwYXJlX2Zvcl9kZXN0cm95X3NvY2soY2hpbGQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI1NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1QVENQIFN1YmZsb3cgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgTXVsdGlQYXRoIFRDUCBzdWJmbG93IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkuIExldCBtZSBwdWxsIHVwIHRoZSBgbmV0L21wdGNwL3N1YmZsb3cuY2AgZmlsZSDigJMgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwbGFjZSBmb3IgdGhlIGNvcmUgc3ViZmxvdyBsb2dpYywgcmlnaHQ/IE5vdywgSSB3YW50IHRvIHplcm8gaW4gb24gYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUsIGZyb20gYXBwcm94aW1hdGVseSBsaW5lcyA4MDQgdGhyb3VnaCA5NzAuIEkmIzM5O20gaG9waW5nIHRoYXQgcGFydGljdWxhciBjb2RlIGJsb2NrIHdpbGwgaWxsdW1pbmF0ZSB0aGUgYmVoYXZpb3VyIGFuZCBsb2dpYyBJIG5lZWQgdG8gZ3Jhc3AuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIHdpbGwgY29udGFpbiB0aGUgY3J1Y2lhbCBkZXRhaWxzIEkmIzM5O20gc2Vla2luZyByZWdhcmRpbmcgdGhlIHN1YmZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODUwOlx0XHR9IGVsc2UgaWYgKHN1YmZsb3dfcmVxLVx1MDAzZW1wX2pvaW4pIHtcbiA4NTE6XHRcdFx0bXB0Y3BfZ2V0X29wdGlvbnMoc2tiLCBcdTAwMjZtcF9vcHQpO1xuIDg1MjpcdFx0XHRpZiAoIShtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QSl9BQ0spKVxuIDg1MzpcdFx0XHRcdGZhbGxiYWNrID0gdHJ1ZTtcbiA4NTQ6XHRcdH1cbiA4NTU6XHRcbiA4NTY6XHRjcmVhdGVfY2hpbGQ6XG4gODU3Olx0XHRjaGlsZCA9IGxpc3RlbmVyLVx1MDAzZWljc2tfYWZfb3BzLVx1MDAzZXN5bl9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBkc3QsXG4gODU4Olx0XHRcdFx0XHRcdFx0ICAgICByZXFfdW5oYXNoLCBvd25fcmVxLCBvcHRfY2hpbGRfaW5pdCk7XG4gODU5Olx0XG4gODYwOlx0XHRpZiAoY2hpbGQgXHUwMDI2XHUwMDI2ICpvd25fcmVxKSB7XG4gODYxOlx0XHRcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKmN0eCA9IG1wdGNwX3N1YmZsb3dfY3R4KGNoaWxkKTtcbiA4NjI6XHRcbiA4NjM6XHRcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XG4gODY0Olx0XG4gODY1Olx0XHRcdC8qIHdlIG5lZWQgdG8gZmFsbGJhY2sgb24gY3R4IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgb24gcHJlLXJlcXNcbiA4NjY6XHRcdFx0ICogY2hlY2tpbmcgYWJvdmUuIEluIHRoZSBsYXR0ZXIgc2NlbmFyaW8gd2UgYWRkaXRpb25hbGx5IG5lZWRcbiA4Njc6XHRcdFx0ICogdG8gcmVzZXQgdGhlIGNvbnRleHQgdG8gbm9uIE1QVENQIHN0YXR1cy5cbiA4Njg6XHRcdFx0ICovXG4gODY5Olx0XHRcdGlmICghY3R4IHx8IGZhbGxiYWNrKSB7XG4gODcwOlx0XHRcdFx0aWYgKGZhbGxiYWNrX2lzX2ZhdGFsKSB7XG4gODcxOlx0XHRcdFx0XHRpZiAoIWN0eClcbiA4NzI6XHRcdFx0XHRcdFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcbiA4NzM6XHRcdFx0XHRcdFx0XHRcdE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCk7XG4gODc0Olx0XHRcdFx0XHRlbHNlXG4gODc1Olx0XHRcdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG4gODc2Olx0XHRcdFx0XHRcdFx0XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9NUEpPSU4pO1xuIDg3NzpcdFx0XHRcdFx0c3ViZmxvd19hZGRfcmVzZXRfcmVhc29uKHNrYiwgTVBUQ1BfUlNUX0VNUFRDUCk7XG4gODc4Olx0XHRcdFx0XHRnb3RvIGRpc3Bvc2VfY2hpbGQ7XG4gODc5Olx0XHRcdFx0fVxuIDg4MDpcdFx0XHRcdGdvdG8gZmFsbGJhY2s7XG4gODgxOlx0XHRcdH1cbiA4ODI6XHRcbiA4ODM6XHRcdFx0Lyogc3NrIGluaGVyaXRzIG9wdGlvbnMgb2YgbGlzdGVuZXIgc2sgKi9cbiA4ODQ6XHRcdFx0Y3R4LVx1MDAzZXNldHNvY2tvcHRfc2VxID0gbGlzdGVuZXItXHUwMDNlc2V0c29ja29wdF9zZXE7XG4gODg1Olx0XG4gODg2Olx0XHRcdGlmIChjdHgtXHUwMDNlbXBfY2FwYWJsZSkge1xuIDg4NzpcdFx0XHRcdGN0eC1cdTAwM2Vjb25uID0gbXB0Y3Bfc2tfY2xvbmVfaW5pdChsaXN0ZW5lci1cdTAwM2Vjb25uLCBcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xuIDg4ODpcdFx0XHRcdGlmICghY3R4LVx1MDAzZWNvbm4pXG4gODg5Olx0XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDg5MDpcdFxuIDg5MTpcdFx0XHRcdGN0eC1cdTAwM2VzdWJmbG93X2lkID0gMTtcbiA4OTI6XHRcdFx0XHRvd25lciA9IG1wdGNwX3NrKGN0eC1cdTAwM2Vjb25uKTtcbiA4OTM6XHRcbiA4OTQ6XHRcdFx0XHRpZiAobXBfb3B0LmRlbnlfam9pbl9pZDApXG4gODk1Olx0XHRcdFx0XHRXUklURV9PTkNFKG93bmVyLVx1MDAzZXBtLnJlbW90ZV9kZW55X2pvaW5faWQwLCB0cnVlKTtcbiA4OTY6XHRcbiA4OTc6XHRcdFx0XHRtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihvd25lciwgY2hpbGQsIDEpO1xuIDg5ODpcdFxuIDg5OTpcdFx0XHRcdC8qIHdpdGggT29PIHBhY2tldHMgd2UgY2FuIHJlYWNoIGhlcmUgd2l0aG91dCBpbmdyZXNzXG4gOTAwOlx0XHRcdFx0ICogbXBjIG9wdGlvblxuIDkwMTpcdFx0XHRcdCAqL1xuIDkwMjpcdFx0XHRcdGlmIChtcF9vcHQuc3Vib3B0aW9ucyBcdTAwMjYgT1BUSU9OX01QVENQX01QQ19BQ0spIHtcbiA5MDM6XHRcdFx0XHRcdG1wdGNwX3BtX2Z1bGx5X2VzdGFibGlzaGVkKG93bmVyLCBjaGlsZCk7XG4gOTA0Olx0XHRcdFx0XHRjdHgtXHUwMDNlcG1fbm90aWZpZWQgPSAxO1xuIDkwNTpcdFx0XHRcdH1cbiA5MDY6XHRcdFx0fSBlbHNlIGlmIChjdHgtXHUwMDNlbXBfam9pbikge1xuIDkwNzpcdFx0XHRcdG93bmVyID0gc3ViZmxvd19yZXEtXHUwMDNlbXNrO1xuIDkwODpcdFx0XHRcdGlmICghb3duZXIpIHtcbiA5MDk6XHRcdFx0XHRcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FUFJPSElCSVQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ2NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQIEZhc3QgT3BlbiBhbmQgQ29ubmVjdGlvbiBSZXF1ZXN0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGRpdmUgaW50byB0aGUgZ2l0IGxvZyB0byB1bmRlcnN0YW5kIHRoZSAmIzM5O3doeSYjMzk7IGJlaGluZCB0aGlzIGNoYW5nZS4mIzM0OyBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGF0LCBtYXliZSBhIHF1aWNrIGBncmVwcGVyYCBydW4gd291bGQgZ2l2ZSBtZSB0aGUgY29udGV4dCBJIG5lZWQsIG9yIHBlcmhhcHMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBkaWZmIHdpbGwgYmUgc3VmZmljaWVudCB0byBnbGVhbiB0aGUgcHVycG9zZS4gVGhlIGNvbW1pdCBpbiB0aGUgd29ya3NwYWNlIGlzIGBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdgLCB3aGljaCBkb2VzbiYjMzk7dCB0ZWxsIG1lIG11Y2guCgpOb3csIGxvb2tpbmcgYXQgdGhlIGRpZmYgaXRzZWxmLCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSB0b3VjaGluZyBgbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNgIGFuZCBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLiBTcGVjaWZpY2FsbHksIEkgc2VlIGNoYW5nZXMgcmVsYXRlZCB0byBUQ1AgRmFzdCBPcGVuIGNoaWxkIHNvY2tldCBjcmVhdGlvbiBhbmQgVENQIGNvbm5lY3Rpb24gcmVxdWVzdHMsIGluY2x1ZGluZyBoYW5kbGluZyBvZiByZXF1ZXN0IHNvY2tldHMgYW5kIGEgbmV3IGBkcm9wX3JlcWAgZmllbGQuICBUaGUgYWRkZWQgYHJza19kcm9wX3JlcWAgY2FsbHMgd2l0aGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBhbmQgYHRjcF9jb25uX3JlcXVlc3RgIGFyZSBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4KCk15IGV4cGVydCBleWVzIHRlbGwgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suICBUaGlzIGFmZmVjdHMgVENQL01QVENQIHNvY2tldCBjcmVhdGlvbiBhbmQgU1lOIGhhbmRsaW5nLCB3aGljaCBpcyBmdW5kYW1lbnRhbC4gVGhpcyBjb2RlIHdpbGwgYmUgcmVhY2hlZCBieSBzaW1wbHkgY3JlYXRpbmcgc3RhbmRhcmQgVENQL01QVENQIHNvY2tldHMgYW5kIHNlbmRpbmcgU1lOcyB3aXRoIG9yIHdpdGhvdXQgVENQIEZhc3QgT3BlbiBjb29raWVzLiBXZSYjMzk7cmUgdGFsa2luZyBzdGFuZGFyZCBzb2NrZXRzLCBsb29wYmFjaywgdHVuL3RhcCwgYW5kIG5ldHdvcmsgZGV2aWNlIGludGVyYWN0aW9uIOKAkyBpdCYjMzk7cyBhbGwgaW4gdGhlIG1peC4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFRDUCBzdGFjayBpbiBgbmV0L2lwdjQvYCB0aGlzIHBhdGNoICpzaG91bGQqIGJlIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIEl0IGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIHB1cnZpZXcgb2YgYmVpbmcgcmVhY2hhYmxlIGNvZGUgYW5kIG5vdCBiZWluZyBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgdW5yZWFjaGFibGUgaGFyZHdhcmUsIHRlYXJkb3duLCB1bmJpbmRpbmcsIG9yIGFyY2gtc3BlY2lmaWMuCgpOb3csIGxldCYjMzk7cyBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyB0byBiZSBjb21waWxlZCBhbmQgcmVhY2hhYmxlLiBJJiMzOTtsbCBjaGVjayBmb3IgYENPTkZJR19JTkVUYCAvIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19JUFY0YCBhcyB0aGUgYmFyZSBtaW5pbXVtLiBBIGRlZXBlciBkaXZlIHdpbGwgY29uZmlybSBgQ09ORklHX01QVENQYCBpcyBhbHNvIG5lZWRlZCwgZ2l2ZW4gdGhlIHJlZmVyZW5jZXMgdG8gYElTX0VOQUJMRUQoQ09ORklHX01QVENQKWAgYW5kIHRoZSBgcnNrX2Ryb3BfcmVxYCBmdW5jdGlvbnMuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBgQ09ORklHX01QVENQYCBpbiBgbmV0L21wdGNwL0tjb25maWdgIGFuZCBgbmV0L2lwdjQvTWFrZWZpbGVgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoQ09ORklHLip0Y3BfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0lORVRfRElBRykgJiM0Mzs9IGluZXRfZGlhZy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfSU5FVF9UQ1BfRElBRykgJiM0Mzs9IHRjcF9kaWFnLm9cbm5ldC9pcHY0L01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19JTkVUX1VEUF9ESUFHKSAmIzQzOz0gdWRwX2RpYWcub1xubmV0L2lwdjQvTWFrZWZpbGU9NDY9b2JqLSQoQ09ORklHX0lORVRfUkFXX0RJQUcpICYjNDM7PSByYXdfZGlhZy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo0NzpvYmotJChDT05GSUdfVENQX0NPTkdfQkJSKSAmIzQzOz0gdGNwX2Jici5vXG5uZXQvaXB2NC9NYWtlZmlsZTo0ODpvYmotJChDT05GSUdfVENQX0NPTkdfQklDKSAmIzQzOz0gdGNwX2JpYy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo0OTpvYmotJChDT05GSUdfVENQX0NPTkdfQ0RHKSAmIzQzOz0gdGNwX2NkZy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1MDpvYmotJChDT05GSUdfVENQX0NPTkdfQ1VCSUMpICYjNDM7PSB0Y3BfY3ViaWMub1xubmV0L2lwdjQvTWFrZWZpbGU6NTE6b2JqLSQoQ09ORklHX1RDUF9DT05HX0RDVENQKSAmIzQzOz0gdGNwX2RjdGNwLm9cbm5ldC9pcHY0L01ha2VmaWxlOjUyOm9iai0kKENPTkZJR19UQ1BfQ09OR19XRVNUV09PRCkgJiM0Mzs9IHRjcF93ZXN0d29vZC5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfVENQX0NPTkdfSFNUQ1ApICYjNDM7PSB0Y3BfaGlnaHNwZWVkLm9cbm5ldC9pcHY0L01ha2VmaWxlOjU0Om9iai0kKENPTkZJR19UQ1BfQ09OR19IWUJMQSkgJiM0Mzs9IHRjcF9oeWJsYS5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1NTpvYmotJChDT05GSUdfVENQX0NPTkdfSFRDUCkgJiM0Mzs9IHRjcF9odGNwLm9cbm5ldC9pcHY0L01ha2VmaWxlOjU2Om9iai0kKENPTkZJR19UQ1BfQ09OR19WRUdBUykgJiM0Mzs9IHRjcF92ZWdhcy5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1NzpvYmotJChDT05GSUdfVENQX0NPTkdfTlYpICYjNDM7PSB0Y3BfbnYub1xubmV0L2lwdjQvTWFrZWZpbGU6NTg6b2JqLSQoQ09ORklHX1RDUF9DT05HX1ZFTk8pICYjNDM7PSB0Y3BfdmVuby5vXG5uZXQvaXB2NC9NYWtlZmlsZTo1OTpvYmotJChDT05GSUdfVENQX0NPTkdfU0NBTEFCTEUpICYjNDM7PSB0Y3Bfc2NhbGFibGUub1xubmV0L2lwdjQvTWFrZWZpbGU6NjA6b2JqLSQoQ09ORklHX1RDUF9DT05HX0xQKSAmIzQzOz0gdGNwX2xwLm9cbm5ldC9pcHY0L01ha2VmaWxlOjYxOm9iai0kKENPTkZJR19UQ1BfQ09OR19ZRUFIKSAmIzQzOz0gdGNwX3llYWgub1xubmV0L2lwdjQvTWFrZWZpbGU6NjI6b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSAmIzQzOz0gdGNwX2lsbGlub2lzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSB0Y3BfYnBmLm9cbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHVkcF9icGYub1xuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTY3PW9iai0kKENPTkZJR19YRlJNKSAmIzQzOz0geGZybTRfcG9saWN5Lm8geGZybTRfc3RhdGUubyB4ZnJtNF9pbnB1dC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS02OC1cdFx0ICAgICAgeGZybTRfb3V0cHV0Lm8geGZybTRfcHJvdG9jb2wub1xubmV0L2lwdjQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX1RDUF9BTykgJiM0Mzs9IHRjcF9hby5vXG5uZXQvaXB2NC9NYWtlZmlsZS03MC1cbm5ldC9pcHY0L01ha2VmaWxlPTcxPWlmZXEgKCQoQ09ORklHX0JQRl9KSVQpLHkpXG5uZXQvaXB2NC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfdGNwX2NhLm9cbm5ldC9pcHY0L01ha2VmaWxlLTczLWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgYWdhaW4uIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIGJ1dCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhpcyBzZWN0aW9uLiBJIHdhbnQgdG8gc2VlIHdoYXQmIzM5O3MgYmVpbmcgYnVpbHQsIGhvdyBpdCYjMzk7cyBiZWluZyBidWlsdCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBidWlsZCBmbGFncyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBJdCYjMzk7cyBlYXN5IHRvIGZvY3VzIG9uIGluZGl2aWR1YWwgZmlsZXMsIGJ1dCB0aGUgTWFrZWZpbGUmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSAqc3lzdGVtKiBhcyBhIHdob2xlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYW55IHJlY2VudCBjaGFuZ2VzIGhlcmUsIGFuZCBsb29rIGZvciBhbnkgY2x1ZXMuIEnigJltIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBtb2R1bGVzIGFuZCBrZXJuZWwgb2JqZWN0cy4gVGltZSB0byBkaXZlIGluLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggVENQL0lQIChJTkVUKSBsYXllci5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXG4gICA3Olx0XHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXG4gICA4Olx0XHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcbiAgIDk6XHRcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxuICAxMDpcdFx0ICAgICB0Y3AubyB0Y3BfaW5wdXQubyB0Y3Bfb3V0cHV0Lm8gdGNwX3RpbWVyLm8gdGNwX2lwdjQubyBcXFxuICAxMTpcdFx0ICAgICB0Y3BfbWluaXNvY2tzLm8gdGNwX2NvbmcubyB0Y3BfbWV0cmljcy5vIHRjcF9mYXN0b3Blbi5vIFxcXG4gIDEyOlx0XHQgICAgIHRjcF9yZWNvdmVyeS5vIHRjcF91bHAubyBcXFxuICAxMzpcdFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXG4gIDE0Olx0XHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXG4gIDE1Olx0XHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXG4gIDE2Olx0XHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG4gIDE3Olx0XHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXG4gIDE4Olx0XG4gIDE5Olx0b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICYjNDM7PSBpcF90dW5uZWwub1xuICAyMDpcdG9iai0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjQub1xuICAyMTpcdG9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4gIDIyOlx0b2JqLSQoQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUykgJiM0Mzs9IGZpYl9ydWxlcy5vXG4gIDIzOlx0b2JqLSQoQ09ORklHX0lQX01ST1VURSkgJiM0Mzs9IGlwbXIub1xuICAyNDpcdG9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSAmIzQzOz0gaXBtcl9iYXNlLm9cbiAgMjU6XHRvYmotJChDT05GSUdfTkVUX0lQSVApICYjNDM7PSBpcGlwLm9cbiAgMjY6XHRncmUteSA6PSBncmVfZGVtdXgub1xuICAyNzpcdGZvdS15IDo9IGZvdV9jb3JlLm8gZm91X25sLm8gZm91X2JwZi5vXG4gIDI4Olx0b2JqLSQoQ09ORklHX05FVF9GT1UpICYjNDM7PSBmb3Uub1xuICAyOTpcdG9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICYjNDM7PSBncmUub1xuICAzMDpcdG9iai0kKENPTkZJR19ORVRfSVBHUkUpICYjNDM7PSBpcF9ncmUub1xuICAzMTpcdHVkcF90dW5uZWwteSA6PSB1ZHBfdHVubmVsX2NvcmUubyB1ZHBfdHVubmVsX25pYy5vXG4gIDMyOlx0b2JqLSQoQ09ORklHX05FVF9VRFBfVFVOTkVMKSAmIzQzOz0gdWRwX3R1bm5lbC5vXG4gIDMzOlx0b2JqLSQoQ09ORklHX05FVF9JUFZUSSkgJiM0Mzs9IGlwX3Z0aS5vXG4gIDM0Olx0b2JqLSQoQ09ORklHX1NZTl9DT09LSUVTKSAmIzQzOz0gc3luY29va2llcy5vXG4gIDM1Olx0b2JqLSQoQ09ORklHX0lORVRfQUgpICYjNDM7PSBhaDQub1xuICAzNjpcdG9iai0kKENPTkZJR19JTkVUX0VTUCkgJiM0Mzs9IGVzcDQub1xuICAzNzpcdG9iai0kKENPTkZJR19JTkVUX0VTUF9PRkZMT0FEKSAmIzQzOz0gZXNwNF9vZmZsb2FkLm9cbiAgMzg6XHRvYmotJChDT05GSUdfSU5FVF9JUENPTVApICYjNDM7PSBpcGNvbXAub1xuICAzOTpcdG9iai0kKENPTkZJR19JTkVUX1hGUk1fVFVOTkVMKSAmIzQzOz0geGZybTRfdHVubmVsLm9cbiAgNDA6XHRvYmotJChDT05GSUdfSU5FVF9UVU5ORUwpICYjNDM7PSB0dW5uZWw0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5NzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYENPTkZJR19NUFRDUGAgaW4gYG5ldC9tcHRjcC9LY29uZmlnYDoKCioqQ2hlY2tpbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIE1QVENQIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFzIGFsd2F5cywgaXMgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBsYWNlIHdoZXJlIHRoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBmb3IgYENPTkZJR19NUFRDUGAsIHdoaWNoIEkmIzM5O2xsIHRoZW4gdXNlIHRvIGd1aWRlIHdoYXQgSSBjaGVjayBuZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhhdCBvcHRpb24sIHRvby4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBhbmQgd2hhdCBzdXBwb3J0aW5nIG9wdGlvbnMgbWlnaHQgYmUgcmVxdWlyZWQgb3IgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0XG4gICAyOlx0Y29uZmlnIE1QVENQXG4gICAzOlx0XHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDU6XHRcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcbiAgMTA6XHRcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcbiAgMTE6XHRcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxuICAxMjpcdFx0ICBNUFRDUC5cbiAgMTM6XHRcbiAgMTQ6XHRpZiBNUFRDUFxuICAxNTpcdFxuICAxNjpcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcbiAgMTc6XHRcdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4gIDE4Olx0XHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXG4gIDE5Olx0XG4gIDIwOlx0Y29uZmlnIE1QVENQX0lQVjZcbiAgMjE6XHRcdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiBJUFY2PXlcbiAgMjM6XHRcdGRlZmF1bHQgeVxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXG4gIDI2Olx0XHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBLVU5JVFxuICAyODpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMjk6XHRcdGhlbHBcbiAgMzA6XHRcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxuICAzMTpcdFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcbiAgMzI6XHRcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cbiAgMzM6XHRcbiAgMzQ6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2UgcmVmZXJcbiAgMzU6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzODpcdFxuICAzOTpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NzE5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgcnNrX2Ryb3BfcmVxYCBhbmQgRm9jdXNTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGByc2tfZHJvcF9yZXFgIGZ1bmN0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiB0aGlzIG5ldyBjb2RlLiBMb29raW5nIGF0IGBpbmNsdWRlL25ldC9tcHRjcC5oYCwgSSBzZWUgdGhlIGRlZmluaXRpb24gaXMgY29uZGl0aW9uYWwuIElmIGBDT05GSUdfTVBUQ1BgIGlzICpkaXNhYmxlZCosIHRoZW4gYHJza19kcm9wX3JlcWAganVzdCByZXR1cm5zIGBmYWxzZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBtZWFucyB0aG9zZSBgaWYgKG93bl9yZXEgJmFtcDsmYW1wOyByc2tfZHJvcF9yZXEocmVxKSlgIGFuZCBgfSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSlgIGNoZWNrcyBhcmUgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIHVubGVzcyBNUFRDUCBpcyBlbmFibGVkLiAgQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfSU5FVGAgd291bGQgYWxzbyBiZSByZXF1aXJlZCBieSB2aXJ0dWUgb2YgVENQLgoKTm93LCBzaGlmdGluZyBnZWFycywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGBGb2N1c1N5bWJvbHNgLiAgU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAuIEkgcmVjYWxsIHRoYXQgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGlzIHN0YXRpYy4gRnJvbSB3aGF0IEkmIzM5O3ZlIHNlZW4sIGl0JiMzOTtzIGNhbGxlZCBieSBgdGNwX3RyeV9mYXN0b3BlbmAgYW5kIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3NlbnRgIGFuZCB0aGUgcXVlc3Rpb24gaXMgaW4gd2hhdCBvdGhlciBjb250ZXh0IGl0IG1pZ2h0IGJlIHVzZWQuIE5vdyBJIHNob3VsZCBncmVwIGZvciBib3RoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTI5OD1zdGF0aWMgaW50IHRjcF9mYXN0b3Blbl9jb29raWVfZ2VuX2NoZWNrKHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMjUtXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozMjY6c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMyNy1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz00NDQ9c3RydWN0IHNvY2sgKnRjcF90cnlfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTQ4Ny1mYXN0b3Blbjpcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjQ4ODpcdFx0XHRjaGlsZCA9IHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc2ssIHNrYiwgcmVxKTtcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTQ4OS1cdFx0XHRpZiAoY2hpbGQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdGNwX2Nvbm5fcmVxdWVzdGAgQ2FsbGVycyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBjYWxsIHBhdGhzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbWV0aG9kaWNhbGx5IHRyYWNpbmcgdGhlIGNhbGxlcnMgb2YgYHRjcF9jb25uX3JlcXVlc3RgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgaW5pdGlhdGVkIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBUQ1AvSVAgc3RhY2suIEl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ganVzdCBsb29rIGF0IHRoZSBkaXJlY3QgY2FsbGVyczsgSSBuZWVkIHRvIGNvbnNpZGVyIGluZGlyZWN0IGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbHNpdGUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFjdGl2ZSBvcGVucywgcGFzc2l2ZSBvcGVucywgb3Igc29tZSBjb21iaW5hdGlvbj8gV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZSBhdCBlYWNoIGxldmVsPwoKSSBhbHNvIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2NvcGUgYW5kIGV4YW1pbmUgcmVsYXRlZCBmdW5jdGlvbnMsIG5vdCBqdXN0IGB0Y3BfY29ubl9yZXF1ZXN0YC4gV2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQsIHRlYXJkb3duLCBhbmQgbWFuYWdlbWVudD8gVGhpbmdzIGxpa2UgYHRjcF92NF9yY3ZgLCBgdGNwX2FjY2VwdGAsIGBpbmV0X2xpc3RlbmAsIGFuZCBhbnl0aGluZyBkZWFsaW5nIHdpdGggU1lOLCBTWU4tQUNLLCBhbmQgQUNLIHByb2Nlc3NpbmcgYXJlIGltbWVkaWF0ZWx5IGp1bXBpbmcgdG8gbWluZC4gSSBzaG91bGQgYmUgYWJsZSB0byBjcm9zcy1yZWZlcmVuY2Ugd2l0aCB0aGVzZSBmdW5jdGlvbnMgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIGFueSBwYXR0ZXJucyBvciBhcmVhcyB0aGF0IHdhcnJhbnQgZGVlcGVyIHNjcnV0aW55LiBUaGlzIGludmVzdGlnYXRpb24gaXMgZ29pbmcgdG8gZ28gZmFzdCBzbyB0aGF0IEkgY2FuIHF1aWNrbHkgYXNzZXNzIHRoZSBvdmVyYWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9jb25uX3JlcXVlc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNwLmg9MjQ3MT1pbnQgdGNwX3J0eF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpO1xuaW5jbHVkZS9uZXQvdGNwLmg6MjQ3MjppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbmluY2x1ZGUvbmV0L3RjcC5oLTI0NzMtXHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MzI2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzg2LVx0dHAtXHUwMDNlcmN2X213bmRfc2VxID0gdHAtXHUwMDNlcmN2X3d1cCAmIzQzOyB0cC1cdTAwM2VyY3Zfd25kO1xubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6Mzg3Olx0LyogdGNwX2Nvbm5fcmVxdWVzdCgpIGlzIHNlbmRpbmcgdGhlIFNZTkFDSyxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM4OC1cdCAqIGFuZCBxdWV1ZXMgdGhlIGNoaWxkIGludG8gbGlzdGVuZXIgYWNjZXB0IHF1ZXVlLlxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc1OTQ9dTE2IHRjcF9nZXRfc3luY29va2llX21zcyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjE5LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyMDppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MjEtXHRcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYz0xNjU1PWludCB0Y3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTE2NjAtXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjE2NjE6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX29wcyxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMTY2Mi1cdFx0XHRcdFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHMsIHNrLCBza2IpO1xuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTMxNj1zdGF0aWMgaW50IHRjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMyOC1cbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTMyOTpcdHJldHVybiB0Y3BfY29ubl9yZXF1ZXN0KFx1MDAyNnRjcDZfcmVxdWVzdF9zb2NrX29wcyxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMzMC1cdFx0XHRcdFx1MDAyNnRjcF9yZXF1ZXN0X3NvY2tfaXB2Nl9vcHMsIHNrLCBza2IpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjcyPXN0YXRpYyBpbnQgc3ViZmxvd192NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjgxLVxubmV0L21wdGNwL3N1YmZsb3cuYzo2ODI6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHMsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY4My1cdFx0XHRcdFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzAzPXN0YXRpYyBpbnQgc3ViZmxvd192Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNzE5LVxubmV0L21wdGNwL3N1YmZsb3cuYzo3MjA6XHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcdTAwMjZtcHRjcF9zdWJmbG93X3Y2X3JlcXVlc3Rfc29ja19vcHMsXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcyMS1cdFx0XHRcdFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjZfb3BzLCBzaywgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MjIKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA3MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBwcm9qZWN0IGd1aWRlbGluZXMgZm9yIGxpc3RpbmcgdGFyZ2V0ZWQgZmVhdHVyZSBsb2dpYy4gRmlyc3QsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgZnVuY3Rpb25zIHRvdWNoZWQ6IEkmIzM5O20gdHJhY2tpbmcgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AgYW5kIHdoZXJlIGB0Y3BfdHJ5X2Zhc3RvcGVuYCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBGYXN0IE9wZW4gYW5kIE1QVENQLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGF0IGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBoYXMgYmVlbiBtb2RpZmllZCBpbiBgbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNgLCBhbG9uZyB3aXRoIGNhbGxzIHRvIGB0Y3BfdHJ5X2Zhc3RvcGVuYCB3aGljaCBpdHNlbGYgY2FsbHMgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgLCBhbHNvIGluIGBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY2AsIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gVGhlbiBgc3ViZmxvd19zeW5fcmVjdl9zb2NrYCBpcyBpbiBgbmV0L21wdGNwL3N1YmZsb3cuY2AuIEkgbmVlZCB0byBlbnN1cmUgSSYjMzk7dmUgY292ZXJlZCBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgc28gYSBkb3VibGUtY2hlY2sgaXMgbmVjZXNzYXJ5LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgaXMgKnN0YXRpYyosIGJ1dCBJIGtub3cgdGhhdCBpbiBDLCBzdGF0aWMgZnVuY3Rpb25zIG9mdGVuIHN0aWxsIGhhdmUgc3ltYm9scyBpZiB0aGV5JiMzOTtyZSBub3QgaW5saW5lZCwgYWx0aG91Z2ggSSYjMzk7bGwgYmUgc3VyZSB0byBpbmNsdWRlIGl0LiBgdGNwX3RyeV9mYXN0b3BlbmAgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YCBhcmUgYm90aCBub24tc3RhdGljLiBTaW5jZSB0aGUgZ3VpZGVsaW5lcyBhc2sgbWUgdG8gaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgZXhlcmNpc2Ugc3RhdGljIGlubGluZSBoZWxwZXJzLCBhbmQgdGhvc2UgYXJlOgotICAgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgCi0gICBgdGNwX3RyeV9mYXN0b3BlbmAKLSAgIGB0Y3BfY29ubl9yZXF1ZXN0YAoKRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSBrbm93IEkmIzM5O2xsIG5lZWQgYElORVRgIGFuZCBgTVBUQ1BgLCBidXQgbGV0JiMzOTtzIGNvbmZpcm0gd2hldGhlciBgVENQX0ZBU1RPUEVOYCBpcyBhIHNlcGFyYXRlIGNvbmZpZyBvcHRpb24gb3IgaWYgaXQmIzM5O3MgaW1wbGljaXRseSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVENQXyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTQ1NT1jb25maWcgSU5FVF9ESUFHX0RFU1RST1lcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ2Ny1cbm5ldC9pcHY0L0tjb25maWc6NDY4Om1lbnVjb25maWcgVENQX0NPTkdfQURWQU5DRURcbm5ldC9pcHY0L0tjb25maWctNDY5LVx0Ym9vbCBcJiMzNDtUQ1A6IGFkdmFuY2VkIGNvbmdlc3Rpb24gY29udHJvbFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NDc5PWlmIFRDUF9DT05HX0FEVkFOQ0VEXG5uZXQvaXB2NC9LY29uZmlnLTQ4MC1cbm5ldC9pcHY0L0tjb25maWc6NDgxOmNvbmZpZyBUQ1BfQ09OR19CSUNcbm5ldC9pcHY0L0tjb25maWctNDgyLVx0dHJpc3RhdGUgXCYjMzQ7QmluYXJ5IEluY3JlYXNlIENvbmdlc3Rpb24gKEJJQykgY29udHJvbFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDk0LVxubmV0L2lwdjQvS2NvbmZpZzo0OTU6Y29uZmlnIFRDUF9DT05HX0NVQklDXG5uZXQvaXB2NC9LY29uZmlnLTQ5Ni1cdHRyaXN0YXRlIFwmIzM0O0NVQklDIFRDUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNTAyLVxubmV0L2lwdjQvS2NvbmZpZzo1MDM6Y29uZmlnIFRDUF9DT05HX1dFU1RXT09EXG5uZXQvaXB2NC9LY29uZmlnLTUwNC1cdHRyaXN0YXRlIFwmIzM0O1RDUCBXZXN0d29vZCYjNDM7XCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy01MTYtXG5uZXQvaXB2NC9LY29uZmlnOjUxNzpjb25maWcgVENQX0NPTkdfSFRDUFxubmV0L2lwdjQvS2NvbmZpZy01MTgtXHR0cmlzdGF0ZSBcJiMzNDtILVRDUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNTI3LVxubmV0L2lwdjQvS2NvbmZpZzo1Mjg6Y29uZmlnIFRDUF9DT05HX0hTVENQXG5uZXQvaXB2NC9LY29uZmlnLTUyOS1cdHRyaXN0YXRlIFwmIzM0O0hpZ2ggU3BlZWQgVENQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy01MzctXG5uZXQvaXB2NC9LY29uZmlnOjUzODpjb25maWcgVENQX0NPTkdfSFlCTEFcbm5ldC9pcHY0L0tjb25maWctNTM5LVx0dHJpc3RhdGUgXCYjMzQ7VENQLUh5YmxhIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTU0Ni1cbm5ldC9pcHY0L0tjb25maWc6NTQ3OmNvbmZpZyBUQ1BfQ09OR19WRUdBU1xubmV0L2lwdjQvS2NvbmZpZy01NDgtXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgVmVnYXNcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTU1Ni1cbm5ldC9pcHY0L0tjb25maWc6NTU3OmNvbmZpZyBUQ1BfQ09OR19OVlxubmV0L2lwdjQvS2NvbmZpZy01NTgtXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgTlZcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTU3Mi1cbm5ldC9pcHY0L0tjb25maWc6NTczOmNvbmZpZyBUQ1BfQ09OR19TQ0FMQUJMRVxubmV0L2lwdjQvS2NvbmZpZy01NzQtXHR0cmlzdGF0ZSBcJiMzNDtTY2FsYWJsZSBUQ1BcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTU4MS1cbm5ldC9pcHY0L0tjb25maWc6NTgyOmNvbmZpZyBUQ1BfQ09OR19MUFxubmV0L2lwdjQvS2NvbmZpZy01ODMtXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgTG93IFByaW9yaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy01OTAtXG5uZXQvaXB2NC9LY29uZmlnOjU5MTpjb25maWcgVENQX0NPTkdfVkVOT1xubmV0L2lwdjQvS2NvbmZpZy01OTItXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgVmVub1wmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNjAxLVxubmV0L2lwdjQvS2NvbmZpZzo2MDI6Y29uZmlnIFRDUF9DT05HX1lFQUhcbm5ldC9pcHY0L0tjb25maWctNjAzLVx0dHJpc3RhdGUgXCYjMzQ7WWVBSCBUQ1BcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTYxNS1cbm5ldC9pcHY0L0tjb25maWc6NjE2OmNvbmZpZyBUQ1BfQ09OR19JTExJTk9JU1xubmV0L2lwdjQvS2NvbmZpZy02MTctXHR0cmlzdGF0ZSBcJiMzNDtUQ1AgSWxsaW5vaXNcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTYyNy1cbm5ldC9pcHY0L0tjb25maWc6NjI4OmNvbmZpZyBUQ1BfQ09OR19EQ1RDUFxubmV0L2lwdjQvS2NvbmZpZy02MjktXHR0cmlzdGF0ZSBcJiMzNDtEYXRhQ2VudGVyIFRDUCAoRENUQ1ApXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy02NDgtXG5uZXQvaXB2NC9LY29uZmlnOjY0OTpjb25maWcgVENQX0NPTkdfQ0RHXG5uZXQvaXB2NC9LY29uZmlnLTY1MC1cdHRyaXN0YXRlIFwmIzM0O0NBSUEgRGVsYXktR3JhZGllbnQgKENERylcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTY2NS1cbm5ldC9pcHY0L0tjb25maWc6NjY2OmNvbmZpZyBUQ1BfQ09OR19CQlJcbm5ldC9pcHY0L0tjb25maWctNjY3LVx0dHJpc3RhdGUgXCYjMzQ7QkJSIFRDUFwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9NzIyPWVuZGlmXG5uZXQvaXB2NC9LY29uZmlnLTcyMy1cbm5ldC9pcHY0L0tjb25maWc6NzI0OmNvbmZpZyBUQ1BfQ09OR19DVUJJQ1xubmV0L2lwdjQvS2NvbmZpZy03MjUtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWc9NzI5PWNvbmZpZyBERUZBVUxUX1RDUF9DT05HXG4tLVxubmV0L2lwdjQvS2NvbmZpZy03NDMtXG5uZXQvaXB2NC9LY29uZmlnOjc0NDpjb25maWcgVENQX0FPXG5uZXQvaXB2NC9LY29uZmlnLTc0NS1cdGJvb2wgXCYjMzQ7VENQOiBBdXRoZW50aWNhdGlvbiBPcHRpb24gKFJGQzU5MjUpXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy03NTgtXG5uZXQvaXB2NC9LY29uZmlnOjc1OTpjb25maWcgVENQX01ENVNJR1xubmV0L2lwdjQvS2NvbmZpZy03NjAtXHRib29sIFwmIzM0O1RDUDogTUQ1IFNpZ25hdHVyZSBPcHRpb24gc3VwcG9ydCAoUkZDMjM4NSlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyNDUKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgdGNwX2Zhc3RvcGVuLmNgIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYHRjcF9mYXN0b3Blbi5jYCwgSSBzZWUgaXQmIzM5O3MgaW5jbHVkZWQgaW4gdGhlIGBvYmoteWAgbGlzdCBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0JiMzOTtzIHBhcnQgb2YgdGhlIGNvcmUgSVB2NCBuZXR3b3JraW5nIHN0YWNrLiBBbmQgdGhlIGZhY3QgdGhhdCBNUFRDUCBoYXMgYSBkZXBlbmRlbmN5IG9uIElORVQgaXMgYWxzbyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gVGhpcyBtZWFucyB0aGF0IHRoZSB0d28gKnJlYWxseSogcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGhlcmUgYXJlIGBJTkVUYCBhbmQgYE1QVENQYC4gVGhvc2UgYXJlIHRoZSB0aGluZ3MgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBhcyBJIGV2YWx1YXRlIHRoaXMuCgpMZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgY29ycmVjdGx5LiBUaGlzIGlzIHdvcnRoIGZ1enppbmcsIHRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUga2V5IGNvbmZpZ3VyYXRpb25zIGFyZSBgSU5FVGAgYW5kIGBNUFRDUGAsIHNvIHRoYXQgYWxpZ25zIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50LiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qtb247IGB0Y3BfY29ubl9yZXF1ZXN0YCwgYHRjcF90cnlfZmFzdG9wZW5gLCBhbmQgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGFyZSBhbGwgcmlnaHQgaW4gdGhlIGhlYXJ0IG9mIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBhbmQgRmFzdCBPcGVuLCB3aGljaCB0aGlzIHBhdGNoIGNsZWFybHkgYWltcyB0byBtb2RpZnkuCgpUaGUgcmVhc29uaW5nIHNlY3Rpb24gbWFrZXMgaXQgZXZlbiBjbGVhcmVyOiB0aGUgcGF0Y2ggbW9kaWZpZXMgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBwcm9jZXNzaW5nIGFuZCBGYXN0IE9wZW4gY2hpbGQgY3JlYXRpb24gdG8gY29ycmVjdGx5IGhhbmRsZSBNUFRDUCByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyAoYHJza19kcm9wX3JlcWApLiBUaGlzIG1lYW5zIGl0JiMzOTtzIHRvdWNoaW5nIGZ1bmRhbWVudGFsIGNvZGUgcGF0aHMgdGhhdCBoYW5kbGUgaW5jb21pbmcgU1lOIHBhY2tldHMsIGFuZCBGYXN0IE9wZW4gY29ubmVjdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIE1QVENQIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBleHBvc2VkIHRvIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW5jcmVhc2VkIGNvbXBsZXhpdHkgb2YgTVBUQ1AuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhlc2UgY2hhbmdlcyBpbnRlcmFjdCBhbmQgaWYgYW55IG5ldyBlZGdlIGNhc2VzIGFyZSBjcmVhdGVkLiBUaW1lIHRvIHJ1biBhIHF1aWNrIGBzZXQtcmVzdWx0c2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtNUFRDUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9jb25uX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7dGNwX3RyeV9mYXN0b3BlbiYjMzQ7LAogICAgJiMzNDt0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVENQL01QVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBoYW5kbGluZyBpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyBhbmQgVENQIEZhc3QgT3BlbiBjaGlsZCBjcmVhdGlvbiBpbiBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgd2hlbiBNUFRDUCBzdWJmbG93cyBhcmUgcmVqZWN0ZWQgb3IgZHJvcHBlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIFRDUCBoYW5kc2hha2UgYW5kIEZhc3QgT3BlbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TVBUQ1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfY29ubl9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O3RjcF90cnlfZmFzdG9wZW4mIzM0OywKICAgICYjMzQ7dGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFRDUC9NUFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgaW4gbmV0L2lwdjQvdGNwX2lucHV0LmMgYW5kIFRDUCBGYXN0IE9wZW4gY2hpbGQgY3JlYXRpb24gaW4gbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMgdG8gcHJvcGVybHkgaGFuZGxlIHJlcXVlc3Qgc29ja2V0IGRyb3BwaW5nIHdoZW4gTVBUQ1Agc3ViZmxvd3MgYXJlIHJlamVjdGVkIG9yIGRyb3BwZWQuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGV4ZWN1dGVkIGR1cmluZyBUQ1AgaGFuZHNoYWtlIGFuZCBGYXN0IE9wZW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNsZWFudXAgcGF0aHMgZm9yIE1QVENQIGFuZCBUQ1AgRmFzdCBPcGVuLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGB0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSBmYWxzZWAgZHVyaW5nIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgYW5kIGNoZWNrcyBgcnNrX2Ryb3BfcmVxKHJlcSlgIGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKClgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHNvY2sgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHdoZW4gYSByZXF1ZXN0IGlzIGRyb3BwZWQuXG5cbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOiBUaGUgZmllbGQgYGRyb3BfcmVxYCBpbiBgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB3aGVuIHRoZSByZXF1ZXN0X3NvY2sgaXMgY3JlYXRlZCwgZW5zdXJpbmcgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuIEluZm8tbGVhayAvIFVzZXItc3BhY2UgY29weSBBbmFseXNpczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBvcHRpb24gYnVmZmVycyBtb2RpZmllZC5cbjMuIEtBU0FOIHZzIEtNU0FOIEFwcGxpY2FiaWxpdHk6IFRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaCBpbnZvbHZlIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcsIHN0YXRlIG1hbmFnZW1lbnQsIGFuZCBtZW1vcnkgZnJlZWluZyAocG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIG1lbW9yeSBsZWFrcyksIHdoaWNoIGFyZSB0aG9yb3VnaGx5IG1vbml0b3JlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQga2VybmVsIHJlZmVyZW5jZSBjb3VudGVycy4gS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDJiOGExNWVlOGIyZTQ5NGQ3ZjJmODQ2YTVmOGU4NTdkNDM5NjcwYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTY6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCmluZGV4IDQ3MWM3OGJlNTUxMzcuLjIyNDk0ZmY3NDZjNzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCkBAIC0zMzcsNiAmIzQzOzMzNywxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLAogCWlmICghY2hpbGQpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWlmIChvd25fcmVxICZhbXA7JmFtcDsgcnNrX2Ryb3BfcmVxKHJlcSkpIHsKJiM0MzsJCWJoX3VubG9ja19zb2NrKGNoaWxkKTsKJiM0MzsJCXNvY2tfcHV0KGNoaWxkKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJc3Bpbl9sb2NrKCZhbXA7cXVldWUtJmd0O2Zhc3RvcGVucS5sb2NrKTsKIAlxdWV1ZS0mZ3Q7ZmFzdG9wZW5xLnFsZW4mIzQzOyYjNDM7OwogCXNwaW5fdW5sb2NrKCZhbXA7cXVldWUtJmd0O2Zhc3RvcGVucS5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMGY2MGExZGJmOTI3NC4uZWIwZTQyNTljMjgwNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTc2NjksNiAmIzQzOzc2NjksNyBAQCBpbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcywKIAl0Y3BfcnNrKHJlcSktJmd0O3R4aGFzaCA9IG5ldF90eF9ybmRoYXNoKCk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApCiAJdGNwX3JzayhyZXEpLSZndDtpc19tcHRjcCA9IDA7CiYjNDM7CXRjcF9yc2socmVxKS0mZ3Q7ZHJvcF9yZXEgPSBmYWxzZTsKICNlbmRpZgogCiAJdGNwX2NsZWFyX29wdGlvbnMoJmFtcDt0bXBfb3B0KTsKQEAgLTc3NzUsNiAmIzQzOzc3NzYsMTAgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsCiAJCVJFQURfT05DRShzay0mZ3Q7c2tfZGF0YV9yZWFkeSkoc2spOwogCQliaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7CiAJCXNvY2tfcHV0KGZhc3RvcGVuX3NrKTsKJiM0MzsJfSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkgewomIzQzOwkJcmVxc2tfZnJlZShyZXEpOwomIzQzOwkJZHN0X3JlbGVhc2UoZHN0KTsKJiM0MzsJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCXRjcF9yc2socmVxKS0mZ3Q7dGZvX2xpc3RlbmVyID0gZmFsc2U7CiAJCWlmICghd2FudF9jb29raWUgJmFtcDsmYW1wOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ4MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwYXRjaDoKCioqQW5hbHl6aW5nIHRoZSBQYXRjaDogSWRlbnRpZnlpbmcgYHJza19kcm9wX3JlcWAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBtb3ZlIHdvdWxkIGJlIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgYHJza19kcm9wX3JlcWAuIEZpcnN0LCBhIHF1aWNrIGBncmVwYCBmb3IgdGhhdCBzdHJpbmcgd2l0aGluIHRoZSBwYXRjaCBpdHNlbGYsIGFuZCB0aGVuIGV4cGFuZGluZyB0aGUgc2VhcmNoIGJleW9uZCwgaWYgbmVjZXNzYXJ5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQgYHJza19kcm9wX3JlcWAgKmlzKi4gSSBuZWVkIHRvIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkLiBJcyBpdCBhIGZ1bmN0aW9uLCBhIG1hY3JvLCBhIHZhcmlhYmxlPyBBbmQganVzdCBhcyBpbXBvcnRhbnRseSwgd2hlcmUgYW5kIGhvdyBpcyBpdCAqdXNlZCogd2l0aGluIHRoZSBleGlzdGluZyBjb2RlYmFzZT8gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgcGF0dGVybnMgd2lsbCBnaXZlIHRoZSBtb3N0IGltbWVkaWF0ZSBjb250ZXh0LiBBbHNvLCBpdCBtYXkgYmUgdGhlIGludGVudGlvbiBvZiB0aGUgcGF0Y2ggdG8gaW50cm9kdWNlIGEgYGRyb3BfcmVxYCBhbmQgcGVyaGFwcyBgcnNrX2Ryb3BfcmVxYCBpcyBhIHJlbmFtZSBvciBhbGlhcy4gSSBzaG91bGQgaWRlbnRpZnkgaG93IGBkcm9wX3JlcWAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgZGVmaW5pdGlvbnMgYW5kIGNhbGwgc2l0ZXMgaXMgdGhlIGtleSB0byBhc3Nlc3NpbmcgaW1wYWN0IGFuZCByaXNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyc2tfZHJvcF9yZXEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbXB0Y3AuaD0xMzc9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDEtXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE0MjpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTQzLXtcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI0NT1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI0OS1cbmluY2x1ZGUvbmV0L21wdGNwLmg6MjUwOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNTEte1xuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTAtXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjExOlx0XHRpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTItXHRcdFx0cmVxc2tfcHV0KHJlcSk7XG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MzI2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzM5LVxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6MzQwOlx0aWYgKG93bl9yZXEgXHUwMDI2XHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zNDEtXHRcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3NzgtXHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc3Nzk6XHR9IGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVx0XHRyZXFza19mcmVlKHJlcSk7XG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTY4Nz1zdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYzo5NDM6XHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy05NDQtXHRcdHJlcXNrX3F1ZXVlX3JlbW92ZWQoXHUwMDI2aW5ldF9jc2socmVxLVx1MDAzZXJza19saXN0ZW5lciktXHUwMDNlaWNza19hY2NlcHRfcXVldWUsIHJlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Ryb3BfcmVxJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmM9OTQ9aW50IGJuZ2Vfc2VuZF9tc2coc3RydWN0IGJuZ2VfYXV4cl9kZXYgKmF1eHJfZGV2LCBzdHJ1Y3QgYm5nZV9md19tc2cgKmZ3X21zZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jLTEwNy1cdGlmIChyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmM6MTA4Olx0XHRnb3RvIGRyb3BfcmVxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMTktXHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jOjEyMDpkcm9wX3JlcTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmMtMTIxLVx0Ym5nZV9od3JtX3JlcV9kcm9wKGJkLCByZXEpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jPTE1MjM9aW50IGJuZ2VfaHdybV9wb3J0X3FzdGF0c19leHQoc3RydWN0IGJuZ2VfZGV2ICpiZCwgdTggZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTU5Ny1cdFx0XHRcdHJjID0gLUVJTlZBTDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE1OTg6XHRcdFx0XHRnb3RvIGRyb3BfcmVxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTU5OS1cdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTYwNi1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE2MDc6ZHJvcF9yZXE6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYy0xNjA4LVx0Ym5nZV9od3JtX3JlcV9kcm9wKGJkLCByZXFfcWMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jPTQ2PXN0YXRpYyBpbnQgYm54dF9od3JtX3RlbXBfcXVlcnkoc3RydWN0IGJueHQgKmJwLCB1OCAqdGVtcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01Ny1cdGlmIChyYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jOjU4Olx0XHRnb3RvIGRyb3BfcmVxO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmMtNTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmMtNjktXHR9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYzo3MDpkcm9wX3JlcTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTcxLVx0aHdybV9yZXFfZHJvcChicCwgcmVxKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9MjM2PWludCBibnh0X3NlbmRfbXNnKHN0cnVjdCBibnh0X2VuX2RldiAqZWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjU0LVx0aWYgKHJjKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjI1NTpcdFx0Z290byBkcm9wX3JlcTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy0yNTYtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI2Ni1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzoyNjc6ZHJvcF9yZXE6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjY4LVx0aHdybV9yZXFfZHJvcChicCwgcmVxKTtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTExMDY9c3RhdGljIGludCBmX21pZGkyX3N0YXJ0X2VwKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqdXNiX2VwLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTEyMS0vKiBEcm9wIHBlbmRpbmcgcmVxdWVzdHMgKi9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTEyMjpzdGF0aWMgdm9pZCBmX21pZGkyX2Ryb3BfcmVxcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTEyMy17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMjA0PXN0YXRpYyB2b2lkIGZfbWlkaTJfZnJlZV9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTIwNS17XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDY6XHRmX21pZGkyX2Ryb3BfcmVxcyh1c2JfZXApO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA3LVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTI0MD1zdGF0aWMgdm9pZCBmX21pZGkyX3N0b3BfZXBzKHN0cnVjdCBmX21pZGkyX3VzYl9lcCAqZXBfaW4sXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQyLXtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0MzpcdGZfbWlkaTJfZHJvcF9yZXFzKGVwX2luKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcdGZfbWlkaTJfZHJvcF9yZXFzKGVwX291dCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyNDUtXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyhlcF9pbik7XG4tLVxuaW5jbHVkZS9saW51eC90Y3AuaD0xNTA9c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sge1xuLS1cbmluY2x1ZGUvbGludXgvdGNwLmgtMTU3LSNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcbmluY2x1ZGUvbGludXgvdGNwLmg6MTU4Olx0Ym9vbFx0XHRcdFx0ZHJvcF9yZXE7XG5pbmNsdWRlL2xpbnV4L3RjcC5oLTE1OS0jZW5kaWZcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oPTEzNz1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbi0tXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0MS1cbmluY2x1ZGUvbmV0L21wdGNwLmg6MTQyOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDMte1xuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNDQ6XHRyZXR1cm4gdGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwIFx1MDAyNlx1MDAyNiB0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXE7XG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0NS19XG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0yNDU9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNDktXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI1MDpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjUxLXtcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MTk3PXN0cnVjdCBzb2NrICp0Y3BfZ2V0X2Nvb2tpZV9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjEwLVxubmV0L2lwdjQvc3luY29va2llcy5jOjIxMTpcdFx0aWYgKHJza19kcm9wX3JlcShyZXEpKSB7XG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjEyLVx0XHRcdHJlcXNrX3B1dChyZXEpO1xuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTMyNj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMzOS1cbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjM0MDpcdGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzQxLVx0XHRiaF91bmxvY2tfc29jayhjaGlsZCk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0MjItXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDIzOnN0YXRpYyBpbmxpbmUgdm9pZCBwcl9kcm9wX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIF9fdTE2IHBvcnQsIGludCBmYW1pbHkpXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDI0LXtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2NzEtXHR0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgPSAwO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzY3MjpcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY3My0jZW5kaWZcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzMwLVx0XHRcdCAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6NzczMTpcdFx0XHRwcl9kcm9wX3JlcShyZXEsIG50b2hzKHRjcF9oZHIoc2tiKS1cdTAwM2Vzb3VyY2UpLFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczMi1cdFx0XHRcdCAgICByc2tfb3BzLVx1MDAzZWZhbWlseSk7XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc3OC1cdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc3OTpcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3ODAtXHRcdHJlcXNrX2ZyZWUocmVxKTtcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMtOTQyLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjk0MzpcdGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cdFx0cmVxc2tfcXVldWVfcmVtb3ZlZChcdTAwMjZpbmV0X2NzayhyZXEtXHUwMDNlcnNrX2xpc3RlbmVyKS1cdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZSwgcmVxKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTgwND1zdGF0aWMgc3RydWN0IHNvY2sgKnN1YmZsb3dfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy04NjItXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjg2MzpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTg2NC1cbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTk0OC1cdFx0XHRTVUJGTE9XX1JFUV9JTkNfU1RBVFMocmVxLCBNUFRDUF9NSUJfSk9JTkFDS1JYKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6OTQ5Olx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IHRydWU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTk1MC1cdFx0fVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtOTYyLVx0bXB0Y3Bfc3ViZmxvd19kcm9wX2N0eChjaGlsZCk7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjk2MzpcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IHRydWU7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTk2NC1cdGluZXRfY3NrX3ByZXBhcmVfZm9yX2Rlc3Ryb3lfc29jayhjaGlsZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODcKCQkJCQkJCW91dHB1dDogNzIKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBhbmQgTVBUQ1AgS2VybmVsIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUga2VybmVsIHNvdXJjZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIFRDUCBhbmQgTVBUQ1AgaW1wbGVtZW50YXRpb25zLiBJJiMzOTttIHRoaW5raW5nIHRoZSBiZXN0IHBsYWNlIHRvIGJlZ2luIGlzIHdpdGggYGluY2x1ZGUvbGludXgvdGNwLmhgLCBhcm91bmQgbGluZSAxNTAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgY29yZSBUQ1AgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBtYXliZSBzb21lIGtleSBmdW5jdGlvbiBwcm90b3R5cGVzLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBzd2l0Y2ggZ2VhcnMgYW5kIGluc3BlY3QgYGluY2x1ZGUvbmV0L21wdGNwLmhgIGFyb3VuZCBsaW5lIDEzNy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBNUFRDUC1zcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBwb3NzaWJseSBzb21lIGNvcmUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBtdWx0aXBhdGggVENQIGNvbm5lY3Rpb25zIHRoZXJlLgoKVGhlbiwgSSYjMzk7bGwgc3dpdGNoIG92ZXIgdG8gdGhlIGltcGxlbWVudGF0aW9ucywgc28gSSBuZWVkIHRvIGNoZWNrIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEkga25vdyB0aGF0JiMzOTtzIHdoZXJlIGEgbG90IG9mIHRoZSBpbmNvbWluZyBUQ1AgcGFja2V0IHByb2Nlc3NpbmcgbG9naWMgcmVzaWRlcy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoaW5ncyBsaWtlIHNlZ21lbnQgcmVhc3NlbWJseSwgQUNLIHByb2Nlc3NpbmcsIGFuZCBjb25nZXN0aW9uIGNvbnRyb2wgdGhlcmUuIEFuZCBzaW5jZSBJJiMzOTttIGludGVyZXN0ZWQgaW4gVENQIEZhc3QgT3BlbiwgSSBzaG91bGQgYWxzbyBsb29rIGF0IGBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY2AuIEkgZXhwZWN0IHRoZXJlJiMzOTtsbCBiZSB0aGUgY29kZSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBmYXN0IG9wZW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBkYXRhIHRyYW5zZmVyLiBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGUgaGVhZGVyIGZpbGVzIHdpdGggdGhlc2UgaW1wbGVtZW50YXRpb24gZmlsZXMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0NTpcdCAqIG9ubHkgZm91ciBvcHRpb25zIHdpbGwgZml0IGluIGEgc3RhbmRhcmQgVENQIGhlYWRlciAqL1xuIDE0NjpcdCNkZWZpbmUgVENQX05VTV9TQUNLUyA0XG4gMTQ3Olx0XG4gMTQ4Olx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzO1xuIDE0OTpcdFxuIDE1MDpcdHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrIHtcbiAxNTE6XHRcdHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayBcdHJlcTtcbiAxNTI6XHRcdGNvbnN0IHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrX29wcyAqYWZfc3BlY2lmaWM7XG4gMTUzOlx0XHR1NjRcdFx0XHRcdHNudF9zeW5hY2s7IC8qIGZpcnN0IFNZTkFDSyBzZW50IHRpbWUgKi9cbiAxNTQ6XHRcdGJvb2xcdFx0XHRcdHRmb19saXN0ZW5lcjtcbiAxNTU6XHRcdGJvb2xcdFx0XHRcdGlzX21wdGNwO1xuIDE1NjpcdFx0Ym9vbFx0XHRcdFx0cmVxX3VzZWNfdHM7XG4gMTU3Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuIDE1ODpcdFx0Ym9vbFx0XHRcdFx0ZHJvcF9yZXE7XG4gMTU5Olx0I2VuZGlmXG4gMTYwOlx0XHR1MzJcdFx0XHRcdHR4aGFzaDtcbiAxNjE6XHRcdHUzMlx0XHRcdFx0cmN2X2lzbjtcbiAxNjI6XHRcdHUzMlx0XHRcdFx0c250X2lzbjtcbiAxNjM6XHRcdHUzMlx0XHRcdFx0dHNfb2ZmO1xuIDE2NDpcdFx0dTMyXHRcdFx0XHRzbnRfdHN2YWxfZmlyc3Q7XG4gMTY1Olx0XHR1MzJcdFx0XHRcdHNudF90c3ZhbF9sYXN0O1xuIDE2NjpcdFx0dTMyXHRcdFx0XHRsYXN0X29vd19hY2tfdGltZTsgLyogbGFzdCBTWU5BQ0sgKi9cbiAxNjc6XHRcdHUzMlx0XHRcdFx0cmN2X254dDsgLyogdGhlIGFjayAjIGJ5IFNZTkFDSy4gRm9yXG4gMTY4Olx0XHRcdFx0XHRcdFx0ICAqIEZhc3RPcGVuIGl0JiMzOTtzIHRoZSBzZXEjXG4gMTY5Olx0XHRcdFx0XHRcdFx0ICAqIGFmdGVyIGRhdGEtaW4tU1lOLlxuIDE3MDpcdFx0XHRcdFx0XHRcdCAgKi9cbiAxNzE6XHRcdHU4XHRcdFx0XHRzeW5fdG9zO1xuIDE3MjpcdFx0Ym9vbFx0XHRcdFx0YWNjZWNuX29rO1xuIDE3MzpcdFx0dThcdFx0XHRcdHN5bl9lY3Rfc250OiAyLFxuIDE3NDpcdFx0XHRcdFx0XHRzeW5fZWN0X3JjdjogMixcbiAxNzU6XHRcdFx0XHRcdFx0YWNjZWNuX2ZhaWxfbW9kZTo0O1xuIDE3NjpcdFx0dThcdFx0XHRcdHNhd19hY2NlY25fb3B0ICA6MjtcbiAxNzc6XHQjaWZkZWYgQ09ORklHX1RDUF9BT1xuIDE3ODpcdFx0dThcdFx0XHRcdGFvX2tleWlkO1xuIDE3OTpcdFx0dThcdFx0XHRcdGFvX3Jjdl9uZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L21wdGNwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzNTpcdH1cbiAxMzY6XHRcbiAxMzc6XHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAxMzg6XHR7XG4gMTM5Olx0XHRyZXR1cm4gdGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwO1xuIDE0MDpcdH1cbiAxNDE6XHRcbiAxNDI6XHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAxNDM6XHR7XG4gMTQ0Olx0XHRyZXR1cm4gdGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwIFx1MDAyNlx1MDAyNiB0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXE7XG4gMTQ1Olx0fVxuIDE0NjpcdFxuIDE0NzpcdHZvaWQgbXB0Y3Bfc3BhY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgaW50ICpzcGFjZSwgaW50ICpmdWxsX3NwYWNlKTtcbiAxNDg6XHRib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAxNDk6XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSwgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcbiAxNTA6XHRib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxuIDE1MTpcdFx0XHRcdCAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcbiAxNTI6XHRpbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gMTUzOlx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZywgYm9vbCBoYXNfdHMsXG4gMTU0Olx0XHRcdFx0ICAgICAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcbiAxNTU6XHRib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiAxNTY6XHRcbiAxNTc6XHR2b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuIDE1ODpcdFx0XHRcdCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xuIDE1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODgyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgSGVhZGVyIERlZmluaXRpb25zKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG5vbi1NUFRDUCBkZWZpbml0aW9ucyByZWxhdGVkIHRvIE1QVENQIGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBoZWFkIG92ZXIgdG8gYGluY2x1ZGUvbmV0L21wdGNwLmhgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAyNDUuIEkga25vdyB0aG9zZSBkZWZpbml0aW9ucyBhcmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgaW50ZXJhY3RzIHdpdGggdGhlIE1QVENQIGxheWVyLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBsaW5lcyB1cCB3aXRoIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgZXZlcnl0aGluZyBmaXRzIHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9tcHRjcC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDA6XHRzdGF0aWMgaW5saW5lIGJvb2wgc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxuIDI0MTpcdHtcbiAyNDI6XHRcdHJldHVybiBmYWxzZTtcbiAyNDM6XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4gMjQ2Olx0e1xuIDI0NzpcdFx0cmV0dXJuIGZhbHNlO1xuIDI0ODpcdH1cbiAyNDk6XHRcbiAyNTA6XHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAyNTE6XHR7XG4gMjUyOlx0XHRyZXR1cm4gZmFsc2U7XG4gMjUzOlx0fVxuIDI1NDpcdFxuIDI1NTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtcHRjcF9zeW5fb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4gMjU2Olx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGludCAqc2l6ZSxcbiAyNTc6XHRcdFx0XHRcdCAgICAgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKVxuIDI1ODpcdHtcbiAyNTk6XHRcdHJldHVybiBmYWxzZTtcbiAyNjA6XHR9XG4gMjYxOlx0XG4gMjYyOlx0c3RhdGljIGlubGluZSBib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcbiAyNjM6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50ICpzaXplLFxuIDI2NDpcdFx0XHRcdFx0XHRzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjcKCQkJCQkJCW91dHB1dDogNzgKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRDUCBGYXN0IE9wZW4gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIFRDUCBGYXN0IE9wZW4gKFRGTykgYW5kIHN0YW5kYXJkIFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGFyb3VuZCBpbiB0aGUgYG5ldC9pcHY0YCBkaXJlY3RvcnksIG5hdHVyYWxseS4gSSBzZWVtIHRvIHJlY2FsbCBzb21lIGtleSBsb2dpYyBiZWluZyBpbiBgdGNwX2Zhc3RvcGVuLmNgLCBhbmQgSSBiZWxpZXZlIHRoYXQgbGluZSAzMzcgaXMgYSBsaWtlbHkgYXJlYSB0byBzdGFydCwgbWF5YmUgbG9va2luZyBmb3IgdGhlIGtleSBmYXN0IG9wZW4gbG9naWMgaW4gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZy4gVGhlbiwgSSBzaG91bGQgaGVhZCBvdmVyIHRvIGB0Y3BfaW5wdXQuY2AuIEkgbmVlZCB0byBjb21wYXJlIGhvdyBub3JtYWwgVENQIGNvbm5lY3Rpb25zIGFyZSB0cmVhdGVkIGR1cmluZyBwcm9jZXNzaW5nLCBjb21wYXJlZCB0byBob3cgVEZPIG1pZ2h0IGJlIGhhbmRsZWQuIEkgZmlndXJlIHRoYXQgbGluZSA3NjY5IGluIGB0Y3BfaW5wdXQuY2AgaXMgcHJvYmFibHkgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gdGhlcmUuIFRoZXNlIHR3byBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIGNvbm5lY3Rpb24gc2V0dXAgcHJvY2VzcywgYW5kIHRoZSBkaWZmZXJlbmNlcyB3aGVuIFRGTyBpcyBpbiBwbGF5LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdH1cbiAzMjE6XHRvdXQ6XG4gMzIyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAzMjM6XHRcdHJldHVybiByZXQ7XG4gMzI0Olx0fVxuIDMyNTpcdFxuIDMyNjpcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4gMzI3Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gMzI4Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcbiAzMjk6XHR7XG4gMzMwOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwO1xuIDMzMTpcdFx0c3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUgPSBcdTAwMjZpbmV0X2NzayhzayktXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XG4gMzMyOlx0XHRzdHJ1Y3Qgc29jayAqY2hpbGQ7XG4gMzMzOlx0XHRib29sIG93bl9yZXE7XG4gMzM0Olx0XG4gMzM1Olx0XHRjaGlsZCA9IGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgTlVMTCxcbiAzMzY6XHRcdFx0XHRcdFx0XHRcdCBOVUxMLCBcdTAwMjZvd25fcmVxLCBOVUxMKTtcbiAzMzc6XHRcdGlmICghY2hpbGQpXG4gMzM4Olx0XHRcdHJldHVybiBOVUxMO1xuIDMzOTpcdFxuIDM0MDpcdFx0aWYgKG93bl9yZXEgXHUwMDI2XHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XG4gMzQxOlx0XHRcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcbiAzNDI6XHRcdFx0c29ja19wdXQoY2hpbGQpO1xuIDM0MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdHNwaW5fbG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4gMzQ3Olx0XHRxdWV1ZS1cdTAwM2VmYXN0b3BlbnEucWxlbiYjNDM7JiM0Mzs7XG4gMzQ4Olx0XHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG4gMzQ5Olx0XG4gMzUwOlx0XHQvKiBJbml0aWFsaXplIHRoZSBjaGlsZCBzb2NrZXQuIEhhdmUgdG8gZml4IHNvbWUgdmFsdWVzIHRvIHRha2VcbiAzNTE6XHRcdCAqIGludG8gYWNjb3VudCB0aGUgY2hpbGQgaXMgYSBGYXN0IE9wZW4gc29ja2V0IGFuZCBpcyBjcmVhdGVkXG4gMzUyOlx0XHQgKiBvbmx5IG91dCBvZiB0aGUgYml0cyBjYXJyaWVkIGluIHRoZSBTWU4gcGFja2V0LlxuIDM1MzpcdFx0ICovXG4gMzU0Olx0XHR0cCA9IHRjcF9zayhjaGlsZCk7XG4gMzU1Olx0XG4gMzU2Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIodHAtXHUwMDNlZmFzdG9wZW5fcnNrLCByZXEpO1xuIDM1NzpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXRmb19saXN0ZW5lciA9IHRydWU7XG4gMzU4Olx0XG4gMzU5Olx0XHQvKiBSRkMxMzIzOiBUaGUgd2luZG93IGluIFNZTiBcdTAwMjYgU1lOL0FDSyBzZWdtZW50cyBpcyBuZXZlclxuIDM2MDpcdFx0ICogc2NhbGVkLiBTbyBjb3JyZWN0IGl0IGFwcHJvcHJpYXRlbHkuXG4gMzYxOlx0XHQgKi9cbiAzNjI6XHRcdHRwLVx1MDAzZXNuZF93bmQgPSBudG9ocyh0Y3BfaGRyKHNrYiktXHUwMDNld2luZG93KTtcbiAzNjM6XHRcdHRwLVx1MDAzZW1heF93aW5kb3cgPSB0cC1cdTAwM2VzbmRfd25kO1xuIDM2NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzY2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NjYwOlx0XG43NjYxOlx0XHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKHJza19vcHMsIHNrLCAhd2FudF9jb29raWUpO1xuNzY2MjpcdFx0aWYgKCFyZXEpXG43NjYzOlx0XHRcdGdvdG8gZHJvcDtcbjc2NjQ6XHRcbjc2NjU6XHRcdHJlcS1cdTAwM2VzeW5jb29raWUgPSB3YW50X2Nvb2tpZTtcbjc2NjY6XHRcdHRjcF9yc2socmVxKS1cdTAwM2VhZl9zcGVjaWZpYyA9IGFmX29wcztcbjc2Njc6XHRcdHRjcF9yc2socmVxKS1cdTAwM2V0c19vZmYgPSAwO1xuNzY2ODpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXJlcV91c2VjX3RzID0gZmFsc2U7XG43NjY5Olx0XHR0Y3BfcnNrKHJlcSktXHUwMDNldHhoYXNoID0gbmV0X3R4X3JuZGhhc2goKTtcbjc2NzA6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG43NjcxOlx0XHR0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgPSAwO1xuNzY3MjpcdFx0dGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XG43NjczOlx0I2VuZGlmXG43Njc0Olx0XG43Njc1Olx0XHR0Y3BfY2xlYXJfb3B0aW9ucyhcdTAwMjZ0bXBfb3B0KTtcbjc2NzY6XHRcdHRtcF9vcHQubXNzX2NsYW1wID0gYWZfb3BzLVx1MDAzZW1zc19jbGFtcDtcbjc2Nzc6XHRcdHRtcF9vcHQudXNlcl9tc3MgID0gUkVBRF9PTkNFKHRwLVx1MDAzZXJ4X29wdC51c2VyX21zcyk7XG43Njc4Olx0XHR0Y3BfcGFyc2Vfb3B0aW9ucyhzb2NrX25ldChzayksIHNrYiwgXHUwMDI2dG1wX29wdCwgMCxcbjc2Nzk6XHRcdFx0XHQgIHdhbnRfY29va2llID8gTlVMTCA6IFx1MDAyNmZvYyk7XG43NjgwOlx0XG43NjgxOlx0XHRpZiAod2FudF9jb29raWUgXHUwMDI2XHUwMDI2ICF0bXBfb3B0LnNhd190c3RhbXApXG43NjgyOlx0XHRcdHRjcF9jbGVhcl9vcHRpb25zKFx1MDAyNnRtcF9vcHQpO1xuNzY4MzpcdFxuNzY4NDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1NNQykgXHUwMDI2XHUwMDI2IHdhbnRfY29va2llKVxuNzY4NTpcdFx0XHR0bXBfb3B0LnNtY19vayA9IDA7XG43Njg2Olx0XG43Njg3Olx0XHR0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDtcbjc2ODg6XHRcdHRjcF9vcGVucmVxX2luaXQocmVxLCBcdTAwMjZ0bXBfb3B0LCBza2IsIHNrKTtcbjc2ODk6XHRcdGluZXRfcnNrKHJlcSktXHUwMDNlbm9fc3JjY2hlY2sgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XG43NjkwOlx0XG43NjkxOlx0XHQvKiBOb3RlOiB0Y3BfdjZfaW5pdF9yZXEoKSBtaWdodCBvdmVycmlkZSBpcl9paWYgZm9yIGxpbmsgbG9jYWxzICovXG43NjkyOlx0XHRpbmV0X3JzayhyZXEpLVx1MDAzZWlyX2lpZiA9IGluZXRfcmVxdWVzdF9ib3VuZF9kZXZfaWYoc2ssIHNrYik7XG43NjkzOlx0XG43Njk0Olx0XHRpZiAod2FudF9jb29raWUpIHtcbjc2OTU6XHRcdFx0aXNuID0gY29va2llX2luaXRfc2VxdWVuY2UoYWZfb3BzLCBza2IsIFx1MDAyNnJlcS1cdTAwM2Vtc3MpO1xuNzY5NjpcdFx0XHQvKiBVc2UgdGhlIGNvb2tpZSBhcyB0eGhhc2ggc28gdGhlIFNZTi1BQ0sgYW5kIHRoZSBsYXRlciBmdWxsXG43Njk3Olx0XHRcdCAqIHNvY2tldCBtYWtlIHRoZSBzYW1lIGVncmVzcyBjaG9pY2UgKElQdjYgRUNNUCBwYXRoOyBJUHY0IFRYIHF1ZXVlKS5cbjc2OTg6XHRcdFx0ICovXG43Njk5Olx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2V0eGhhc2ggPSBpc247XG43NzAwOlx0XHR9XG43NzAxOlx0XG43NzAyOlx0XHRkc3QgPSBhZl9vcHMtXHUwMDNlcm91dGVfcmVxKHNrLCBza2IsIFx1MDAyNmZsLCByZXEsIHdhbnRfY29va2llID8gMCA6IGlzbik7XG43NzAzOlx0XHRpZiAoIWRzdClcbjc3MDQ6XHRcdFx0Z290byBkcm9wX2FuZF9mcmVlO1xuNzcwNTpcdFxuNzcwNjpcdFx0aWYgKHRtcF9vcHQudHN0YW1wX29rIHx8ICghd2FudF9jb29raWUgXHUwMDI2XHUwMDI2ICFpc24pKVxuNzcwNzpcdFx0XHRzdCA9IElORElSRUNUX0NBTExfSU5FVChhZl9vcHMtXHUwMDNlaW5pdF9zZXFfYW5kX3RzX29mZixcbjc3MDg6XHRcdFx0XHRcdFx0dGNwX3Y2X2luaXRfc2VxX2FuZF90c19vZmYsXG43NzA5Olx0XHRcdFx0XHRcdHRjcF92NF9pbml0X3NlcV9hbmRfdHNfb2ZmLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQgSSB3b3VsZCBiZSB0aGlua2luZywgZm9jdXNpbmcgb24gbGluZXMgNzc2NS03ODAwIG9mIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2A6CgoqKkRpdmluZyBpbnRvIHRoZSBUQ1AgSW5wdXQgSGFuZGxlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRob3NlIGxpbmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiBsaW5lcyA3NzY1LTc4MDAgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgVENQIGlucHV0IHByb2Nlc3NpbmcsIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBiZSBoYW5kbGluZyBhIGNyaXRpY2FsIGFzcGVjdCwgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgaW5jb21pbmcgVENQIHNlZ21lbnRzIGFyZSBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IGludGVncmF0ZWQgaW50byB0aGUgY29ubmVjdGlvbiYjMzk7cyBzdGF0ZS4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgbG9naWMgcmVsYXRlZCB0byByZWFzc2VtYmx5LCBhY2tub3dsZWRnZW1lbnQgaGFuZGxpbmcsIHdpbmRvdyBtYW5hZ2VtZW50LCBvciBwZXJoYXBzIGV2ZW4gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSB3aXRoaW4gdGhlIHJlY2VpdmluZyBUQ1Agc3RhY2suIFRoZSBjb2RlIGhlcmUgaXMgdGhlIGhlYXJ0IG9mIHJlbGlhYmxlIGRhdGEgdHJhbnNmZXIuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhpcyBjb2RlIGlzIGRvaW5nIGFueXRoaW5nIHVudXN1YWwsIG9yIG1heWJlIHNvbWV0aGluZyBJIGhhdmUgYmVlbiBxdWVzdGlvbmluZyBpbiBteSBvd24gaW1wbGVtZW50YXRpb24gZm9yIGEgd2hpbGUuIElzIHRoZXJlIGFueXRoaW5nIHBhcnRpY3VsYXJseSBpbmVmZmljaWVudCwgb3IgY2xldmVyPyBJdCYjMzk7cyBoaWdobHkgcHJvYmFibGUgdGhlIGNvZGUgbWFuYWdlcyBidWZmZXIgYWxsb2NhdGlvbnMgdG8gbWluaW1pemUgdW5uZWNlc3NhcnkgbWVtb3J5IGNvcGllcywgYW5kIG1hbmFnZXMgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZSBjaGFsbGVuZ2UgaXMgaW4gdGhlIGRldGFpbHMsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2FyZWZ1bGx5IGF0IGhvdyB0aGlzIGNvZGUgc25pcHBldCB0YWNrbGVzIFRDUCYjMzk7cyBpbmhlcmVudCBjb21wbGV4aXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9pbnB1dC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3NzY1Olx0XHRcdGZhc3RvcGVuX3NrID0gdGNwX3RyeV9mYXN0b3Blbihzaywgc2tiLCByZXEsIFx1MDAyNmZvYywgZHN0KTtcbjc3NjY6XHRcdH1cbjc3Njc6XHRcdGlmIChmYXN0b3Blbl9zaykge1xuNzc2ODpcdFx0XHRhZl9vcHMtXHUwMDNlc2VuZF9zeW5hY2soZmFzdG9wZW5fc2ssIGRzdCwgXHUwMDI2ZmwsIHJlcSxcbjc3Njk6XHRcdFx0XHRcdCAgICBcdTAwMjZmb2MsIFRDUF9TWU5BQ0tfRkFTVE9QRU4sIHNrYik7XG43NzcwOlx0XHRcdC8qIEFkZCB0aGUgY2hpbGQgc29ja2V0IGRpcmVjdGx5IGludG8gdGhlIGFjY2VwdCBxdWV1ZSAqL1xuNzc3MTpcdFx0XHRpZiAoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBmYXN0b3Blbl9zaykpIHtcbjc3NzI6XHRcdFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG43NzczOlx0XHRcdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xuNzc3NDpcdFx0XHRcdGdvdG8gZHJvcF9hbmRfZnJlZTtcbjc3NzU6XHRcdFx0fVxuNzc3NjpcdFx0XHRSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xuNzc3NzpcdFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG43Nzc4Olx0XHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbjc3Nzk6XHRcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbjc3ODA6XHRcdFx0cmVxc2tfZnJlZShyZXEpO1xuNzc4MTpcdFx0XHRkc3RfcmVsZWFzZShkc3QpO1xuNzc4MjpcdFx0XHRyZXR1cm4gMDtcbjc3ODM6XHRcdH0gZWxzZSB7XG43Nzg0Olx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIgPSBmYWxzZTtcbjc3ODU6XHRcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjZcbjc3ODY6XHRcdFx0ICAgIHVubGlrZWx5KCFpbmV0X2Nza19yZXFza19xdWV1ZV9oYXNoX2FkZChzaywgcmVxKSkpIHtcbjc3ODc6XHRcdFx0XHRyZXFza19mcmVlKHJlcSk7XG43Nzg4Olx0XHRcdFx0ZHN0X3JlbGVhc2UoZHN0KTtcbjc3ODk6XHRcdFx0XHRyZXR1cm4gMDtcbjc3OTA6XHRcdFx0fVxuNzc5MTpcdFx0XHRhZl9vcHMtXHUwMDNlc2VuZF9zeW5hY2soc2ssIGRzdCwgXHUwMDI2ZmwsIHJlcSwgXHUwMDI2Zm9jLFxuNzc5MjpcdFx0XHRcdFx0ICAgICF3YW50X2Nvb2tpZSA/IFRDUF9TWU5BQ0tfTk9STUFMIDpcbjc3OTM6XHRcdFx0XHRcdFx0XHQgICBUQ1BfU1lOQUNLX0NPT0tJRSxcbjc3OTQ6XHRcdFx0XHRcdCAgICBza2IpO1xuNzc5NTpcdFx0XHRpZiAod2FudF9jb29raWUpIHtcbjc3OTY6XHRcdFx0XHRyZXFza19mcmVlKHJlcSk7XG43Nzk3Olx0XHRcdFx0cmV0dXJuIDA7XG43Nzk4Olx0XHRcdH1cbjc3OTk6XHRcdH1cbjc4MDA6XHRcdHJlcXNrX3B1dChyZXEpO1xuNzgwMTpcdFx0cmV0dXJuIDA7XG43ODAyOlx0XG43ODAzOlx0ZHJvcF9hbmRfcmVsZWFzZTpcbjc4MDQ6XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzczCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVENQIENvbm5lY3Rpb24gUmVxdWVzdCBGbG93KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBjb2RlLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIGFsd2F5cywgJiMzNDtXaGF0IGV4YWN0bHkgaXMgdGhpcyBwYXRjaCB0cnlpbmcgdG8gYWNjb21wbGlzaD8mIzM0OyBJJiMzOTttIHNlZWluZyBhIHJlZmVyZW5jZSB0byBgdGNwX2Nvbm5fcmVxdWVzdCgpYCBhbmQgc29tZSBpbml0aWFsaXphdGlvbiBvZiBgdGNwX3JzayhyZXEpLSZndDtkcm9wX3JlcSA9IGZhbHNlO2AuIFRoYXQgbWFrZXMgbWUgdGhpbmsgdGhpcyB2YXJpYWJsZSwgYGRyb3BfcmVxYCwgaXMgY3J1Y2lhbCB0byBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLiBJIGFsc28gc2VlIHRoYXQgdGhlcmUmIzM5O3MgYSBjaGVjaywgYW4gYGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7IC4uLiB9YCwgbWVhbmluZyB0aGUgY29kZSBpcyBlaXRoZXIgYWNjZXB0aW5nIG9yIGRyb3BwaW5nIGEgcmVxdWVzdCBiYXNlZCBvbiB0aGF0IGZsYWcuIFNlZW1zIHByZXR0eSBmdW5kYW1lbnRhbC4KClRoZW4gSSBtb3ZlZCBvbnRvIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYC4gSGVyZSwgdGhlIGBkcm9wX3JlcWAgY2hlY2sgcmVhcHBlYXJzOiBgaWYgKG93bl9yZXEgJmFtcDsmYW1wOyByc2tfZHJvcF9yZXEocmVxKSkgeyAuLi4gfWAuIEl0JiMzOTtzIHVzZWQgdG8gYmFpbCBvdXQgb2YgY3JlYXRpbmcgYSBjaGlsZCBzb2NrZXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGUgYG93bl9yZXFgIGNvbmRpdGlvbiBsaWtlbHkgaXMgcmVsYXRlZCB0byBGYXN0IE9wZW4gb3IgYSBzaW1pbGFyIE1QVENQIGNvbnRleHQsIGFuZCBzdWdnZXN0cyB0aGF0IGBkcm9wX3JlcWAgaXMgdGhlIGZpbmFsIGRldGVybWluYW50IGZvciB3aGV0aGVyIGEgY2hpbGQgc29ja2V0IGlzIGFsbG9jYXRlZC4KClRoaXMgaXMgYSBnb29kIHBvaW50IHRvIHBhdXNlIGFuZCBpbnZlc3RpZ2F0ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN0YXRlcyBzdXJyb3VuZGluZyBgZHJvcF9yZXFgLiBSaWdodCBub3csIEkgc2VlIGl0JiMzOTtzIGluaXRpYWxpemVkIHRvIGZhbHNlLiBUaGUgY29uZGl0aW9uYWwgY2hlY2tzIEkgc2VlLCBzdWdnZXN0IGl0IGdldHMgc2V0IHRvIHRydWUsIGF0IHNvbWUgcG9pbnQsIGFuZCB0aGVuIHRoZSByZXF1ZXN0IGlzIGRyb3BwZWQuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBzZWFyY2ggZm9yIGl0cyB1c2FnZSwgaW4gdGhlIGNvZGUgYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgcnNrX2Ryb3BfcmVxKClgIGdldHMgc2V0IGFuZCB3aHkuIEdpdmVuIHRoZSBNUFRDUCBjb25uZWN0aW9uIGNvbnRleHQsIEkgd2lsbCBncmVwIHRoZSBtcHRjcCBkaXJlY3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3N1YmZsb3cuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODU1Olx0XG4gODU2Olx0Y3JlYXRlX2NoaWxkOlxuIDg1NzpcdFx0Y2hpbGQgPSBsaXN0ZW5lci1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxuIDg1ODpcdFx0XHRcdFx0XHRcdCAgICAgcmVxX3VuaGFzaCwgb3duX3JlcSwgb3B0X2NoaWxkX2luaXQpO1xuIDg1OTpcdFxuIDg2MDpcdFx0aWYgKGNoaWxkIFx1MDAyNlx1MDAyNiAqb3duX3JlcSkge1xuIDg2MTpcdFx0XHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChjaGlsZCk7XG4gODYyOlx0XG4gODYzOlx0XHRcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xuIDg2NDpcdFxuIDg2NTpcdFx0XHQvKiB3ZSBuZWVkIHRvIGZhbGxiYWNrIG9uIGN0eCBhbGxvY2F0aW9uIGZhaWx1cmUgYW5kIG9uIHByZS1yZXFzXG4gODY2Olx0XHRcdCAqIGNoZWNraW5nIGFib3ZlLiBJbiB0aGUgbGF0dGVyIHNjZW5hcmlvIHdlIGFkZGl0aW9uYWxseSBuZWVkXG4gODY3Olx0XHRcdCAqIHRvIHJlc2V0IHRoZSBjb250ZXh0IHRvIG5vbiBNUFRDUCBzdGF0dXMuXG4gODY4Olx0XHRcdCAqL1xuIDg2OTpcdFx0XHRpZiAoIWN0eCB8fCBmYWxsYmFjaykge1xuIDg3MDpcdFx0XHRcdGlmIChmYWxsYmFja19pc19mYXRhbCkge1xuIDg3MTpcdFx0XHRcdFx0aWYgKCFjdHgpXG4gODcyOlx0XHRcdFx0XHRcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXG4gODczOlx0XHRcdFx0XHRcdFx0XHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpO1xuIDg3NDpcdFx0XHRcdFx0ZWxzZVxuIDg3NTpcdFx0XHRcdFx0XHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxuIDg3NjpcdFx0XHRcdFx0XHRcdFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTtcbiA4Nzc6XHRcdFx0XHRcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApO1xuIDg3ODpcdFx0XHRcdFx0Z290byBkaXNwb3NlX2NoaWxkO1xuIDg3OTpcdFx0XHRcdH1cbiA4ODA6XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDg4MTpcdFx0XHR9XG4gODgyOlx0XG4gODgzOlx0XHRcdC8qIHNzayBpbmhlcml0cyBvcHRpb25zIG9mIGxpc3RlbmVyIHNrICovXG4gODg0Olx0XHRcdGN0eC1cdTAwM2VzZXRzb2Nrb3B0X3NlcSA9IGxpc3RlbmVyLVx1MDAzZXNldHNvY2tvcHRfc2VxO1xuIDg4NTpcdFxuIDg4NjpcdFx0XHRpZiAoY3R4LVx1MDAzZW1wX2NhcGFibGUpIHtcbiA4ODc6XHRcdFx0XHRjdHgtXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXHUwMDNlY29ubiwgXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcbiA4ODg6XHRcdFx0XHRpZiAoIWN0eC1cdTAwM2Vjb25uKVxuIDg4OTpcdFx0XHRcdFx0Z290byBmYWxsYmFjaztcbiA4OTA6XHRcbiA4OTE6XHRcdFx0XHRjdHgtXHUwMDNlc3ViZmxvd19pZCA9IDE7XG4gODkyOlx0XHRcdFx0b3duZXIgPSBtcHRjcF9zayhjdHgtXHUwMDNlY29ubik7XG4gODkzOlx0XG4gODk0Olx0XHRcdFx0aWYgKG1wX29wdC5kZW55X2pvaW5faWQwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU5MwoJCQkJCQkJb3V0cHV0OiAyNjMKCQkJCQkJCXRob3VnaHRzOiA5MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gUmVhc29uaW5nOiBEZXRlcm1pbmluZyB0aGUgTmVlZCBmb3IgYSBGdXp6aW5nIFNlc3Npb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWFpbiBjb25jZXJuIGhlcmUgaXMgbWFraW5nIHN1cmUgd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBob3cgTVBUQ1AgaGFuZGxlcyBGYXN0IE9wZW4gYW5kIGNvbm5lY3Rpb24gcmVxdWVzdHMsIHNwZWNpZmljYWxseSB3aGVuIGEgc3ViZmxvdyBmYWlscyBkdXJpbmcgdGhlIGpvaW4gcHJvY2Vzcy4gIEl0IGFwcGVhcnMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBjb3JyZWN0bHkgaGFuZGxpbmcgdGhlIGBkcm9wX3JlcWAgZmxhZyB3aXRoaW4gYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGxvZ2ljLiBXaGVuIGB0Y3BfdHJ5X2Zhc3RvcGVuYCBjYWxscyBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAsIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgIG1pZ2h0IGJlIGNhbGxlZC4gSWYgYW4gTVBUQ1Agam9pbiBmYWlscywgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2Agc2V0cyBgdGNwX3JzayhyZXEpLSZndDtkcm9wX3JlcSA9IHRydWVgLiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBzaXR1YXRpb25zIHdoZXJlIHRoaXMgYGRyb3BfcmVxYCB3YXNuJiMzOTt0IHByb3Blcmx5IGNoZWNrZWQgYmVmb3JlLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGRhbmdsaW5nIHNvY2tldHMgb3IgbWVtb3J5IGxlYWtzLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBvbiB0aGUgbWVtb3J5IHNhZmV0eTogRmlyc3QsIGBkcm9wX3JlcWAgaXMgYSBib29sZWFuIHdpdGhpbiBgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tgLiBJdCYjMzk7cyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHRjcF9jb25uX3JlcXVlc3RgIHdoZW4gdGhlIHJlcXVlc3Qgc29jayAoYHJlcWApIGlzIGFsbG9jYXRlZC4gSSBjb25maXJtZWQgdGhpcy4gVGhlIGBpbmV0X3JlcXNrX2FsbG9jYCB1c2VzIGVpdGhlciBga21lbV9jYWNoZV9hbGxvY2Agb3IgYHJlcXNrX2FsbG9jYCB3aGljaCBhbGxvY2F0ZXMgYSBgcmVxdWVzdF9zb2NrYC4gSSBhbHNvIHZlcmlmaWVkIHZpYSB0aGUgYG1wdGNwLmhgIGNvZGUgdGhhdCBldmVuIHdpdGggYENPTkZJR19NUFRDUGAgZW5hYmxlZCwgaXQmIzM5O3Mgc2V0IHRvIGBmYWxzZWAsIGFuZCBkaXNhYmxlZCwgaXQgcmV0dXJucyBmYWxzZS4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIHBhdGNoIHRvdWNoZXMgYW55IHVzZXItc3BhY2UgY29waWVzLiBOb3BlLCBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgc29ja29wdHMsIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4gIFRoaXMgZWxpbWluYXRlcyB0aGUgaW1tZWRpYXRlIHJpc2sgb2YgbGVha2luZyBrZXJuZWwtc3BhY2UgZGF0YS4KCkRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGFuc3dlciBpcyBuby4gVGhlIGluaXRpYWxpemF0aW9uIG9mIGBkcm9wX3JlcWAgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBwcmV2ZW50IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4KClNvLCB3aGF0IGRvZXMgdGhlIHBhdGNoICpkbyo/IEl0IGVuc3VyZXMgY29ycmVjdCBjbGVhbnVwLiBTcGVjaWZpY2FsbHksIGl0IGhhbmRsZXMgdGhlIGRyb3BwaW5nIG9mIGByZXF1ZXN0X3NvY2tgIGFuZCBjaGlsZCBzb2NrZXRzIGluIE1QVENQIEZhc3RPcGVuIC8gY29ubmVjdGlvbiByZXF1ZXN0cyB3aGVuIHRoZSBgcnNrX2Ryb3BfcmVxYCBmbGFnIGlzIHRydWUsIGVuc3VyaW5nIHByb3BlciBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGF2b2lkaW5nIGxlYWtzLiBUaGVzZSBraW5kcyBvZiBidWdzIHdvdWxkIHR5cGljYWxseSBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBkb3VibGUtZnJlZSwgaXNzdWVzIGFscmVhZHkgZmxhZ2dlZCBieSBLQVNBTi9TTFVCIGRlYnVnL3JlZmNvdW50L3N0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMsIHdoaWNoIGFyZSBub3QgS01TQU4mIzM5O3Mgc3BlY2lhbHR5LgoKTm93IHRoZSBrZXkgZGlzdGluY3Rpb24gaXM6IEtBU0FOIGhlbHBzIGNhdGNoIG1lbW9yeSBzYWZldHkgaXNzdWVzIChvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGV0Yy4pIHdoaWxlIEtNU0FOIGhhbmRsZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgKGhlYXAsIHN0YWNrLCBwYWdlKSBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLiBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZm9jdXNlcyBvbiBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgaXQgbGVhbnMgbW9yZSB0b3dhcmRzIG1lbW9yeSBzYWZldHksIHdoaWNoIEtBU0FOIGNhbiBoYW5kbGUuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBkb2VzbiYjMzk7dCB0b3VjaCB1c2VyLXNwYWNlIGNvcGllcy4gS0FTQU4vcmVmY291bnQgdHJhY2tpbmcgY292ZXJzIHRoZSBwb3RlbnRpYWwgcmlza3Mgb2YgdXNlLWFmdGVyLWZyZWUgb3IgbGVha3MgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHBhdGhzIGZvciBNUFRDUCBhbmQgVENQIEZhc3QgT3Blbi4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGFuZCBjaGVja3MgYHJza19kcm9wX3JlcShyZXEpYCBpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCgpYCBhbmQgYHRjcF9jb25uX3JlcXVlc3QoKWAgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBzb2NrIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyB3aGVuIGEgcmVxdWVzdCBpcyBkcm9wcGVkLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczogVGhlIGZpZWxkIGBkcm9wX3JlcWAgaW4gYHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHRjcF9jb25uX3JlcXVlc3QoKWAgd2hlbiB0aGUgcmVxdWVzdF9zb2NrIGlzIGNyZWF0ZWQsIGVuc3VyaW5nIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4yLiBJbmZvLWxlYWsgLyBVc2VyLXNwYWNlIGNvcHkgQW5hbHlzaXM6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgb3B0aW9uIGJ1ZmZlcnMgbW9kaWZpZWQuXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHBhdGhzIGZvciBNUFRDUCBhbmQgVENQIEZhc3QgT3Blbi4gU3BlY2lmaWNhbGx5LCBpdCBpbml0aWFsaXplcyBgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGFuZCBjaGVja3MgYHJza19kcm9wX3JlcShyZXEpYCBpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCgpYCBhbmQgYHRjcF9jb25uX3JlcXVlc3QoKWAgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBzb2NrIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyB3aGVuIGEgcmVxdWVzdCBpcyBkcm9wcGVkLlxuXG4xLiBVbmluaXRpYWxpemVkIE1lbW9yeSBBbmFseXNpczogVGhlIGZpZWxkIGBkcm9wX3JlcWAgaW4gYHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgaW4gYHRjcF9jb25uX3JlcXVlc3QoKWAgd2hlbiB0aGUgcmVxdWVzdF9zb2NrIGlzIGNyZWF0ZWQsIGVuc3VyaW5nIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4yLiBJbmZvLWxlYWsgLyBVc2VyLXNwYWNlIGNvcHkgQW5hbHlzaXM6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgb3B0aW9uIGJ1ZmZlcnMgbW9kaWZpZWQuXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTY6NTcuMDcyOTQ1NDM1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxNDM1NjU3NjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2Nvbm5fcmVxdWVzdFwiLFxuICAgIFwidGNwX3RyeV9mYXN0b3BlblwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgYW5kIGNsZWFudXAgcGF0aHMgZm9yIE1QVENQIGFuZCBUQ1AgRmFzdCBPcGVuLiBTcGVjaWZpY2FsbHksIGl0IGluaXRpYWxpemVzIGB0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGFuZCBjaGVja3MgYHJza19kcm9wX3JlcShyZXEpYCBpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZCgpYCBhbmQgYHRjcF9jb25uX3JlcXVlc3QoKWAgdG8gcmVsZWFzZSB0aGUgcmVxdWVzdCBzb2NrIGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcyB3aGVuIGEgcmVxdWVzdCBpcyBkcm9wcGVkLlxcblxcbjEuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEFuYWx5c2lzOiBUaGUgZmllbGQgYGRyb3BfcmVxYCBpbiBgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBpbiBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB3aGVuIHRoZSByZXF1ZXN0X3NvY2sgaXMgY3JlYXRlZCwgZW5zdXJpbmcgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG4yLiBJbmZvLWxlYWsgLyBVc2VyLXNwYWNlIGNvcHkgQW5hbHlzaXM6IE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBhcmUgYW55IG5ldGxpbmssIGlvY3RsLCBvciBzb2NrZXQgb3B0aW9uIGJ1ZmZlcnMgbW9kaWZpZWQuXFxuMy4gS0FTQU4gdnMgS01TQU4gQXBwbGljYWJpbGl0eTogVGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhdGNoIGludm9sdmUgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZywgc3RhdGUgbWFuYWdlbWVudCwgYW5kIG1lbW9yeSBmcmVlaW5nIChwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgbWVtb3J5IGxlYWtzKSwgd2hpY2ggYXJlIHRob3JvdWdobHkgbW9uaXRvcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBrZXJuZWwgcmVmZXJlbmNlIGNvdW50ZXJzLiBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AvTVBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIGFuZCBUQ1AgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIGluIG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSByZWplY3RlZCBvciBkcm9wcGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBleGVjdXRlZCBkdXJpbmcgVENQIGhhbmRzaGFrZSBhbmQgRmFzdCBPcGVuIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTY6NTcuMDcyOTU1MTk1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDI0MTU5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwMmI4YTE1ZWU4YjJlNDk0ZDdmMmY4NDZhNWY4ZTg1N2Q0Mzk2NzBjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTY6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMgYi9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1xcbmluZGV4IDQ3MWM3OGJlNTUxMzcuLjIyNDk0ZmY3NDZjNzEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1xcbkBAIC0zMzcsNiArMzM3LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcdGlmICghY2hpbGQpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4rXFx0aWYgKG93bl9yZXEgXFx1MDAyNlxcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG4rXFx0XFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xcbitcXHRcXHRzb2NrX3B1dChjaGlsZCk7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRzcGluX2xvY2soXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuIFxcdHF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEucWxlbisrO1xcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2cXVldWUtXFx1MDAzZWZhc3RvcGVucS5sb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbmluZGV4IDBmNjBhMWRiZjkyNzQuLmViMGU0MjU5YzI4MDcgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbkBAIC03NjY5LDYgKzc2NjksNyBAQCBpbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG4gXFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0eGhhc2ggPSBuZXRfdHhfcm5kaGFzaCgpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuIFxcdHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgPSAwO1xcbitcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XFxuICNlbmRpZlxcbiBcXG4gXFx0dGNwX2NsZWFyX29wdGlvbnMoXFx1MDAyNnRtcF9vcHQpO1xcbkBAIC03Nzc1LDYgKzc3NzYsMTAgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXFxuIFxcdFxcdFJFQURfT05DRShzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xcbiBcXHRcXHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XFxuIFxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG4rXFx0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbitcXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuK1xcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXRmb19saXN0ZW5lciA9IGZhbHNlO1xcbiBcXHRcXHRpZiAoIXdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE2OjU3Ljc3NjIxNzgxMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU2NTExODM1OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2Nvbm5fcmVxdWVzdFwiLFxuICAgIFwidGNwX3RyeV9mYXN0b3BlblwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVENQL01QVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBoYW5kbGluZyBpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyBhbmQgVENQIEZhc3QgT3BlbiBjaGlsZCBjcmVhdGlvbiBpbiBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgd2hlbiBNUFRDUCBzdWJmbG93cyBhcmUgcmVqZWN0ZWQgb3IgZHJvcHBlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIFRDUCBoYW5kc2hha2UgYW5kIEZhc3QgT3BlbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDJiOGExNWVlOGIyZTQ5NGQ3ZjJmODQ2YTVmOGU4NTdkNDM5NjcwY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTY6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jXG5pbmRleCA0NzFjNzhiZTU1MTM3Li4yMjQ5NGZmNzQ2YzcxIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbisrKyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jXG5AQCAtMzM3LDYgKzMzNywxMiBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxuIFx0aWYgKCFjaGlsZClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4rXHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbitcdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuK1x0XHRzb2NrX3B1dChjaGlsZCk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuK1xuIFx0c3Bpbl9sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbiBcdHF1ZXVlLVx1MDAzZWZhc3RvcGVucS5xbGVuKys7XG4gXHRzcGluX3VubG9jayhcdTAwMjZxdWV1ZS1cdTAwM2VmYXN0b3BlbnEubG9jayk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggMGY2MGExZGJmOTI3NC4uZWIwZTQyNTljMjgwNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTc2NjksNiArNzY2OSw3IEBAIGludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuIFx0dGNwX3JzayhyZXEpLVx1MDAzZXR4aGFzaCA9IG5ldF90eF9ybmRoYXNoKCk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxuIFx0dGNwX3JzayhyZXEpLVx1MDAzZWlzX21wdGNwID0gMDtcbitcdHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xuICNlbmRpZlxuIFxuIFx0dGNwX2NsZWFyX29wdGlvbnMoXHUwMDI2dG1wX29wdCk7XG5AQCAtNzc3NSw2ICs3Nzc2LDEwIEBAIGludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxuIFx0XHRSRUFEX09OQ0Uoc2stXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xuIFx0XHRiaF91bmxvY2tfc29jayhmYXN0b3Blbl9zayk7XG4gXHRcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcbitcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcbitcdFx0cmVxc2tfZnJlZShyZXEpO1xuK1x0XHRkc3RfcmVsZWFzZShkc3QpO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG4gXHRcdHRjcF9yc2socmVxKS1cdTAwM2V0Zm9fbGlzdGVuZXIgPSBmYWxzZTtcbiBcdFx0aWYgKCF3YW50X2Nvb2tpZSBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE2OjU3Ljc3NjIxOTkzMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTUxMDE2MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBQYXRjaCBUcmlhZ2U6IFN5emthbGxlciBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkndmUgZ290IGEgTGludXgga2VybmVsIHBhdGNoIHNlcmllcyBpbiBmcm9udCBvZiBtZSwgYW5kIHRoZSBnb2FsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBzb21ldGhpbmcgc3l6a2FsbGVyIHNob3VsZCBiZSBmdXp6aW5nLiBJdCdzIGEgUUEgdGFzaywgY29tcGxldGVseSBkZWZlbnNpdmUsIG5vIG1hbGljaW91cyBjb2RlLCBqdXN0IHRyeWluZyB0byBpbXByb3ZlIGtlcm5lbCByb2J1c3RuZXNzLiBTcGVjaWZpY2FsbHksIHdlJ3JlIGxvb2tpbmcgYXQgY2hhbmdlcyBpbiB0aGUgVENQIHN1YnN5c3RlbSwgZm9jdXNpbmcgb24gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhbmQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gTXkgam9iIGlzIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgd2UgbmVlZCB0byB0YXJnZXQuXG5cblRoZSBnb29kIG5ld3MgaXMsIEkndmUgZ290IHNvbWUgdG9vbHMgYXQgbXkgZGlzcG9zYWwuIEkgY2FuIHVzZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYCB0byBkaXNzZWN0IHRoZSBjb2RlLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBzZWVtcyB0aGVyZSBhcmUgY2hhbmdlcyByZWxhdGVkIHRvIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBpbiBgdGNwX2Zhc3RvcGVuLmNgLiBOb3RhYmx5OlxuXG5gYGBjXG4rXHRpZiAob3duX3JlcSBcdTAwMjZcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcbitcdFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xuK1x0XHRzb2NrX3B1dChjaGlsZCk7XG4rXHRcdHJldHVybiBOVUxMO1xuK1x0fVxuYGBgXG5cbmFuZCBhbHNvIGNoYW5nZXMgdG8gYHRjcF9jb25uX3JlcXVlc3RgIGluIGB0Y3BfaW5wdXQuY2A6XG5cbmBgYGNcbiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcbiBcdHRjcF9yc2socmVxKS1cdTAwM2Vpc19tcHRjcCA9IDA7XG4rXHR0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcbiAjZW5kaWZcbi4uLlxuK1x0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xuK1x0XHRyZXFza19mcmVlKHJlcSk7XG4rXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4rXHRcdHJldHVybiAwO1xuYGBgXG5cbkl0IHNlZW1zIGxpa2UgdGhlIGNvZGUgaXMgdXNpbmcgYSBuZXcgZnVuY3Rpb24sIGByc2tfZHJvcF9yZXEoKWAsIGFzIHdlbGwgYXMgYSBmbGFnLCBgZHJvcF9yZXFgLiBOb3csIGxldCdzIHN0YXJ0IGRpZ2dpbmcuIEknbGwgZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3Igb2NjdXJyZW5jZXMgb2YgYm90aCBgcnNrX2Ryb3BfcmVxYCBhbmQgYGRyb3BfcmVxYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwncyBIRUFEIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNoYW5nZXMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYW5kIGxldCBtZSBkZXRlcm1pbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIGZ1enppbmcgdGFyZ2V0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2OSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE3OjI0LjkyNzIzODg3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ3MjA4NDc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJza19kcm9wX3JlcVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9tcHRjcC5oPTEzNz1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTQxLVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MTQyOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMTQzLXtcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmg9MjQ1PXN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNDktXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoyNTA6c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0yNTEte1xcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jPTE5Nz1zdHJ1Y3Qgc29jayAqdGNwX2dldF9jb29raWVfc29jayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjEwLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYzoyMTE6XFx0XFx0aWYgKHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMi1cXHRcXHRcXHRyZXFza19wdXQocmVxKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTMyNj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzM5LVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjM0MDpcXHRpZiAob3duX3JlcSBcXHUwMDI2XFx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM0MS1cXHRcXHRiaF91bmxvY2tfc29jayhjaGlsZCk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc3OC1cXHRcXHRzb2NrX3B1dChmYXN0b3Blbl9zayk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6Nzc3OTpcXHR9IGVsc2UgaWYgKHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzc4MC1cXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM9Njg3PXN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy05NDItXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjk0MzpcXHRpZiAob3duX3JlcSBcXHUwMDI2XFx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy05NDQtXFx0XFx0cmVxc2tfcXVldWVfcmVtb3ZlZChcXHUwMDI2aW5ldF9jc2socmVxLVxcdTAwM2Vyc2tfbGlzdGVuZXIpLVxcdTAwM2VpY3NrX2FjY2VwdF9xdWV1ZSwgcmVxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6MjcuOTc0NDU3NjUzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ4MjIxNjMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZmlsZXMuXG5cbioqRGVlcCBEaXZlIEluY29taW5nOiBNUFRDUCwgRmFzdCBPcGVuLCBhbmQgVENQIElucHV0KipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIFRvIHJlYWxseSBncmFzcCB3aGF0J3MgZ29pbmcgb24gYXJvdW5kICp0aGVzZSogbGluZXMsIEkgbmVlZCBhIGdvb2QgZm91bmRhdGlvbi4gTGV0J3Mgc3RhcnQgYnkgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUga2V5IHBsYXllcnMuIEZpcnN0LCBgaW5jbHVkZS9uZXQvbXB0Y3AuaGAgLSBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBmdW5kYW1lbnRhbCBNUFRDUCBzdHJ1Y3R1cmVzLCB0aGUgY29yZSBkYXRhIG1vZGVscywgYW5kIHRoZSBrZXkgZGVmaW5pdGlvbnMgdGhhdCBnb3Zlcm4gTXVsdGlwYXRoIFRDUCBvcGVyYXRpb24gaW4gZ2VuZXJhbC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgKnN1cHBvc2VkKiB0byBiZWhhdmUsIHRoZSBiYXNpYyBpbnRlcmZhY2VzLCBhbmQgd2hlcmUgdGhlIGNvcmUgTVBUQ1AgY29uY2VwdHMgYXJlIGRlZmluZWQuIFRoZW4gSSdsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uLlxuXG5OZXh0IHVwLCBJJ2xsIGhpdCBgbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNgLiBUaGlzIGlzIGNydWNpYWwuIEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZiB0aGUgRmFzdCBPcGVuIG1lY2hhbmlzbSB3aXRoaW4gdGhlIHN0YW5kYXJkIFRDUC9JUCBwcm90b2NvbC4gSSdsbCBmb2N1cyBvbiBob3cgaXQgaG9va3MgaW50byB0aGUgZXN0YWJsaXNoZWQgVENQIGNvbm5lY3Rpb24sIGFuZCB3aGF0IG9wdGltaXphdGlvbnMgYXJlIG1hZGUuIEhvdyB0aGUgZmFzdCBvcGVuIGNvb2tpZSBpcyBnZW5lcmF0ZWQsIGhvdyBpdCdzIGhhbmRsZWQsIGFuZCB3aGVyZSB0aGlzIGludGVycGxheXMgd2l0aCB0aGUgb3RoZXIgbW9kdWxlcyBhcmUgcGFydGljdWxhcmx5IGltcG9ydGFudC4gV2hhdCdzIHRoZSBwcm90b2NvbCB3aXRoIHRoZSBjb29raWU/IEhvdyBkb2VzIE1QVENQIGNoYW5nZSB0aGUgZmFzdCBvcGVuIGNvbm5lY3Rpb24gcHJvdG9jb2wgaWYgYXQgYWxsP1xuXG5GaW5hbGx5LCBgbmV0L2lwdjQvdGNwX2lucHV0LmNgIGlzIGdvaW5nIHRvIGJlIHdoZXJlIGEgbG90IG9mIHRoZSBtYWdpYywgb3IgcG90ZW50aWFsIHByb2JsZW1zLCBsaWVzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIHBhdGggb2YgaW5jb21pbmcgVENQIHNlZ21lbnRzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGV5J3JlIGhhbmRsZWQgYmFzZWQgb24gdGhlIGNvbm5lY3Rpb24gc3RhdGUgYW5kIEZhc3QgT3BlbiBjb29raWUgKGlmIHByZXNlbnQpLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyBNUFRDUCBzZWdtZW50cyBhcmUgaGFuZGxlZCwgYW5kIGhvdyB0aGVzZSBmYXN0IG9wZW4gY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIGFuZCBtYWludGFpbmVkLiBJJ20gbG9va2luZyBmb3IgdGhlIG5pdHR5LWdyaXR0eSBkZXRhaWxzIG9mIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gcmVjb25jaWxlcyB0aGUgc3RhbmRhcmQgVENQIGhhbmRsaW5nIHdpdGggYW55IE1QVENQIGFkZGl0aW9ucyBhbmQgRmFzdCBPcGVuIG9wdGltaXphdGlvbnMuIFRoZSBzeW5jaHJvbml6YXRpb24gaXMga2V5IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MzcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzozMS40NTY2ODQ2MjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbXB0Y3AuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzU6XFx0fVxcbiAxMzY6XFx0XFxuIDEzNzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gMTM4OlxcdHtcXG4gMTM5OlxcdFxcdHJldHVybiB0Y3BfcnNrKHJlcSktXFx1MDAzZWlzX21wdGNwO1xcbiAxNDA6XFx0fVxcbiAxNDE6XFx0XFxuIDE0MjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gMTQzOlxcdHtcXG4gMTQ0OlxcdFxcdHJldHVybiB0Y3BfcnNrKHJlcSktXFx1MDAzZWlzX21wdGNwIFxcdTAwMjZcXHUwMDI2IHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXE7XFxuIDE0NTpcXHR9XFxuIDE0NjpcXHRcXG4gMTQ3OlxcdHZvaWQgbXB0Y3Bfc3BhY2UoY29uc3Qgc3RydWN0IHNvY2sgKnNzaywgaW50ICpzcGFjZSwgaW50ICpmdWxsX3NwYWNlKTtcXG4gMTQ4OlxcdGJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxNDk6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCAqc2l6ZSwgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcXG4gMTUwOlxcdGJvb2wgbXB0Y3Bfc3luYWNrX29wdGlvbnMoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCB1bnNpZ25lZCBpbnQgKnNpemUsXFxuIDE1MTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XFxuIDE1MjpcXHRpbnQgbXB0Y3BfZXN0YWJsaXNoZWRfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIDE1MzpcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgcmVtYWluaW5nLCBib29sIGhhc190cyxcXG4gMTU0OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XFxuIDE1NTpcXHRib29sIG1wdGNwX2luY29taW5nX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0dm9pZCBtcHRjcF93cml0ZV9vcHRpb25zKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4gMTU4OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xcbiAxNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE3OjMxLjQ1Njg1ODU0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMDE0NTg0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBsaW5lIG9mIHRoaW5raW5nLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIFRDUCBGYXN0IE9wZW4gSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gcmV2aXNpdGluZyBUQ1AgRmFzdCBPcGVuLCBhbmQgSSB3YW50IHRvIGRpdmUgaW50byB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHNlY3Rpb24gaW4gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhcm91bmQgbGluZXMgMzIwIHRvIDM3MC4gVGhpcyBhcmVhIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBwb3NzaWJseSB0aGUgaGFuZGxpbmcgb2YgdGhlIEZhc3QgT3BlbiBjb29raWUgYW5kIHRoZSBpbml0aWFsIGRhdGEgZXhjaGFuZ2UuIEknbGwgYmUgbG9va2luZyBmb3IgZGV0YWlscyByZWdhcmRpbmcgY29va2llIGdlbmVyYXRpb24sIHZhbGlkYXRpb24sIGFuZCBob3cgaXQgbWVzaGVzIHdpdGggdGhlIFNZTiBhbmQgU1lOLUFDSyBwcm9jZXNzIGZsb3cuIEl0J3MgbGlrZWx5IGhlcmUgdGhhdCBJJ2xsIGZpbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyB0aGUgRmFzdCBPcGVuIHN0YXRlLCBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucywgYW5kIGFueSBzZWN1cml0eSBjaGVja3MgaW4gcGxhY2UgZm9yIHRoaXMgb3B0aW1pemF0aW9uLiBJJ20gaG9waW5nIEkgY2FuIHRyYWNlIHRoZSBjb29raWUncyBsaWZlY3ljbGUgYW5kIHJlbGF0ZSB0aGUgY29kZSBiYWNrIHRvIHRoZSBUQ1Agc3RhdGUgbWFjaGluZSBhbmQgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIFRoaXMgc2VjdGlvbiBzaG91bGQgb2ZmZXIgaW5zaWdodHMgaW50byB0aGUgcHJhY3RpY2FsIGFzcGVjdHMgb2YgaG93IHRoZSBvcHRpbWl6YXRpb24gd29ya3MgdW5kZXIgdGhlIGhvb2QuIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gaWRlbnRpZnksIGluIHRoaXMgYXJlYSwgdGhlIG1lY2hhbmlzbSBmb3IgaG93IHRoZSBrZXJuZWwga2VlcHMgdHJhY2sgb2YgYW5kIHJlYWN0cyB0byB0aGUgRmFzdCBPcGVuIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE3OjQwLjQ1ODMxOTU5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjA6XFx0XFx0fVxcbiAzMjE6XFx0b3V0OlxcbiAzMjI6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDMyMzpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMjQ6XFx0fVxcbiAzMjU6XFx0XFxuIDMyNjpcXHRzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbiAzMjc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMzI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4gMzI5OlxcdHtcXG4gMzMwOlxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHA7XFxuIDMzMTpcXHRcXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSA9IFxcdTAwMjZpbmV0X2NzayhzayktXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlO1xcbiAzMzI6XFx0XFx0c3RydWN0IHNvY2sgKmNoaWxkO1xcbiAzMzM6XFx0XFx0Ym9vbCBvd25fcmVxO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRjaGlsZCA9IGluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19hZl9vcHMtXFx1MDAzZXN5bl9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBOVUxMLFxcbiAzMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5VTEwsIFxcdTAwMjZvd25fcmVxLCBOVUxMKTtcXG4gMzM3OlxcdFxcdGlmICghY2hpbGQpXFxuIDMzODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0aWYgKG93bl9yZXEgXFx1MDAyNlxcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG4gMzQxOlxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcXG4gMzQyOlxcdFxcdFxcdHNvY2tfcHV0KGNoaWxkKTtcXG4gMzQzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuIDM0NzpcXHRcXHRxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLnFsZW4rKztcXG4gMzQ4OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZxdWV1ZS1cXHUwMDNlZmFzdG9wZW5xLmxvY2spO1xcbiAzNDk6XFx0XFxuIDM1MDpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSBjaGlsZCBzb2NrZXQuIEhhdmUgdG8gZml4IHNvbWUgdmFsdWVzIHRvIHRha2VcXG4gMzUxOlxcdFxcdCAqIGludG8gYWNjb3VudCB0aGUgY2hpbGQgaXMgYSBGYXN0IE9wZW4gc29ja2V0IGFuZCBpcyBjcmVhdGVkXFxuIDM1MjpcXHRcXHQgKiBvbmx5IG91dCBvZiB0aGUgYml0cyBjYXJyaWVkIGluIHRoZSBTWU4gcGFja2V0LlxcbiAzNTM6XFx0XFx0ICovXFxuIDM1NDpcXHRcXHR0cCA9IHRjcF9zayhjaGlsZCk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0cC1cXHUwMDNlZmFzdG9wZW5fcnNrLCByZXEpO1xcbiAzNTc6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0Zm9fbGlzdGVuZXIgPSB0cnVlO1xcbiAzNTg6XFx0XFxuIDM1OTpcXHRcXHQvKiBSRkMxMzIzOiBUaGUgd2luZG93IGluIFNZTiBcXHUwMDI2IFNZTi9BQ0sgc2VnbWVudHMgaXMgbmV2ZXJcXG4gMzYwOlxcdFxcdCAqIHNjYWxlZC4gU28gY29ycmVjdCBpdCBhcHByb3ByaWF0ZWx5LlxcbiAzNjE6XFx0XFx0ICovXFxuIDM2MjpcXHRcXHR0cC1cXHUwMDNlc25kX3duZCA9IG50b2hzKHRjcF9oZHIoc2tiKS1cXHUwMDNld2luZG93KTtcXG4gMzYzOlxcdFxcdHRwLVxcdTAwM2VtYXhfd2luZG93ID0gdHAtXFx1MDAzZXNuZF93bmQ7XFxuIDM2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6NDAuNDU4NDU3MjM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MTU1MTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBUQ1AgSW5wdXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBUQ1AgaW5wdXQgcHJvY2VzcywgYnV0IHRvIHJlYWxseSBuYWlsIGRvd24gdGhlIHNwZWNpZmljcyBhbmQgc2VlIGhvdyB0aGlzIGlzIGhhbmRsZWQgYXQgYSBkZXRhaWxlZCBsZXZlbCwgSSB3YW50IHRvIHplcm8gaW4gb24gYSBwYXJ0aWN1bGFyIGFyZWEuIEknbSB0aGlua2luZyB3ZSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZXhhbWluZSBsaW5lcyA3NjYwIHRocm91Z2ggNzc5MC4gVGhhdCByYW5nZSBzaG91bGQgZ2l2ZSB1cyBzb21lIGludGVyZXN0aW5nIGluc2lnaHRzLCBJJ20gZXhwZWN0aW5nLiBJdCdzIHByb2JhYmx5IHJlbGF0ZWQgdG8gcGFja2V0IHByb2Nlc3Npbmcgb3IgZXJyb3IgaGFuZGxpbmcgLSB0aG9zZSBhcmUgdGhlIGFyZWFzIEknbSBvZnRlbiBmb2N1c2luZyBvbiB3aGVuIEkgbG9vayBpbnRvIHRjcF9pbnB1dC5jLiBMZXQncyBzZWUgd2hhdCBnZW1zIHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo0Mi44MzAwMTIzNzRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc2NjAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc2NjA6XFx0XFxuNzY2MTpcXHRcXHRyZXEgPSBpbmV0X3JlcXNrX2FsbG9jKHJza19vcHMsIHNrLCAhd2FudF9jb29raWUpO1xcbjc2NjI6XFx0XFx0aWYgKCFyZXEpXFxuNzY2MzpcXHRcXHRcXHRnb3RvIGRyb3A7XFxuNzY2NDpcXHRcXG43NjY1OlxcdFxcdHJlcS1cXHUwMDNlc3luY29va2llID0gd2FudF9jb29raWU7XFxuNzY2NjpcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWFmX3NwZWNpZmljID0gYWZfb3BzO1xcbjc2Njc6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0c19vZmYgPSAwO1xcbjc2Njg6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VyZXFfdXNlY190cyA9IGZhbHNlO1xcbjc2Njk6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0eGhhc2ggPSBuZXRfdHhfcm5kaGFzaCgpO1xcbjc2NzA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQKVxcbjc2NzE6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vpc19tcHRjcCA9IDA7XFxuNzY3MjpcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XFxuNzY3MzpcXHQjZW5kaWZcXG43Njc0OlxcdFxcbjc2NzU6XFx0XFx0dGNwX2NsZWFyX29wdGlvbnMoXFx1MDAyNnRtcF9vcHQpO1xcbjc2NzY6XFx0XFx0dG1wX29wdC5tc3NfY2xhbXAgPSBhZl9vcHMtXFx1MDAzZW1zc19jbGFtcDtcXG43Njc3OlxcdFxcdHRtcF9vcHQudXNlcl9tc3MgID0gUkVBRF9PTkNFKHRwLVxcdTAwM2VyeF9vcHQudXNlcl9tc3MpO1xcbjc2Nzg6XFx0XFx0dGNwX3BhcnNlX29wdGlvbnMoc29ja19uZXQoc2spLCBza2IsIFxcdTAwMjZ0bXBfb3B0LCAwLFxcbjc2Nzk6XFx0XFx0XFx0XFx0ICB3YW50X2Nvb2tpZSA/IE5VTEwgOiBcXHUwMDI2Zm9jKTtcXG43NjgwOlxcdFxcbjc2ODE6XFx0XFx0aWYgKHdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2ICF0bXBfb3B0LnNhd190c3RhbXApXFxuNzY4MjpcXHRcXHRcXHR0Y3BfY2xlYXJfb3B0aW9ucyhcXHUwMDI2dG1wX29wdCk7XFxuNzY4MzpcXHRcXG43Njg0OlxcdFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19TTUMpIFxcdTAwMjZcXHUwMDI2IHdhbnRfY29va2llKVxcbjc2ODU6XFx0XFx0XFx0dG1wX29wdC5zbWNfb2sgPSAwO1xcbjc2ODY6XFx0XFxuNzY4NzpcXHRcXHR0bXBfb3B0LnRzdGFtcF9vayA9IHRtcF9vcHQuc2F3X3RzdGFtcDtcXG43Njg4OlxcdFxcdHRjcF9vcGVucmVxX2luaXQocmVxLCBcXHUwMDI2dG1wX29wdCwgc2tiLCBzayk7XFxuNzY4OTpcXHRcXHRpbmV0X3JzayhyZXEpLVxcdTAwM2Vub19zcmNjaGVjayA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcXG43NjkwOlxcdFxcbjc2OTE6XFx0XFx0LyogTm90ZTogdGNwX3Y2X2luaXRfcmVxKCkgbWlnaHQgb3ZlcnJpZGUgaXJfaWlmIGZvciBsaW5rIGxvY2FscyAqL1xcbjc2OTI6XFx0XFx0aW5ldF9yc2socmVxKS1cXHUwMDNlaXJfaWlmID0gaW5ldF9yZXF1ZXN0X2JvdW5kX2Rldl9pZihzaywgc2tiKTtcXG43NjkzOlxcdFxcbjc2OTQ6XFx0XFx0aWYgKHdhbnRfY29va2llKSB7XFxuNzY5NTpcXHRcXHRcXHRpc24gPSBjb29raWVfaW5pdF9zZXF1ZW5jZShhZl9vcHMsIHNrYiwgXFx1MDAyNnJlcS1cXHUwMDNlbXNzKTtcXG43Njk2OlxcdFxcdFxcdC8qIFVzZSB0aGUgY29va2llIGFzIHR4aGFzaCBzbyB0aGUgU1lOLUFDSyBhbmQgdGhlIGxhdGVyIGZ1bGxcXG43Njk3OlxcdFxcdFxcdCAqIHNvY2tldCBtYWtlIHRoZSBzYW1lIGVncmVzcyBjaG9pY2UgKElQdjYgRUNNUCBwYXRoOyBJUHY0IFRYIHF1ZXVlKS5cXG43Njk4OlxcdFxcdFxcdCAqL1xcbjc2OTk6XFx0XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2V0eGhhc2ggPSBpc247XFxuNzcwMDpcXHRcXHR9XFxuNzcwMTpcXHRcXG43NzAyOlxcdFxcdGRzdCA9IGFmX29wcy1cXHUwMDNlcm91dGVfcmVxKHNrLCBza2IsIFxcdTAwMjZmbCwgcmVxLCB3YW50X2Nvb2tpZSA/IDAgOiBpc24pO1xcbjc3MDM6XFx0XFx0aWYgKCFkc3QpXFxuNzcwNDpcXHRcXHRcXHRnb3RvIGRyb3BfYW5kX2ZyZWU7XFxuNzcwNTpcXHRcXG43NzA2OlxcdFxcdGlmICh0bXBfb3B0LnRzdGFtcF9vayB8fCAoIXdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2ICFpc24pKVxcbjc3MDc6XFx0XFx0XFx0c3QgPSBJTkRJUkVDVF9DQUxMX0lORVQoYWZfb3BzLVxcdTAwM2Vpbml0X3NlcV9hbmRfdHNfb2ZmLFxcbjc3MDg6XFx0XFx0XFx0XFx0XFx0XFx0dGNwX3Y2X2luaXRfc2VxX2FuZF90c19vZmYsXFxuNzcwOTpcXHRcXHRcXHRcXHRcXHRcXHR0Y3BfdjRfaW5pdF9zZXFfYW5kX3RzX29mZixcXG43NzEwOlxcdFxcdFxcdFxcdFxcdFxcdG5ldCwgc2tiKTtcXG43NzExOlxcdFxcbjc3MTI6XFx0XFx0aWYgKHRtcF9vcHQudHN0YW1wX29rKSB7XFxuNzcxMzpcXHRcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXJlcV91c2VjX3RzID0gZHN0X3RjcF91c2VjX3RzKGRzdCk7XFxuNzcxNDpcXHRcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXRzX29mZiA9IHN0LnRzX29mZjtcXG43NzE1OlxcdFxcdH1cXG43NzE2OlxcdFxcdGlmICghd2FudF9jb29raWUgXFx1MDAyNlxcdTAwMjYgIWlzbikge1xcbjc3MTc6XFx0XFx0XFx0aW50IG1heF9zeW5fYmFja2xvZyA9IFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX21heF9zeW5fYmFja2xvZyk7XFxuNzcxODpcXHRcXG43NzE5OlxcdFxcdFxcdC8qIEtpbGwgdGhlIGZvbGxvd2luZyBjbGF1c2UsIGlmIHlvdSBkaXNsaWtlIHRoaXMgd2F5LiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo0Mi44MzAyOTkyNTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NjExMTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoZSBgdGNwX2Nvbm5fcmVxdWVzdGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29kZSBibG9jayBmcm9tIGFwcHJveGltYXRlbHkgbGluZSA3NzYwIHRvIDc3OTUuIEknbGwgbmVlZCB0byBhbmFseXplIHRoaXMgc2VnbWVudCBjYXJlZnVsbHkgdG8gZnVsbHkgZ3Jhc3AgaXRzIGZ1bmN0aW9uYWxpdHkgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiBUQ1AgY29ubmVjdGlvbiBoYW5kbGluZy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3Igc3BlY2lmaWMgZWxlbWVudHMgcmVsYXRlZCB0byBjb25uZWN0aW9uIHNldHVwOiBhcmUgd2UgbG9va2luZyBhdCBTWU4gaGFuZGxpbmc/IEFDSyBwcm9jZWR1cmVzPyBTdGF0ZSB0cmFuc2l0aW9ucz8gQW55IGtpbmQgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbj8gSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGlzIHNwZWNpZmljIGNvZGUgc2VnbWVudCByZWxhdGVzIHRvIGNvbm5lY3Rpb24gc3RhdGUuIEkgYWxzbyBleHBlY3QgdGhhdCB0aGVyZSBtYXkgYmUgY2FsbHMgdG8gaW50ZXJuYWwgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo0NC45MDY0MTc1OTVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTcyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc3NjA6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VzeW5fdG9zID0gVENQX1NLQl9DQihza2IpLVxcdTAwM2VpcF9kc2ZpZWxkO1xcbjc3NjE6XFx0XFx0dGNwX29wZW5yZXFfaW5pdF9yd2luKHJlcSwgc2ssIGRzdCk7XFxuNzc2MjpcXHRcXHRza19yeF9xdWV1ZV9zZXQocmVxX3RvX3NrKHJlcSksIHNrYik7XFxuNzc2MzpcXHRcXHRpZiAoIXdhbnRfY29va2llKSB7XFxuNzc2NDpcXHRcXHRcXHR0Y3BfcmVxc2tfcmVjb3JkX3N5bihzaywgcmVxLCBza2IpO1xcbjc3NjU6XFx0XFx0XFx0ZmFzdG9wZW5fc2sgPSB0Y3BfdHJ5X2Zhc3RvcGVuKHNrLCBza2IsIHJlcSwgXFx1MDAyNmZvYywgZHN0KTtcXG43NzY2OlxcdFxcdH1cXG43NzY3OlxcdFxcdGlmIChmYXN0b3Blbl9zaykge1xcbjc3Njg6XFx0XFx0XFx0YWZfb3BzLVxcdTAwM2VzZW5kX3N5bmFjayhmYXN0b3Blbl9zaywgZHN0LCBcXHUwMDI2ZmwsIHJlcSxcXG43NzY5OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9jLCBUQ1BfU1lOQUNLX0ZBU1RPUEVOLCBza2IpO1xcbjc3NzA6XFx0XFx0XFx0LyogQWRkIHRoZSBjaGlsZCBzb2NrZXQgZGlyZWN0bHkgaW50byB0aGUgYWNjZXB0IHF1ZXVlICovXFxuNzc3MTpcXHRcXHRcXHRpZiAoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBmYXN0b3Blbl9zaykpIHtcXG43NzcyOlxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGZhc3RvcGVuX3NrKTtcXG43NzczOlxcdFxcdFxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG43Nzc0OlxcdFxcdFxcdFxcdGdvdG8gZHJvcF9hbmRfZnJlZTtcXG43Nzc1OlxcdFxcdFxcdH1cXG43Nzc2OlxcdFxcdFxcdFJFQURfT05DRShzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xcbjc3Nzc6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soZmFzdG9wZW5fc2spO1xcbjc3Nzg6XFx0XFx0XFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xcbjc3Nzk6XFx0XFx0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbjc3ODA6XFx0XFx0XFx0cmVxc2tfZnJlZShyZXEpO1xcbjc3ODE6XFx0XFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG43NzgyOlxcdFxcdFxcdHJldHVybiAwO1xcbjc3ODM6XFx0XFx0fSBlbHNlIHtcXG43Nzg0OlxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldGZvX2xpc3RlbmVyID0gZmFsc2U7XFxuNzc4NTpcXHRcXHRcXHRpZiAoIXdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2XFxuNzc4NjpcXHRcXHRcXHQgICAgdW5saWtlbHkoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKHNrLCByZXEpKSkge1xcbjc3ODc6XFx0XFx0XFx0XFx0cmVxc2tfZnJlZShyZXEpO1xcbjc3ODg6XFx0XFx0XFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG43Nzg5OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjc3OTA6XFx0XFx0XFx0fVxcbjc3OTE6XFx0XFx0XFx0YWZfb3BzLVxcdTAwM2VzZW5kX3N5bmFjayhzaywgZHN0LCBcXHUwMDI2ZmwsIHJlcSwgXFx1MDAyNmZvYyxcXG43NzkyOlxcdFxcdFxcdFxcdFxcdCAgICAhd2FudF9jb29raWUgPyBUQ1BfU1lOQUNLX05PUk1BTCA6XFxuNzc5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBUQ1BfU1lOQUNLX0NPT0tJRSxcXG43Nzk0OlxcdFxcdFxcdFxcdFxcdCAgICBza2IpO1xcbjc3OTU6XFx0XFx0XFx0aWYgKHdhbnRfY29va2llKSB7XFxuNzc5NjpcXHRcXHRcXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuNzc5NzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG43Nzk4OlxcdFxcdFxcdH1cXG43Nzk5OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6NDQuOTA3Mzk2ODU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3MDkyMTMxNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZHJvcF9yZXFgIEZsYWcqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB3aGVyZSB0aGlzIGB0Y3BfcnNrKHJlcSktXHUwMDNlZHJvcF9yZXFgIGZsYWcgaXMgZ2V0dGluZyBzZXQgdG8gYHRydWVgLiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgc29tZSBraW5kIG9mIGNvbm5lY3Rpb24gcmVqZWN0aW9uIG9yIGVhcmx5IGRyb3AgY29uZGl0aW9uIHdpdGhpbiB0aGUgVENQIHN0YWNrLiBUaGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvZGUgd291bGQgYmUgYSBxdWljayBncmVwLiBJJ2xsIHNlYXJjaCBmb3IgYGRyb3BfcmVxYCBhY3Jvc3MgdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgaW5zdGFuY2VzIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgdG91Y2hlZC4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgXCJkcm9wIHJlcXVlc3RcIiBiZWhhdmlvci4gVGhpcyBzaG91bGQgcXVpY2tseSBwaW5wb2ludCB0aGUgc291cmNlIG9mIHRoZSBkcm9wIGFuZCBhbGxvdyBtZSB0byBkZXRlcm1pbmUgdGhlIGNhdXNlIG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTcxLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo0Ni42MTY2MTM4NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODM4MzEzMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJvcF9yZXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYz05ND1pbnQgYm5nZV9zZW5kX21zZyhzdHJ1Y3QgYm5nZV9hdXhyX2RldiAqYXV4cl9kZXYsIHN0cnVjdCBibmdlX2Z3X21zZyAqZndfbXNnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDctXFx0aWYgKHJjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmM6MTA4OlxcdFxcdGdvdG8gZHJvcF9yZXE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jLTExOS1cXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYzoxMjA6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMjEtXFx0Ym5nZV9od3JtX3JlcV9kcm9wKGJkLCByZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmM9MTUyMz1pbnQgYm5nZV9od3JtX3BvcnRfcXN0YXRzX2V4dChzdHJ1Y3QgYm5nZV9kZXYgKmJkLCB1OCBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE1OTctXFx0XFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE1OTg6XFx0XFx0XFx0XFx0Z290byBkcm9wX3JlcTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYy0xNTk5LVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE2MDYtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE2MDc6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTYwOC1cXHRibmdlX2h3cm1fcmVxX2Ryb3AoYmQsIHJlcV9xYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYz00Nj1zdGF0aWMgaW50IGJueHRfaHdybV90ZW1wX3F1ZXJ5KHN0cnVjdCBibnh0ICpicCwgdTggKnRlbXApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01Ny1cXHRpZiAocmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmM6NTg6XFx0XFx0Z290byBkcm9wX3JlcTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTY5LVxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYzo3MDpkcm9wX3JlcTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy03MS1cXHRod3JtX3JlcV9kcm9wKGJwLCByZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTIzNj1pbnQgYm54dF9zZW5kX21zZyhzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjU0LVxcdGlmIChyYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6MjU1OlxcdFxcdGdvdG8gZHJvcF9yZXE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy0yNjYtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzoyNjc6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI2OC1cXHRod3JtX3JlcV9kcm9wKGJwLCByZXEpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTA2PXN0YXRpYyBpbnQgZl9taWRpMl9zdGFydF9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTEyMS0vKiBEcm9wIHBlbmRpbmcgcmVxdWVzdHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExMjI6c3RhdGljIHZvaWQgZl9taWRpMl9kcm9wX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIwND1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXAoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA1LXtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDY6XFx0Zl9taWRpMl9kcm9wX3JlcXModXNiX2VwKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDctXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDA9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQyLXtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDM6XFx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfaW4pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcXHRmX21pZGkyX2Ryb3BfcmVxcyhlcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0NS1cXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyhlcF9pbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oPTE1MD1zdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oLTE1Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuaW5jbHVkZS9saW51eC90Y3AuaDoxNTg6XFx0Ym9vbFxcdFxcdFxcdFxcdGRyb3BfcmVxO1xcbmluY2x1ZGUvbGludXgvdGNwLmgtMTU5LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0xMzc9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0MS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE0MjpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0My17XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNDQ6XFx0cmV0dXJuIHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgXFx1MDAyNlxcdTAwMjYgdGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0NS19XFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI0NT1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjQ5LVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjUwOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjUxLXtcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMC1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjExOlxcdFxcdGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTItXFx0XFx0XFx0cmVxc2tfcHV0KHJlcSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz0zMjY9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMzOS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozNDA6XFx0aWYgKG93bl9yZXEgXFx1MDAyNlxcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zNDEtXFx0XFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyMi1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDIzOnN0YXRpYyBpbmxpbmUgdm9pZCBwcl9kcm9wX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIF9fdTE2IHBvcnQsIGludCBmYW1pbHkpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyNC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY3MS1cXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWlzX21wdGNwID0gMDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjcyOlxcdHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjczLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczMC1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NzMxOlxcdFxcdFxcdHByX2Ryb3BfcmVxKHJlcSwgbnRvaHModGNwX2hkcihza2IpLVxcdTAwM2Vzb3VyY2UpLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3MzItXFx0XFx0XFx0XFx0ICAgIHJza19vcHMtXFx1MDAzZWZhbWlseSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Nzc4LVxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Nzc5OlxcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVxcdFxcdHJlcXNrX2ZyZWUocmVxKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTQzOlxcdGlmIChvd25fcmVxIFxcdTAwMjZcXHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cXHRcXHRyZXFza19xdWV1ZV9yZW1vdmVkKFxcdTAwMjZpbmV0X2NzayhyZXEtXFx1MDAzZXJza19saXN0ZW5lciktXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlLCByZXEpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy04NjItXFxubmV0L21wdGNwL3N1YmZsb3cuYzo4NjM6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODY0LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05NDgtXFx0XFx0XFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5BQ0tSWCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5NDk6XFx0XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IHRydWU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05NTAtXFx0XFx0fVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05NjItXFx0bXB0Y3Bfc3ViZmxvd19kcm9wX2N0eChjaGlsZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5NjM6XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IHRydWU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05NjQtXFx0aW5ldF9jc2tfcHJlcGFyZV9mb3JfZGVzdHJveV9zb2NrKGNoaWxkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6NDkuMDAwNDU4NjUzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU1Nzk0OTcyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIE1QVENQIFN1YmZsb3cgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGUgTXVsdGlQYXRoIFRDUCBzdWJmbG93IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkuIExldCBtZSBwdWxsIHVwIHRoZSBgbmV0L21wdGNwL3N1YmZsb3cuY2AgZmlsZSDigJMgdGhhdCdzIHRoZSBjZW50cmFsIHBsYWNlIGZvciB0aGUgY29yZSBzdWJmbG93IGxvZ2ljLCByaWdodD8gTm93LCBJIHdhbnQgdG8gemVybyBpbiBvbiBhIGNyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSwgZnJvbSBhcHByb3hpbWF0ZWx5IGxpbmVzIDgwNCB0aHJvdWdoIDk3MC4gSSdtIGhvcGluZyB0aGF0IHBhcnRpY3VsYXIgY29kZSBibG9jayB3aWxsIGlsbHVtaW5hdGUgdGhlIGJlaGF2aW91ciBhbmQgbG9naWMgSSBuZWVkIHRvIGdyYXNwLiBIb3BlZnVsbHksIHRoaXMgc2VjdGlvbiB3aWxsIGNvbnRhaW4gdGhlIGNydWNpYWwgZGV0YWlscyBJJ20gc2Vla2luZyByZWdhcmRpbmcgdGhlIHN1YmZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMjU2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTc6NTQuNTc5OTYxODM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3Avc3ViZmxvdy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg1MDpcXHRcXHR9IGVsc2UgaWYgKHN1YmZsb3dfcmVxLVxcdTAwM2VtcF9qb2luKSB7XFxuIDg1MTpcXHRcXHRcXHRtcHRjcF9nZXRfb3B0aW9ucyhza2IsIFxcdTAwMjZtcF9vcHQpO1xcbiA4NTI6XFx0XFx0XFx0aWYgKCEobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBKX0FDSykpXFxuIDg1MzpcXHRcXHRcXHRcXHRmYWxsYmFjayA9IHRydWU7XFxuIDg1NDpcXHRcXHR9XFxuIDg1NTpcXHRcXG4gODU2OlxcdGNyZWF0ZV9jaGlsZDpcXG4gODU3OlxcdFxcdGNoaWxkID0gbGlzdGVuZXItXFx1MDAzZWljc2tfYWZfb3BzLVxcdTAwM2VzeW5fcmVjdl9zb2NrKHNrLCBza2IsIHJlcSwgZHN0LFxcbiA4NTg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICByZXFfdW5oYXNoLCBvd25fcmVxLCBvcHRfY2hpbGRfaW5pdCk7XFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdGlmIChjaGlsZCBcXHUwMDI2XFx1MDAyNiAqb3duX3JlcSkge1xcbiA4NjE6XFx0XFx0XFx0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqY3R4ID0gbXB0Y3Bfc3ViZmxvd19jdHgoY2hpbGQpO1xcbiA4NjI6XFx0XFxuIDg2MzpcXHRcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdFxcdC8qIHdlIG5lZWQgdG8gZmFsbGJhY2sgb24gY3R4IGFsbG9jYXRpb24gZmFpbHVyZSBhbmQgb24gcHJlLXJlcXNcXG4gODY2OlxcdFxcdFxcdCAqIGNoZWNraW5nIGFib3ZlLiBJbiB0aGUgbGF0dGVyIHNjZW5hcmlvIHdlIGFkZGl0aW9uYWxseSBuZWVkXFxuIDg2NzpcXHRcXHRcXHQgKiB0byByZXNldCB0aGUgY29udGV4dCB0byBub24gTVBUQ1Agc3RhdHVzLlxcbiA4Njg6XFx0XFx0XFx0ICovXFxuIDg2OTpcXHRcXHRcXHRpZiAoIWN0eCB8fCBmYWxsYmFjaykge1xcbiA4NzA6XFx0XFx0XFx0XFx0aWYgKGZhbGxiYWNrX2lzX2ZhdGFsKSB7XFxuIDg3MTpcXHRcXHRcXHRcXHRcXHRpZiAoIWN0eClcXG4gODcyOlxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksXFxuIDg3MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRNUFRDUF9NSUJfTVBKT0lOQUNLTk9DVFgpO1xcbiA4NzQ6XFx0XFx0XFx0XFx0XFx0ZWxzZVxcbiA4NzU6XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG4gODc2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX01JQl9NUEpPSU5BQ0tOT01QSk9JTik7XFxuIDg3NzpcXHRcXHRcXHRcXHRcXHRzdWJmbG93X2FkZF9yZXNldF9yZWFzb24oc2tiLCBNUFRDUF9SU1RfRU1QVENQKTtcXG4gODc4OlxcdFxcdFxcdFxcdFxcdGdvdG8gZGlzcG9zZV9jaGlsZDtcXG4gODc5OlxcdFxcdFxcdFxcdH1cXG4gODgwOlxcdFxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDg4MTpcXHRcXHRcXHR9XFxuIDg4MjpcXHRcXG4gODgzOlxcdFxcdFxcdC8qIHNzayBpbmhlcml0cyBvcHRpb25zIG9mIGxpc3RlbmVyIHNrICovXFxuIDg4NDpcXHRcXHRcXHRjdHgtXFx1MDAzZXNldHNvY2tvcHRfc2VxID0gbGlzdGVuZXItXFx1MDAzZXNldHNvY2tvcHRfc2VxO1xcbiA4ODU6XFx0XFxuIDg4NjpcXHRcXHRcXHRpZiAoY3R4LVxcdTAwM2VtcF9jYXBhYmxlKSB7XFxuIDg4NzpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWNvbm4gPSBtcHRjcF9za19jbG9uZV9pbml0KGxpc3RlbmVyLVxcdTAwM2Vjb25uLCBcXHUwMDI2bXBfb3B0LCBjaGlsZCwgcmVxKTtcXG4gODg4OlxcdFxcdFxcdFxcdGlmICghY3R4LVxcdTAwM2Vjb25uKVxcbiA4ODk6XFx0XFx0XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gODkwOlxcdFxcbiA4OTE6XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VzdWJmbG93X2lkID0gMTtcXG4gODkyOlxcdFxcdFxcdFxcdG93bmVyID0gbXB0Y3Bfc2soY3R4LVxcdTAwM2Vjb25uKTtcXG4gODkzOlxcdFxcbiA4OTQ6XFx0XFx0XFx0XFx0aWYgKG1wX29wdC5kZW55X2pvaW5faWQwKVxcbiA4OTU6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRShvd25lci1cXHUwMDNlcG0ucmVtb3RlX2Rlbnlfam9pbl9pZDAsIHRydWUpO1xcbiA4OTY6XFx0XFxuIDg5NzpcXHRcXHRcXHRcXHRtcHRjcF9wbV9uZXdfY29ubmVjdGlvbihvd25lciwgY2hpbGQsIDEpO1xcbiA4OTg6XFx0XFxuIDg5OTpcXHRcXHRcXHRcXHQvKiB3aXRoIE9vTyBwYWNrZXRzIHdlIGNhbiByZWFjaCBoZXJlIHdpdGhvdXQgaW5ncmVzc1xcbiA5MDA6XFx0XFx0XFx0XFx0ICogbXBjIG9wdGlvblxcbiA5MDE6XFx0XFx0XFx0XFx0ICovXFxuIDkwMjpcXHRcXHRcXHRcXHRpZiAobXBfb3B0LnN1Ym9wdGlvbnMgXFx1MDAyNiBPUFRJT05fTVBUQ1BfTVBDX0FDSykge1xcbiA5MDM6XFx0XFx0XFx0XFx0XFx0bXB0Y3BfcG1fZnVsbHlfZXN0YWJsaXNoZWQob3duZXIsIGNoaWxkKTtcXG4gOTA0OlxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlcG1fbm90aWZpZWQgPSAxO1xcbiA5MDU6XFx0XFx0XFx0XFx0fVxcbiA5MDY6XFx0XFx0XFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZW1wX2pvaW4pIHtcXG4gOTA3OlxcdFxcdFxcdFxcdG93bmVyID0gc3ViZmxvd19yZXEtXFx1MDAzZW1zaztcXG4gOTA4OlxcdFxcdFxcdFxcdGlmICghb3duZXIpIHtcXG4gOTA5OlxcdFxcdFxcdFxcdFxcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FUFJPSElCSVQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNzo1NC41ODAxMTc0MTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAzNjI5NTA5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIEZhc3QgT3BlbiBhbmQgQ29ubmVjdGlvbiBSZXF1ZXN0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkxldCdzIGRpdmUgaW50byB0aGUgZ2l0IGxvZyB0byB1bmRlcnN0YW5kIHRoZSAnd2h5JyBiZWhpbmQgdGhpcyBjaGFuZ2UuXCIgQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhhdCwgbWF5YmUgYSBxdWljayBgZ3JlcHBlcmAgcnVuIHdvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkLCBvciBwZXJoYXBzIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgZGlmZiB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gZ2xlYW4gdGhlIHB1cnBvc2UuIFRoZSBjb21taXQgaW4gdGhlIHdvcmtzcGFjZSBpcyBgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3YCwgd2hpY2ggZG9lc24ndCB0ZWxsIG1lIG11Y2guXG5cbk5vdywgbG9va2luZyBhdCB0aGUgZGlmZiBpdHNlbGYsIGl0IHNlZW1zIGxpa2Ugd2UncmUgdG91Y2hpbmcgYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCBhbmQgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gVENQIEZhc3QgT3BlbiBjaGlsZCBzb2NrZXQgY3JlYXRpb24gYW5kIFRDUCBjb25uZWN0aW9uIHJlcXVlc3RzLCBpbmNsdWRpbmcgaGFuZGxpbmcgb2YgcmVxdWVzdCBzb2NrZXRzIGFuZCBhIG5ldyBgZHJvcF9yZXFgIGZpZWxkLiAgVGhlIGFkZGVkIGByc2tfZHJvcF9yZXFgIGNhbGxzIHdpdGhpbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YCBhcmUgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuXG5cbk15IGV4cGVydCBleWVzIHRlbGwgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2suICBUaGlzIGFmZmVjdHMgVENQL01QVENQIHNvY2tldCBjcmVhdGlvbiBhbmQgU1lOIGhhbmRsaW5nLCB3aGljaCBpcyBmdW5kYW1lbnRhbC4gVGhpcyBjb2RlIHdpbGwgYmUgcmVhY2hlZCBieSBzaW1wbHkgY3JlYXRpbmcgc3RhbmRhcmQgVENQL01QVENQIHNvY2tldHMgYW5kIHNlbmRpbmcgU1lOcyB3aXRoIG9yIHdpdGhvdXQgVENQIEZhc3QgT3BlbiBjb29raWVzLiBXZSdyZSB0YWxraW5nIHN0YW5kYXJkIHNvY2tldHMsIGxvb3BiYWNrLCB0dW4vdGFwLCBhbmQgbmV0d29yayBkZXZpY2UgaW50ZXJhY3Rpb24g4oCTIGl0J3MgYWxsIGluIHRoZSBtaXguXG5cbkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFRDUCBzdGFjayBpbiBgbmV0L2lwdjQvYCB0aGlzIHBhdGNoICpzaG91bGQqIGJlIG1hcmtlZCBhcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIEl0IGNsZWFybHkgZmFsbHMgdW5kZXIgdGhlIHB1cnZpZXcgb2YgYmVpbmcgcmVhY2hhYmxlIGNvZGUgYW5kIG5vdCBiZWluZyBub24ta2VybmVsLCBub24tZXhlY3V0YWJsZSwgdW5yZWFjaGFibGUgaGFyZHdhcmUsIHRlYXJkb3duLCB1bmJpbmRpbmcsIG9yIGFyY2gtc3BlY2lmaWMuXG5cbk5vdywgbGV0J3MgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgdG8gYmUgY29tcGlsZWQgYW5kIHJlYWNoYWJsZS4gSSdsbCBjaGVjayBmb3IgYENPTkZJR19JTkVUYCAvIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19JUFY0YCBhcyB0aGUgYmFyZSBtaW5pbXVtLiBBIGRlZXBlciBkaXZlIHdpbGwgY29uZmlybSBgQ09ORklHX01QVENQYCBpcyBhbHNvIG5lZWRlZCwgZ2l2ZW4gdGhlIHJlZmVyZW5jZXMgdG8gYElTX0VOQUJMRUQoQ09ORklHX01QVENQKWAgYW5kIHRoZSBgcnNrX2Ryb3BfcmVxYCBmdW5jdGlvbnMuIEkgd2lsbCBuZWVkIHRvIHZlcmlmeSBgQ09ORklHX01QVENQYCBpbiBgbmV0L21wdGNwL0tjb25maWdgIGFuZCBgbmV0L2lwdjQvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxODowNC45NDMwNzEzNDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjI2OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai1cXFxcJFxcXFwoQ09ORklHLip0Y3BfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19JTkVUX0RJQUcpICs9IGluZXRfZGlhZy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX0lORVRfVENQX0RJQUcpICs9IHRjcF9kaWFnLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfSU5FVF9VRFBfRElBRykgKz0gdWRwX2RpYWcub1xcbm5ldC9pcHY0L01ha2VmaWxlPTQ2PW9iai0kKENPTkZJR19JTkVUX1JBV19ESUFHKSArPSByYXdfZGlhZy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDc6b2JqLSQoQ09ORklHX1RDUF9DT05HX0JCUikgKz0gdGNwX2Jici5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDg6b2JqLSQoQ09ORklHX1RDUF9DT05HX0JJQykgKz0gdGNwX2JpYy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NDk6b2JqLSQoQ09ORklHX1RDUF9DT05HX0NERykgKz0gdGNwX2NkZy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTA6b2JqLSQoQ09ORklHX1RDUF9DT05HX0NVQklDKSArPSB0Y3BfY3ViaWMub1xcbm5ldC9pcHY0L01ha2VmaWxlOjUxOm9iai0kKENPTkZJR19UQ1BfQ09OR19EQ1RDUCkgKz0gdGNwX2RjdGNwLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1MjpvYmotJChDT05GSUdfVENQX0NPTkdfV0VTVFdPT0QpICs9IHRjcF93ZXN0d29vZC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX1RDUF9DT05HX0hTVENQKSArPSB0Y3BfaGlnaHNwZWVkLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1NDpvYmotJChDT05GSUdfVENQX0NPTkdfSFlCTEEpICs9IHRjcF9oeWJsYS5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTU6b2JqLSQoQ09ORklHX1RDUF9DT05HX0hUQ1ApICs9IHRjcF9odGNwLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo1NjpvYmotJChDT05GSUdfVENQX0NPTkdfVkVHQVMpICs9IHRjcF92ZWdhcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTc6b2JqLSQoQ09ORklHX1RDUF9DT05HX05WKSArPSB0Y3BfbnYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjU4Om9iai0kKENPTkZJR19UQ1BfQ09OR19WRU5PKSArPSB0Y3BfdmVuby5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NTk6b2JqLSQoQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFKSArPSB0Y3Bfc2NhbGFibGUub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYwOm9iai0kKENPTkZJR19UQ1BfQ09OR19MUCkgKz0gdGNwX2xwLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MTpvYmotJChDT05GSUdfVENQX0NPTkdfWUVBSCkgKz0gdGNwX3llYWgub1xcbm5ldC9pcHY0L01ha2VmaWxlOjYyOm9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgKz0gdGNwX2lsbGlub2lzLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGU9Njc9b2JqLSQoQ09ORklHX1hGUk0pICs9IHhmcm00X3BvbGljeS5vIHhmcm00X3N0YXRlLm8geGZybTRfaW5wdXQubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtNjgtXFx0XFx0ICAgICAgeGZybTRfb3V0cHV0Lm8geGZybTRfcHJvdG9jb2wub1xcbm5ldC9pcHY0L01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19UQ1BfQU8pICs9IHRjcF9hby5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNzAtXFxubmV0L2lwdjQvTWFrZWZpbGU9NzE9aWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG5uZXQvaXB2NC9NYWtlZmlsZTo3MjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl90Y3BfY2Eub1xcbm5ldC9pcHY0L01ha2VmaWxlLTczLWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE4OjA1LjAyMzMwNjMxM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDI2NTQ4NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgYWdhaW4uIEkga25vdyB0aGlzIGNvZGUgcHJldHR5IHdlbGwsIGJ1dCBJJ20gdHJ5aW5nIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGlzIHNlY3Rpb24uIEkgd2FudCB0byBzZWUgd2hhdCdzIGJlaW5nIGJ1aWx0LCBob3cgaXQncyBiZWluZyBidWlsdCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGRlcGVuZGVuY2llcyBvciBidWlsZCBmbGFncyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLiBJdCdzIGVhc3kgdG8gZm9jdXMgb24gaW5kaXZpZHVhbCBmaWxlcywgYnV0IHRoZSBNYWtlZmlsZSdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgKnN5c3RlbSogYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGFueSByZWNlbnQgY2hhbmdlcyBoZXJlLCBhbmQgbG9vayBmb3IgYW55IGNsdWVzLiBJ4oCZbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgbW9kdWxlcyBhbmQga2VybmVsIG9iamVjdHMuIFRpbWUgdG8gZGl2ZSBpbi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg1MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE4OjA3LjA0OTg1OTAxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUQ1AvSVAgKElORVQpIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbiAgIDc6XFx0XFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxcXFxuICAgODpcXHRcXHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcXFxcbiAgIDk6XFx0XFx0ICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0ICAgICB0Y3BfbWluaXNvY2tzLm8gdGNwX2NvbmcubyB0Y3BfbWV0cmljcy5vIHRjcF9mYXN0b3Blbi5vIFxcXFxcXG4gIDEyOlxcdFxcdCAgICAgdGNwX3JlY292ZXJ5Lm8gdGNwX3VscC5vIFxcXFxcXG4gIDEzOlxcdFxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxuICAxNDpcXHRcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcXFxcbiAgMTY6XFx0XFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxuICAxNzpcXHRcXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXFxuICAxODpcXHRcXG4gIDE5OlxcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSArPSBpcF90dW5uZWwub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDIyOlxcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfSVBfTVJPVVRFKSArPSBpcG1yLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG4gIDI2OlxcdGdyZS15IDo9IGdyZV9kZW11eC5vXFxuICAyNzpcXHRmb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xcbiAgMjg6XFx0b2JqLSQoQ09ORklHX05FVF9GT1UpICs9IGZvdS5vXFxuICAyOTpcXHRvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSArPSBncmUub1xcbiAgMzA6XFx0b2JqLSQoQ09ORklHX05FVF9JUEdSRSkgKz0gaXBfZ3JlLm9cXG4gIDMxOlxcdHVkcF90dW5uZWwteSA6PSB1ZHBfdHVubmVsX2NvcmUubyB1ZHBfdHVubmVsX25pYy5vXFxuICAzMjpcXHRvYmotJChDT05GSUdfTkVUX1VEUF9UVU5ORUwpICs9IHVkcF90dW5uZWwub1xcbiAgMzM6XFx0b2JqLSQoQ09ORklHX05FVF9JUFZUSSkgKz0gaXBfdnRpLm9cXG4gIDM0OlxcdG9iai0kKENPTkZJR19TWU5fQ09PS0lFUykgKz0gc3luY29va2llcy5vXFxuICAzNTpcXHRvYmotJChDT05GSUdfSU5FVF9BSCkgKz0gYWg0Lm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19JTkVUX0VTUCkgKz0gZXNwNC5vXFxuICAzNzpcXHRvYmotJChDT05GSUdfSU5FVF9FU1BfT0ZGTE9BRCkgKz0gZXNwNF9vZmZsb2FkLm9cXG4gIDM4OlxcdG9iai0kKENPTkZJR19JTkVUX0lQQ09NUCkgKz0gaXBjb21wLm9cXG4gIDM5OlxcdG9iai0kKENPTkZJR19JTkVUX1hGUk1fVFVOTkVMKSArPSB4ZnJtNF90dW5uZWwub1xcbiAgNDA6XFx0b2JqLSQoQ09ORklHX0lORVRfVFVOTkVMKSArPSB0dW5uZWw0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTg6MDcuMDQ5OTQ4NDk2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDUwODU2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcgYENPTkZJR19NUFRDUGAgaW4gYG5ldC9tcHRjcC9LY29uZmlnYDpcblxuKipDaGVja2luZyB0aGUgTVBUQ1AgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBNUFRDUCBjb25maWd1cmF0aW9uIGluIHRoZSBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHBsYWNlIHdoZXJlIHRoZXNlIG9wdGlvbnMgYXJlIGRlZmluZWQuIFNvLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIGBuZXQvbXB0Y3AvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIGZvciBgQ09ORklHX01QVENQYCwgd2hpY2ggSSdsbCB0aGVuIHVzZSB0byBndWlkZSB3aGF0IEkgY2hlY2sgbmV4dC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhhdCBvcHRpb24sIHRvby4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBhbmQgd2hhdCBzdXBwb3J0aW5nIG9wdGlvbnMgbWlnaHQgYmUgcmVxdWlyZWQgb3IgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk3MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTg6MTEuNDU1MDM3ODc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0XFxuICAgMjpcXHRjb25maWcgTVBUQ1BcXG4gICAzOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBNdWx0aXBhdGggVENQXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNTpcXHRcXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXFxuICAxMDpcXHRcXHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XFxuICAxMTpcXHRcXHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcXG4gIDEyOlxcdFxcdCAgTVBUQ1AuXFxuICAxMzpcXHRcXG4gIDE0OlxcdGlmIE1QVENQXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4gIDE3OlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICAxODpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBNUFRDUF9JUFY2XFxuICAyMTpcXHRcXHRib29sIFxcXCJNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXFxcIlxcbiAgMjI6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2PXlcXG4gIDIzOlxcdFxcdGRlZmF1bHQgeVxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbiAgMjY6XFx0XFx0dHJpc3RhdGUgXFxcIlRoaXMgYnVpbGRzIHRoZSBNUFRDUCBLVW5pdCB0ZXN0c1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBLVU5JVFxcbiAgMjg6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDI5OlxcdFxcdGhlbHBcXG4gIDMwOlxcdFxcdCAgQ3VycmVudGx5IGNvdmVycyB0aGUgTVBUQ1AgY3J5cHRvIGFuZCB0b2tlbiBoZWxwZXJzLlxcbiAgMzE6XFx0XFx0ICBPbmx5IHVzZWZ1bCBmb3Iga2VybmVsIGRldnMgcnVubmluZyBLVW5pdCB0ZXN0IGhhcm5lc3MgYW5kIGFyZSBub3RcXG4gIDMyOlxcdFxcdCAgZm9yIGluY2x1c2lvbiBpbnRvIGEgcHJvZHVjdGlvbiBidWlsZC5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZSByZWZlclxcbiAgMzU6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0ZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTg6MTEuNDU1MTI5Mjc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MzY0OTcxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGByc2tfZHJvcF9yZXFgIGFuZCBGb2N1c1N5bWJvbCBTZWxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGByc2tfZHJvcF9yZXFgIGZ1bmN0aW9uIGFuZCBob3cgaXQncyB1c2VkLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoaXMgbmV3IGNvZGUuIExvb2tpbmcgYXQgYGluY2x1ZGUvbmV0L21wdGNwLmhgLCBJIHNlZSB0aGUgZGVmaW5pdGlvbiBpcyBjb25kaXRpb25hbC4gSWYgYENPTkZJR19NUFRDUGAgaXMgKmRpc2FibGVkKiwgdGhlbiBgcnNrX2Ryb3BfcmVxYCBqdXN0IHJldHVybnMgYGZhbHNlYC4gVGhhdCdzIGltcG9ydGFudC4gSXQgbWVhbnMgdGhvc2UgYGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSlgIGFuZCBgfSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSlgIGNoZWNrcyBhcmUgZWZmZWN0aXZlbHkgZGVhZCBjb2RlIHVubGVzcyBNUFRDUCBpcyBlbmFibGVkLiAgQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfSU5FVGAgd291bGQgYWxzbyBiZSByZXF1aXJlZCBieSB2aXJ0dWUgb2YgVENQLlxuXG5Ob3csIHNoaWZ0aW5nIGdlYXJzLCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYEZvY3VzU3ltYm9sc2AuICBTcGVjaWZpY2FsbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YC4gSSByZWNhbGwgdGhhdCBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgaXMgc3RhdGljLiBGcm9tIHdoYXQgSSd2ZSBzZWVuLCBpdCdzIGNhbGxlZCBieSBgdGNwX3RyeV9mYXN0b3BlbmAgYW5kIGB0Y3BfZmFzdG9wZW5fc3luYWNrX3NlbnRgIGFuZCB0aGUgcXVlc3Rpb24gaXMgaW4gd2hhdCBvdGhlciBjb250ZXh0IGl0IG1pZ2h0IGJlIHVzZWQuIE5vdyBJIHNob3VsZCBncmVwIGZvciBib3RoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzcxOSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE4OjE0Ljk5MTYzMDEyNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMjg3Njc3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTI5OD1zdGF0aWMgaW50IHRjcF9mYXN0b3Blbl9jb29raWVfZ2VuX2NoZWNrKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMyNS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozMjY6c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMjctXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTQ0ND1zdHJ1Y3Qgc29jayAqdGNwX3RyeV9mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy00ODctZmFzdG9wZW46XFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6NDg4OlxcdFxcdFxcdGNoaWxkID0gdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzaywgc2tiLCByZXEpO1xcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTQ4OS1cXHRcXHRcXHRpZiAoY2hpbGQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTg6MTcuNDA0NTMwNjcxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNTY3NjExMDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgdGNwX2Nvbm5fcmVxdWVzdGAgQ2FsbGVycyoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGNhbGwgcGF0aHMuIExldCdzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSB0cmFjaW5nIHRoZSBjYWxsZXJzIG9mIGB0Y3BfY29ubl9yZXF1ZXN0YC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIGluaXRpYXRlZCBhbmQgd2hlcmUgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgVENQL0lQIHN0YWNrLiBJdCdzIG5vdCBlbm91Z2ggdG8ganVzdCBsb29rIGF0IHRoZSBkaXJlY3QgY2FsbGVyczsgSSBuZWVkIHRvIGNvbnNpZGVyIGluZGlyZWN0IGNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbHNpdGUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFjdGl2ZSBvcGVucywgcGFzc2l2ZSBvcGVucywgb3Igc29tZSBjb21iaW5hdGlvbj8gV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlIGF0IGVhY2ggbGV2ZWw/XG5cbkkgYWxzbyBuZWVkIHRvIGJyb2FkZW4gdGhlIHNjb3BlIGFuZCBleGFtaW5lIHJlbGF0ZWQgZnVuY3Rpb25zLCBub3QganVzdCBgdGNwX2Nvbm5fcmVxdWVzdGAuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCB0ZWFyZG93biwgYW5kIG1hbmFnZW1lbnQ/IFRoaW5ncyBsaWtlIGB0Y3BfdjRfcmN2YCwgYHRjcF9hY2NlcHRgLCBgaW5ldF9saXN0ZW5gLCBhbmQgYW55dGhpbmcgZGVhbGluZyB3aXRoIFNZTiwgU1lOLUFDSywgYW5kIEFDSyBwcm9jZXNzaW5nIGFyZSBpbW1lZGlhdGVseSBqdW1waW5nIHRvIG1pbmQuIEkgc2hvdWxkIGJlIGFibGUgdG8gY3Jvc3MtcmVmZXJlbmNlIHdpdGggdGhlc2UgZnVuY3Rpb25zIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiBhbnkgcGF0dGVybnMgb3IgYXJlYXMgdGhhdCB3YXJyYW50IGRlZXBlciBzY3J1dGlueS4gVGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGdvaW5nIHRvIGdvIGZhc3Qgc28gdGhhdCBJIGNhbiBxdWlja2x5IGFzc2VzcyB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE5OjE5Ljk3MjE0NTg2NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMDE0Njk3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfY29ubl9yZXF1ZXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjcC5oPTI0NzE9aW50IHRjcF9ydHhfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTtcXG5pbmNsdWRlL25ldC90Y3AuaDoyNDcyOmludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbmluY2x1ZGUvbmV0L3RjcC5oLTI0NzMtXFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgKmFmX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jPTMyNj1zdGF0aWMgc3RydWN0IHNvY2sgKnRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzg2LVxcdHRwLVxcdTAwM2VyY3ZfbXduZF9zZXEgPSB0cC1cXHUwMDNlcmN2X3d1cCArIHRwLVxcdTAwM2VyY3Zfd25kO1xcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jOjM4NzpcXHQvKiB0Y3BfY29ubl9yZXF1ZXN0KCkgaXMgc2VuZGluZyB0aGUgU1lOQUNLLFxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTM4OC1cXHQgKiBhbmQgcXVldWVzIHRoZSBjaGlsZCBpbnRvIGxpc3RlbmVyIGFjY2VwdCBxdWV1ZS5cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc1OTQ9dTE2IHRjcF9nZXRfc3luY29va2llX21zcyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc2MTktXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzYyMDppbnQgdGNwX2Nvbm5fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqcnNrX29wcyxcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjIxLVxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTE2NTU9aW50IHRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjYwLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTY2MTpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19vcHMsXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xNjYyLVxcdFxcdFxcdFxcdFxcdTAwMjZ0Y3BfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLCBzaywgc2tiKTtcXG4tLVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM9MTMxNj1zdGF0aWMgaW50IHRjcF92Nl9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvdGNwX2lwdjYuYy0xMzI4LVxcbm5ldC9pcHY2L3RjcF9pcHY2LmM6MTMyOTpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2dGNwNl9yZXF1ZXN0X3NvY2tfb3BzLFxcbm5ldC9pcHY2L3RjcF9pcHY2LmMtMTMzMC1cXHRcXHRcXHRcXHRcXHUwMDI2dGNwX3JlcXVlc3Rfc29ja19pcHY2X29wcywgc2ssIHNrYik7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY3Mj1zdGF0aWMgaW50IHN1YmZsb3dfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjgxLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6NjgyOlxcdHJldHVybiB0Y3BfY29ubl9yZXF1ZXN0KFxcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHMsXFxubmV0L21wdGNwL3N1YmZsb3cuYy02ODMtXFx0XFx0XFx0XFx0XFx1MDAyNnN1YmZsb3dfcmVxdWVzdF9zb2NrX2lwdjRfb3BzLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz03MDM9c3RhdGljIGludCBzdWJmbG93X3Y2X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTcxOS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjcyMDpcXHRyZXR1cm4gdGNwX2Nvbm5fcmVxdWVzdChcXHUwMDI2bXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzLFxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzIxLVxcdFxcdFxcdFxcdFxcdTAwMjZzdWJmbG93X3JlcXVlc3Rfc29ja19pcHY2X29wcywgc2ssIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE5OjIzLjEwMjMwNTAyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0ODQxNDMwMTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHByb2plY3QgZ3VpZGVsaW5lcyBmb3IgbGlzdGluZyB0YXJnZXRlZCBmZWF0dXJlIGxvZ2ljLiBGaXJzdCwgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyB0b3VjaGVkOiBJJ20gdHJhY2tpbmcgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2AgYW5kIHdoZXJlIGB0Y3BfdHJ5X2Zhc3RvcGVuYCBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBGYXN0IE9wZW4gYW5kIE1QVENQLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYHRjcF9mYXN0b3Blbl9jcmVhdGVfY2hpbGRgIGhhcyBiZWVuIG1vZGlmaWVkIGluIGBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uY2AsIGFsb25nIHdpdGggY2FsbHMgdG8gYHRjcF90cnlfZmFzdG9wZW5gIHdoaWNoIGl0c2VsZiBjYWxscyBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAsIGFsc28gaW4gYG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jYCwgYW5kIGB0Y3BfY29ubl9yZXF1ZXN0YCBpbiBgbmV0L2lwdjQvdGNwX2lucHV0LmNgLiBUaGVuIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgIGlzIGluIGBuZXQvbXB0Y3Avc3ViZmxvdy5jYC4gSSBuZWVkIHRvIGVuc3VyZSBJJ3ZlIGNvdmVyZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMsIHNvIGEgZG91YmxlLWNoZWNrIGlzIG5lY2Vzc2FyeS5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHZpc2liaWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zLiBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgaXMgKnN0YXRpYyosIGJ1dCBJIGtub3cgdGhhdCBpbiBDLCBzdGF0aWMgZnVuY3Rpb25zIG9mdGVuIHN0aWxsIGhhdmUgc3ltYm9scyBpZiB0aGV5J3JlIG5vdCBpbmxpbmVkLCBhbHRob3VnaCBJJ2xsIGJlIHN1cmUgdG8gaW5jbHVkZSBpdC4gYHRjcF90cnlfZmFzdG9wZW5gIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdGAgYXJlIGJvdGggbm9uLXN0YXRpYy4gU2luY2UgdGhlIGd1aWRlbGluZXMgYXNrIG1lIHRvIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyIGZ1bmN0aW9ucyB0aGF0IGV4ZXJjaXNlIHN0YXRpYyBpbmxpbmUgaGVscGVycywgYW5kIHRob3NlIGFyZTpcbi0gICBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGBcbi0gICBgdGNwX3RyeV9mYXN0b3BlbmBcbi0gICBgdGNwX2Nvbm5fcmVxdWVzdGBcblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSBrbm93IEknbGwgbmVlZCBgSU5FVGAgYW5kIGBNUFRDUGAsIGJ1dCBsZXQncyBjb25maXJtIHdoZXRoZXIgYFRDUF9GQVNUT1BFTmAgaXMgYSBzZXBhcmF0ZSBjb25maWcgb3B0aW9uIG9yIGlmIGl0J3MgaW1wbGljaXRseSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgyMiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOToyNy45NDM3Mzg4NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0ODAyMDY2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVENQX1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTQ1NT1jb25maWcgSU5FVF9ESUFHX0RFU1RST1lcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDY3LVxcbm5ldC9pcHY0L0tjb25maWc6NDY4Om1lbnVjb25maWcgVENQX0NPTkdfQURWQU5DRURcXG5uZXQvaXB2NC9LY29uZmlnLTQ2OS1cXHRib29sIFxcXCJUQ1A6IGFkdmFuY2VkIGNvbmdlc3Rpb24gY29udHJvbFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9NDc5PWlmIFRDUF9DT05HX0FEVkFOQ0VEXFxubmV0L2lwdjQvS2NvbmZpZy00ODAtXFxubmV0L2lwdjQvS2NvbmZpZzo0ODE6Y29uZmlnIFRDUF9DT05HX0JJQ1xcbm5ldC9pcHY0L0tjb25maWctNDgyLVxcdHRyaXN0YXRlIFxcXCJCaW5hcnkgSW5jcmVhc2UgQ29uZ2VzdGlvbiAoQklDKSBjb250cm9sXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00OTQtXFxubmV0L2lwdjQvS2NvbmZpZzo0OTU6Y29uZmlnIFRDUF9DT05HX0NVQklDXFxubmV0L2lwdjQvS2NvbmZpZy00OTYtXFx0dHJpc3RhdGUgXFxcIkNVQklDIFRDUFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNTAyLVxcbm5ldC9pcHY0L0tjb25maWc6NTAzOmNvbmZpZyBUQ1BfQ09OR19XRVNUV09PRFxcbm5ldC9pcHY0L0tjb25maWctNTA0LVxcdHRyaXN0YXRlIFxcXCJUQ1AgV2VzdHdvb2QrXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy01MTYtXFxubmV0L2lwdjQvS2NvbmZpZzo1MTc6Y29uZmlnIFRDUF9DT05HX0hUQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTUxOC1cXHR0cmlzdGF0ZSBcXFwiSC1UQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTUyNy1cXG5uZXQvaXB2NC9LY29uZmlnOjUyODpjb25maWcgVENQX0NPTkdfSFNUQ1BcXG5uZXQvaXB2NC9LY29uZmlnLTUyOS1cXHR0cmlzdGF0ZSBcXFwiSGlnaCBTcGVlZCBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTUzNy1cXG5uZXQvaXB2NC9LY29uZmlnOjUzODpjb25maWcgVENQX0NPTkdfSFlCTEFcXG5uZXQvaXB2NC9LY29uZmlnLTUzOS1cXHR0cmlzdGF0ZSBcXFwiVENQLUh5YmxhIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTU0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjU0Nzpjb25maWcgVENQX0NPTkdfVkVHQVNcXG5uZXQvaXB2NC9LY29uZmlnLTU0OC1cXHR0cmlzdGF0ZSBcXFwiVENQIFZlZ2FzXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy01NTYtXFxubmV0L2lwdjQvS2NvbmZpZzo1NTc6Y29uZmlnIFRDUF9DT05HX05WXFxubmV0L2lwdjQvS2NvbmZpZy01NTgtXFx0dHJpc3RhdGUgXFxcIlRDUCBOVlxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNTcyLVxcbm5ldC9pcHY0L0tjb25maWc6NTczOmNvbmZpZyBUQ1BfQ09OR19TQ0FMQUJMRVxcbm5ldC9pcHY0L0tjb25maWctNTc0LVxcdHRyaXN0YXRlIFxcXCJTY2FsYWJsZSBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTU4MS1cXG5uZXQvaXB2NC9LY29uZmlnOjU4Mjpjb25maWcgVENQX0NPTkdfTFBcXG5uZXQvaXB2NC9LY29uZmlnLTU4My1cXHR0cmlzdGF0ZSBcXFwiVENQIExvdyBQcmlvcml0eVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNTkwLVxcbm5ldC9pcHY0L0tjb25maWc6NTkxOmNvbmZpZyBUQ1BfQ09OR19WRU5PXFxubmV0L2lwdjQvS2NvbmZpZy01OTItXFx0dHJpc3RhdGUgXFxcIlRDUCBWZW5vXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy02MDEtXFxubmV0L2lwdjQvS2NvbmZpZzo2MDI6Y29uZmlnIFRDUF9DT05HX1lFQUhcXG5uZXQvaXB2NC9LY29uZmlnLTYwMy1cXHR0cmlzdGF0ZSBcXFwiWWVBSCBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTYxNS1cXG5uZXQvaXB2NC9LY29uZmlnOjYxNjpjb25maWcgVENQX0NPTkdfSUxMSU5PSVNcXG5uZXQvaXB2NC9LY29uZmlnLTYxNy1cXHR0cmlzdGF0ZSBcXFwiVENQIElsbGlub2lzXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy02MjctXFxubmV0L2lwdjQvS2NvbmZpZzo2Mjg6Y29uZmlnIFRDUF9DT05HX0RDVENQXFxubmV0L2lwdjQvS2NvbmZpZy02MjktXFx0dHJpc3RhdGUgXFxcIkRhdGFDZW50ZXIgVENQIChEQ1RDUClcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTY0OC1cXG5uZXQvaXB2NC9LY29uZmlnOjY0OTpjb25maWcgVENQX0NPTkdfQ0RHXFxubmV0L2lwdjQvS2NvbmZpZy02NTAtXFx0dHJpc3RhdGUgXFxcIkNBSUEgRGVsYXktR3JhZGllbnQgKENERylcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTY2NS1cXG5uZXQvaXB2NC9LY29uZmlnOjY2Njpjb25maWcgVENQX0NPTkdfQkJSXFxubmV0L2lwdjQvS2NvbmZpZy02NjctXFx0dHJpc3RhdGUgXFxcIkJCUiBUQ1BcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTcyMj1lbmRpZlxcbm5ldC9pcHY0L0tjb25maWctNzIzLVxcbm5ldC9pcHY0L0tjb25maWc6NzI0OmNvbmZpZyBUQ1BfQ09OR19DVUJJQ1xcbm5ldC9pcHY0L0tjb25maWctNzI1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTcyOT1jb25maWcgREVGQVVMVF9UQ1BfQ09OR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy03NDMtXFxubmV0L2lwdjQvS2NvbmZpZzo3NDQ6Y29uZmlnIFRDUF9BT1xcbm5ldC9pcHY0L0tjb25maWctNzQ1LVxcdGJvb2wgXFxcIlRDUDogQXV0aGVudGljYXRpb24gT3B0aW9uIChSRkM1OTI1KVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNzU4LVxcbm5ldC9pcHY0L0tjb25maWc6NzU5OmNvbmZpZyBUQ1BfTUQ1U0lHXFxubmV0L2lwdjQvS2NvbmZpZy03NjAtXFx0Ym9vbCBcXFwiVENQOiBNRDUgU2lnbmF0dXJlIE9wdGlvbiBzdXBwb3J0IChSRkMyMzg1KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6MzAuMjkxNzcyMTA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MTA1ODcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGB0Y3BfZmFzdG9wZW4uY2AgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGB0Y3BfZmFzdG9wZW4uY2AsIEkgc2VlIGl0J3MgaW5jbHVkZWQgaW4gdGhlIGBvYmoteWAgbGlzdCBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgcGFydCBvZiB0aGUgY29yZSBJUHY0IG5ldHdvcmtpbmcgc3RhY2suIEFuZCB0aGUgZmFjdCB0aGF0IE1QVENQIGhhcyBhIGRlcGVuZGVuY3kgb24gSU5FVCBpcyBhbHNvIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHR3byAqcmVhbGx5KiByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZSBhcmUgYElORVRgIGFuZCBgTVBUQ1BgLiBUaG9zZSBhcmUgdGhlIHRoaW5ncyBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYXMgSSBldmFsdWF0ZSB0aGlzLlxuXG5MZXQgbWUgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgY29ycmVjdGx5LiBUaGlzIGlzIHdvcnRoIGZ1enppbmcsIHRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgYXJlIGBJTkVUYCBhbmQgYE1QVENQYCwgc28gdGhhdCBhbGlnbnMgd2l0aCBteSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdC1vbjsgYHRjcF9jb25uX3JlcXVlc3RgLCBgdGNwX3RyeV9mYXN0b3BlbmAsIGFuZCBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAgYXJlIGFsbCByaWdodCBpbiB0aGUgaGVhcnQgb2YgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBGYXN0IE9wZW4sIHdoaWNoIHRoaXMgcGF0Y2ggY2xlYXJseSBhaW1zIHRvIG1vZGlmeS5cblxuVGhlIHJlYXNvbmluZyBzZWN0aW9uIG1ha2VzIGl0IGV2ZW4gY2xlYXJlcjogdGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgcHJvY2Vzc2luZyBhbmQgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIHRvIGNvcnJlY3RseSBoYW5kbGUgTVBUQ1AgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgKGByc2tfZHJvcF9yZXFgKS4gVGhpcyBtZWFucyBpdCdzIHRvdWNoaW5nIGZ1bmRhbWVudGFsIGNvZGUgcGF0aHMgdGhhdCBoYW5kbGUgaW5jb21pbmcgU1lOIHBhY2tldHMsIGFuZCBGYXN0IE9wZW4gY29ubmVjdGlvbnMsIHNwZWNpZmljYWxseSB3aGVuIE1QVENQIGlzIGVuYWJsZWQuIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIHBvdGVudGlhbGx5IGV4cG9zZWQgdG8gdnVsbmVyYWJpbGl0aWVzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBpbmNyZWFzZWQgY29tcGxleGl0eSBvZiBNUFRDUC4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3QgYW5kIGlmIGFueSBuZXcgZWRnZSBjYXNlcyBhcmUgY3JlYXRlZC4gVGltZSB0byBydW4gYSBxdWljayBgc2V0LXJlc3VsdHNgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0NSwiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6MzQuMjAyMzY1NTU1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU2ODQ4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIk1QVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2Nvbm5fcmVxdWVzdFwiLFxuICAgIFwidGNwX3RyeV9mYXN0b3BlblwiLFxuICAgIFwidGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVENQL01QVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBoYW5kbGluZyBpbiBuZXQvaXB2NC90Y3BfaW5wdXQuYyBhbmQgVENQIEZhc3QgT3BlbiBjaGlsZCBjcmVhdGlvbiBpbiBuZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyB0byBwcm9wZXJseSBoYW5kbGUgcmVxdWVzdCBzb2NrZXQgZHJvcHBpbmcgd2hlbiBNUFRDUCBzdWJmbG93cyBhcmUgcmVqZWN0ZWQgb3IgZHJvcHBlZC4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZXhlY3V0ZWQgZHVyaW5nIFRDUCBoYW5kc2hha2UgYW5kIEZhc3QgT3BlbiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiTVBUQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfY29ubl9yZXF1ZXN0XCIsXG4gICAgXCJ0Y3BfdHJ5X2Zhc3RvcGVuXCIsXG4gICAgXCJ0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBUQ1AvTVBUQ1AgY29ubmVjdGlvbiByZXF1ZXN0IGhhbmRsaW5nIGluIG5ldC9pcHY0L3RjcF9pbnB1dC5jIGFuZCBUQ1AgRmFzdCBPcGVuIGNoaWxkIGNyZWF0aW9uIGluIG5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIHRvIHByb3Blcmx5IGhhbmRsZSByZXF1ZXN0IHNvY2tldCBkcm9wcGluZyB3aGVuIE1QVENQIHN1YmZsb3dzIGFyZSByZWplY3RlZCBvciBkcm9wcGVkLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBleGVjdXRlZCBkdXJpbmcgVENQIGhhbmRzaGFrZSBhbmQgRmFzdCBPcGVuIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6MzQuMjg4MDU4NjI5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDIyMDUzMTA4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE5OjM0LjI4ODY5NjM1OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0MjE5ODg3ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBhbmQgY2xlYW51cCBwYXRocyBmb3IgTVBUQ1AgYW5kIFRDUCBGYXN0IE9wZW4uIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZWAgZHVyaW5nIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgYW5kIGNoZWNrcyBgcnNrX2Ryb3BfcmVxKHJlcSlgIGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKClgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHNvY2sgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHdoZW4gYSByZXF1ZXN0IGlzIGRyb3BwZWQuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6IFRoZSBmaWVsZCBgZHJvcF9yZXFgIGluIGBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGB0Y3BfY29ubl9yZXF1ZXN0KClgIHdoZW4gdGhlIHJlcXVlc3Rfc29jayBpcyBjcmVhdGVkLCBlbnN1cmluZyBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcbjIuIEluZm8tbGVhayAvIFVzZXItc3BhY2UgY29weSBBbmFseXNpczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBvcHRpb24gYnVmZmVycyBtb2RpZmllZC5cXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwMmI4YTE1ZWU4YjJlNDk0ZDdmMmY4NDZhNWY4ZTg1N2Q0Mzk2NzBjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNDoxNjo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jIGIvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbmluZGV4IDQ3MWM3OGJlNTUxMzcuLjIyNDk0ZmY3NDZjNzEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uY1xuKysrIGIvbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNcbkBAIC0zMzcsNiArMzM3LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXG4gXHRpZiAoIWNoaWxkKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xuK1x0XHRiaF91bmxvY2tfc29jayhjaGlsZCk7XG4rXHRcdHNvY2tfcHV0KGNoaWxkKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRzcGluX2xvY2soXHUwMDI2cXVldWUtXHUwMDNlZmFzdG9wZW5xLmxvY2spO1xuIFx0cXVldWUtXHUwMDNlZmFzdG9wZW5xLnFsZW4rKztcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNnF1ZXVlLVx1MDAzZWZhc3RvcGVucS5sb2NrKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li5lYjBlNDI1OWMyODA3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtNzY2OSw2ICs3NjY5LDcgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXG4gXHR0Y3BfcnNrKHJlcSktXHUwMDNldHhoYXNoID0gbmV0X3R4X3JuZGhhc2goKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXG4gXHR0Y3BfcnNrKHJlcSktXHUwMDNlaXNfbXB0Y3AgPSAwO1xuK1x0dGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gZmFsc2U7XG4gI2VuZGlmXG4gXG4gXHR0Y3BfY2xlYXJfb3B0aW9ucyhcdTAwMjZ0bXBfb3B0KTtcbkBAIC03Nzc1LDYgKzc3NzYsMTAgQEAgaW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXG4gXHRcdFJFQURfT05DRShzay1cdTAwM2Vza19kYXRhX3JlYWR5KShzayk7XG4gXHRcdGJoX3VubG9ja19zb2NrKGZhc3RvcGVuX3NrKTtcbiBcdFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xuK1x0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xuK1x0XHRyZXFza19mcmVlKHJlcSk7XG4rXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4rXHRcdHJldHVybiAwO1xuIFx0fSBlbHNlIHtcbiBcdFx0dGNwX3JzayhyZXEpLVx1MDAzZXRmb19saXN0ZW5lciA9IGZhbHNlO1xuIFx0XHRpZiAoIXdhbnRfY29va2llIFx1MDAyNlx1MDAyNlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6MzQuMjg4Njk3ODY5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3NzU5MDgwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHBhdGNoOlxuXG4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IElkZW50aWZ5aW5nIGByc2tfZHJvcF9yZXFgKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIG1vdmUgd291bGQgYmUgdG8gcGlucG9pbnQgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGlzIGByc2tfZHJvcF9yZXFgLiBGaXJzdCwgYSBxdWljayBgZ3JlcGAgZm9yIHRoYXQgc3RyaW5nIHdpdGhpbiB0aGUgcGF0Y2ggaXRzZWxmLCBhbmQgdGhlbiBleHBhbmRpbmcgdGhlIHNlYXJjaCBiZXlvbmQsIGlmIG5lY2Vzc2FyeS4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvbiB3aGF0IGByc2tfZHJvcF9yZXFgICppcyouIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQncyBkZWZpbmVkLiBJcyBpdCBhIGZ1bmN0aW9uLCBhIG1hY3JvLCBhIHZhcmlhYmxlPyBBbmQganVzdCBhcyBpbXBvcnRhbnRseSwgd2hlcmUgYW5kIGhvdyBpcyBpdCAqdXNlZCogd2l0aGluIHRoZSBleGlzdGluZyBjb2RlYmFzZT8gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2UgcGF0dGVybnMgd2lsbCBnaXZlIHRoZSBtb3N0IGltbWVkaWF0ZSBjb250ZXh0LiBBbHNvLCBpdCBtYXkgYmUgdGhlIGludGVudGlvbiBvZiB0aGUgcGF0Y2ggdG8gaW50cm9kdWNlIGEgYGRyb3BfcmVxYCBhbmQgcGVyaGFwcyBgcnNrX2Ryb3BfcmVxYCBpcyBhIHJlbmFtZSBvciBhbGlhcy4gSSBzaG91bGQgaWRlbnRpZnkgaG93IGBkcm9wX3JlcWAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgZGVmaW5pdGlvbnMgYW5kIGNhbGwgc2l0ZXMgaXMgdGhlIGtleSB0byBhc3Nlc3NpbmcgaW1wYWN0IGFuZCByaXNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDgxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo0Mi4wNjQ2MTA1MTdaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjcwODU4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnNrX2Ryb3BfcmVxXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L21wdGNwLmg9MTM3PXN0YXRpYyBpbmxpbmUgYm9vbCByc2tfaXNfbXB0Y3AoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDEtXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNDI6c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaC0xNDMte1xcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0yNDU9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI0OS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjI1MDpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTI1MS17XFxuLS1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM9MTk3PXN0cnVjdCBzb2NrICp0Y3BfZ2V0X2Nvb2tpZV9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTAtXFxubmV0L2lwdjQvc3luY29va2llcy5jOjIxMTpcXHRcXHRpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC9zeW5jb29raWVzLmMtMjEyLVxcdFxcdFxcdHJlcXNrX3B1dChyZXEpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM9MzI2PXN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zMzktXFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmM6MzQwOlxcdGlmIChvd25fcmVxIFxcdTAwMjZcXHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmMtMzQxLVxcdFxcdGJoX3VubG9ja19zb2NrKGNoaWxkKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc2MjA9aW50IHRjcF9jb25uX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKnJza19vcHMsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Nzc4LVxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Nzc5OlxcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVxcdFxcdHJlcXNrX2ZyZWUocmVxKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTQzOlxcdGlmIChvd25fcmVxIFxcdTAwMjZcXHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cXHRcXHRyZXFza19xdWV1ZV9yZW1vdmVkKFxcdTAwMjZpbmV0X2NzayhyZXEtXFx1MDAzZXJza19saXN0ZW5lciktXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlLCByZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo0NC4yOTE3MDQwMTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzYyMDIxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHJvcF9yZXFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYz05ND1pbnQgYm5nZV9zZW5kX21zZyhzdHJ1Y3QgYm5nZV9hdXhyX2RldiAqYXV4cl9kZXYsIHN0cnVjdCBibmdlX2Z3X21zZyAqZndfbXNnKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDctXFx0aWYgKHJjKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9hdXhyLmM6MTA4OlxcdFxcdGdvdG8gZHJvcF9yZXE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMDktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfYXV4ci5jLTExOS1cXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYzoxMjA6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2F1eHIuYy0xMjEtXFx0Ym5nZV9od3JtX3JlcV9kcm9wKGJkLCByZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmM9MTUyMz1pbnQgYm5nZV9od3JtX3BvcnRfcXN0YXRzX2V4dChzdHJ1Y3QgYm5nZV9kZXYgKmJkLCB1OCBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE1OTctXFx0XFx0XFx0XFx0cmMgPSAtRUlOVkFMO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE1OTg6XFx0XFx0XFx0XFx0Z290byBkcm9wX3JlcTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibmdlL2JuZ2VfaHdybV9saWIuYy0xNTk5LVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jLTE2MDYtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JuZ2UvYm5nZV9od3JtX2xpYi5jOjE2MDc6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm5nZS9ibmdlX2h3cm1fbGliLmMtMTYwOC1cXHRibmdlX2h3cm1fcmVxX2Ryb3AoYmQsIHJlcV9xYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYz00Nj1zdGF0aWMgaW50IGJueHRfaHdybV90ZW1wX3F1ZXJ5KHN0cnVjdCBibnh0ICpicCwgdTggKnRlbXApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01Ny1cXHRpZiAocmMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X2h3bW9uLmM6NTg6XFx0XFx0Z290byBkcm9wX3JlcTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy01OS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF9od21vbi5jLTY5LVxcdH1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYzo3MDpkcm9wX3JlcTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfaHdtb24uYy03MS1cXHRod3JtX3JlcV9kcm9wKGJwLCByZXEpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTIzNj1pbnQgYm54dF9zZW5kX21zZyhzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtMjU0LVxcdGlmIChyYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6MjU1OlxcdFxcdGdvdG8gZHJvcF9yZXE7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI1Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy0yNjYtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzoyNjc6ZHJvcF9yZXE6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTI2OC1cXHRod3JtX3JlcV9kcm9wKGJwLCByZXEpO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYz0xMTA2PXN0YXRpYyBpbnQgZl9taWRpMl9zdGFydF9lcChzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKnVzYl9lcCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTEyMS0vKiBEcm9wIHBlbmRpbmcgcmVxdWVzdHMgKi9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjExMjI6c3RhdGljIHZvaWQgZl9taWRpMl9kcm9wX3JlcXMoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMTIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM9MTIwND1zdGF0aWMgdm9pZCBmX21pZGkyX2ZyZWVfZXAoc3RydWN0IGZfbWlkaTJfdXNiX2VwICp1c2JfZXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjA1LXtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyMDY6XFx0Zl9taWRpMl9kcm9wX3JlcXModXNiX2VwKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jLTEyMDctXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jPTEyNDA9c3RhdGljIHZvaWQgZl9taWRpMl9zdG9wX2VwcyhzdHJ1Y3QgZl9taWRpMl91c2JfZXAgKmVwX2luLFxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfbWlkaTIuYy0xMjQyLXtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9taWRpMi5jOjEyNDM6XFx0Zl9taWRpMl9kcm9wX3JlcXMoZXBfaW4pO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmM6MTI0NDpcXHRmX21pZGkyX2Ryb3BfcmVxcyhlcF9vdXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX21pZGkyLmMtMTI0NS1cXHRmX21pZGkyX2ZyZWVfZXBfcmVxcyhlcF9pbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oPTE1MD1zdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RjcC5oLTE1Ny0jaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuaW5jbHVkZS9saW51eC90Y3AuaDoxNTg6XFx0Ym9vbFxcdFxcdFxcdFxcdGRyb3BfcmVxO1xcbmluY2x1ZGUvbGludXgvdGNwLmgtMTU5LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9uZXQvbXB0Y3AuaD0xMzc9c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0MS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oOjE0MjpzdGF0aWMgaW5saW5lIGJvb2wgcnNrX2Ryb3BfcmVxKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0My17XFxuaW5jbHVkZS9uZXQvbXB0Y3AuaDoxNDQ6XFx0cmV0dXJuIHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgXFx1MDAyNlxcdTAwMjYgdGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcTtcXG5pbmNsdWRlL25ldC9tcHRjcC5oLTE0NS19XFxuLS1cXG5pbmNsdWRlL25ldC9tcHRjcC5oPTI0NT1zdGF0aWMgaW5saW5lIGJvb2wgcnNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSlcXG4tLVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjQ5LVxcbmluY2x1ZGUvbmV0L21wdGNwLmg6MjUwOnN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbmluY2x1ZGUvbmV0L21wdGNwLmgtMjUxLXtcXG4tLVxcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYz0xOTc9c3RydWN0IHNvY2sgKnRjcF9nZXRfY29va2llX3NvY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvc3luY29va2llcy5jLTIxMC1cXG5uZXQvaXB2NC9zeW5jb29raWVzLmM6MjExOlxcdFxcdGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbm5ldC9pcHY0L3N5bmNvb2tpZXMuYy0yMTItXFx0XFx0XFx0cmVxc2tfcHV0KHJlcSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYz0zMjY9c3RhdGljIHN0cnVjdCBzb2NrICp0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jLTMzOS1cXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYzozNDA6XFx0aWYgKG93bl9yZXEgXFx1MDAyNlxcdTAwMjYgcnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYy0zNDEtXFx0XFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NzE1Mj10Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyMi1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NDIzOnN0YXRpYyBpbmxpbmUgdm9pZCBwcl9kcm9wX3JlcShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIF9fdTE2IHBvcnQsIGludCBmYW1pbHkpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQyNC17XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NjIwPWludCB0Y3BfY29ubl9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpyc2tfb3BzLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzY3MS1cXHR0Y3BfcnNrKHJlcSktXFx1MDAzZWlzX21wdGNwID0gMDtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NjcyOlxcdHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NjczLSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzczMC1cXHRcXHRcXHQgKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3NzMxOlxcdFxcdFxcdHByX2Ryb3BfcmVxKHJlcSwgbnRvaHModGNwX2hkcihza2IpLVxcdTAwM2Vzb3VyY2UpLFxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc3MzItXFx0XFx0XFx0XFx0ICAgIHJza19vcHMtXFx1MDAzZWZhbWlseSk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03Nzc4LVxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo3Nzc5OlxcdH0gZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NzgwLVxcdFxcdHJlcXNrX2ZyZWUocmVxKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz02ODc9c3RydWN0IHNvY2sgKnRjcF9jaGVja19yZXEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0Mi1cXG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6OTQzOlxcdGlmIChvd25fcmVxIFxcdTAwMjZcXHUwMDI2IHJza19kcm9wX3JlcShyZXEpKSB7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTk0NC1cXHRcXHRyZXFza19xdWV1ZV9yZW1vdmVkKFxcdTAwMjZpbmV0X2NzayhyZXEtXFx1MDAzZXJza19saXN0ZW5lciktXFx1MDAzZWljc2tfYWNjZXB0X3F1ZXVlLCByZXEpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz04MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpzdWJmbG93X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy04NjItXFxubmV0L21wdGNwL3N1YmZsb3cuYzo4NjM6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xcbm5ldC9tcHRjcC9zdWJmbG93LmMtODY0LVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05NDgtXFx0XFx0XFx0U1VCRkxPV19SRVFfSU5DX1NUQVRTKHJlcSwgTVBUQ1BfTUlCX0pPSU5BQ0tSWCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5NDk6XFx0XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IHRydWU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05NTAtXFx0XFx0fVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy05NjItXFx0bXB0Y3Bfc3ViZmxvd19kcm9wX2N0eChjaGlsZCk7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo5NjM6XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IHRydWU7XFxubmV0L21wdGNwL3N1YmZsb3cuYy05NjQtXFx0aW5ldF9jc2tfcHJlcGFyZV9mb3JfZGVzdHJveV9zb2NrKGNoaWxkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6NDYuNDY3OTE2NDQ5WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwMTE5NjcxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgYW5kIE1QVENQIEtlcm5lbCBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBrZXJuZWwgc291cmNlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gVENQIGFuZCBNUFRDUCBpbXBsZW1lbnRhdGlvbnMuIEknbSB0aGlua2luZyB0aGUgYmVzdCBwbGFjZSB0byBiZWdpbiBpcyB3aXRoIGBpbmNsdWRlL2xpbnV4L3RjcC5oYCwgYXJvdW5kIGxpbmUgMTUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gdGhlIGNvcmUgVENQIGRhdGEgc3RydWN0dXJlcyBhbmQgbWF5YmUgc29tZSBrZXkgZnVuY3Rpb24gcHJvdG90eXBlcy4gQWZ0ZXIgdGhhdCwgSSdsbCBzd2l0Y2ggZ2VhcnMgYW5kIGluc3BlY3QgYGluY2x1ZGUvbmV0L21wdGNwLmhgIGFyb3VuZCBsaW5lIDEzNy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIE1QVENQLXNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIHBvc3NpYmx5IHNvbWUgY29yZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIG11bHRpcGF0aCBUQ1AgY29ubmVjdGlvbnMgdGhlcmUuXG5cblRoZW4sIEknbGwgc3dpdGNoIG92ZXIgdG8gdGhlIGltcGxlbWVudGF0aW9ucywgc28gSSBuZWVkIHRvIGNoZWNrIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEkga25vdyB0aGF0J3Mgd2hlcmUgYSBsb3Qgb2YgdGhlIGluY29taW5nIFRDUCBwYWNrZXQgcHJvY2Vzc2luZyBsb2dpYyByZXNpZGVzLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgY29yZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpbmdzIGxpa2Ugc2VnbWVudCByZWFzc2VtYmx5LCBBQ0sgcHJvY2Vzc2luZywgYW5kIGNvbmdlc3Rpb24gY29udHJvbCB0aGVyZS4gQW5kIHNpbmNlIEknbSBpbnRlcmVzdGVkIGluIFRDUCBGYXN0IE9wZW4sIEkgc2hvdWxkIGFsc28gbG9vayBhdCBgbmV0L2lwdjQvdGNwX2Zhc3RvcGVuLmNgLiBJIGV4cGVjdCB0aGVyZSdsbCBiZSB0aGUgY29kZSByZWxhdGVkIHRvIGhhbmRsaW5nIHRoZSBmYXN0IG9wZW4gY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGFuZCBkYXRhIHRyYW5zZmVyLiBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBoZWFkZXIgZmlsZXMgd2l0aCB0aGVzZSBpbXBsZW1lbnRhdGlvbiBmaWxlcyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4NywiT3V0cHV0VG9rZW5zIjo3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo0OS40Nzk4ODczODhaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdGNwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQ1OlxcdCAqIG9ubHkgZm91ciBvcHRpb25zIHdpbGwgZml0IGluIGEgc3RhbmRhcmQgVENQIGhlYWRlciAqL1xcbiAxNDY6XFx0I2RlZmluZSBUQ1BfTlVNX1NBQ0tTIDRcXG4gMTQ3OlxcdFxcbiAxNDg6XFx0c3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzO1xcbiAxNDk6XFx0XFxuIDE1MDpcXHRzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29jayB7XFxuIDE1MTpcXHRcXHRzdHJ1Y3QgaW5ldF9yZXF1ZXN0X3NvY2sgXFx0cmVxO1xcbiAxNTI6XFx0XFx0Y29uc3Qgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzICphZl9zcGVjaWZpYztcXG4gMTUzOlxcdFxcdHU2NFxcdFxcdFxcdFxcdHNudF9zeW5hY2s7IC8qIGZpcnN0IFNZTkFDSyBzZW50IHRpbWUgKi9cXG4gMTU0OlxcdFxcdGJvb2xcXHRcXHRcXHRcXHR0Zm9fbGlzdGVuZXI7XFxuIDE1NTpcXHRcXHRib29sXFx0XFx0XFx0XFx0aXNfbXB0Y3A7XFxuIDE1NjpcXHRcXHRib29sXFx0XFx0XFx0XFx0cmVxX3VzZWNfdHM7XFxuIDE1NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1ApXFxuIDE1ODpcXHRcXHRib29sXFx0XFx0XFx0XFx0ZHJvcF9yZXE7XFxuIDE1OTpcXHQjZW5kaWZcXG4gMTYwOlxcdFxcdHUzMlxcdFxcdFxcdFxcdHR4aGFzaDtcXG4gMTYxOlxcdFxcdHUzMlxcdFxcdFxcdFxcdHJjdl9pc247XFxuIDE2MjpcXHRcXHR1MzJcXHRcXHRcXHRcXHRzbnRfaXNuO1xcbiAxNjM6XFx0XFx0dTMyXFx0XFx0XFx0XFx0dHNfb2ZmO1xcbiAxNjQ6XFx0XFx0dTMyXFx0XFx0XFx0XFx0c250X3RzdmFsX2ZpcnN0O1xcbiAxNjU6XFx0XFx0dTMyXFx0XFx0XFx0XFx0c250X3RzdmFsX2xhc3Q7XFxuIDE2NjpcXHRcXHR1MzJcXHRcXHRcXHRcXHRsYXN0X29vd19hY2tfdGltZTsgLyogbGFzdCBTWU5BQ0sgKi9cXG4gMTY3OlxcdFxcdHUzMlxcdFxcdFxcdFxcdHJjdl9ueHQ7IC8qIHRoZSBhY2sgIyBieSBTWU5BQ0suIEZvclxcbiAxNjg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAqIEZhc3RPcGVuIGl0J3MgdGhlIHNlcSNcXG4gMTY5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgKiBhZnRlciBkYXRhLWluLVNZTi5cXG4gMTcwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgKi9cXG4gMTcxOlxcdFxcdHU4XFx0XFx0XFx0XFx0c3luX3RvcztcXG4gMTcyOlxcdFxcdGJvb2xcXHRcXHRcXHRcXHRhY2NlY25fb2s7XFxuIDE3MzpcXHRcXHR1OFxcdFxcdFxcdFxcdHN5bl9lY3Rfc250OiAyLFxcbiAxNzQ6XFx0XFx0XFx0XFx0XFx0XFx0c3luX2VjdF9yY3Y6IDIsXFxuIDE3NTpcXHRcXHRcXHRcXHRcXHRcXHRhY2NlY25fZmFpbF9tb2RlOjQ7XFxuIDE3NjpcXHRcXHR1OFxcdFxcdFxcdFxcdHNhd19hY2NlY25fb3B0ICA6MjtcXG4gMTc3OlxcdCNpZmRlZiBDT05GSUdfVENQX0FPXFxuIDE3ODpcXHRcXHR1OFxcdFxcdFxcdFxcdGFvX2tleWlkO1xcbiAxNzk6XFx0XFx0dThcXHRcXHRcXHRcXHRhb19yY3ZfbmV4dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6NDkuNDc5OTk5MTE4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L21wdGNwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTM1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTM1OlxcdH1cXG4gMTM2OlxcdFxcbiAxMzc6XFx0c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIDEzODpcXHR7XFxuIDEzOTpcXHRcXHRyZXR1cm4gdGNwX3JzayhyZXEpLVxcdTAwM2Vpc19tcHRjcDtcXG4gMTQwOlxcdH1cXG4gMTQxOlxcdFxcbiAxNDI6XFx0c3RhdGljIGlubGluZSBib29sIHJza19kcm9wX3JlcShjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIDE0MzpcXHR7XFxuIDE0NDpcXHRcXHRyZXR1cm4gdGNwX3JzayhyZXEpLVxcdTAwM2Vpc19tcHRjcCBcXHUwMDI2XFx1MDAyNiB0Y3BfcnNrKHJlcSktXFx1MDAzZWRyb3BfcmVxO1xcbiAxNDU6XFx0fVxcbiAxNDY6XFx0XFxuIDE0NzpcXHR2b2lkIG1wdGNwX3NwYWNlKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssIGludCAqc3BhY2UsIGludCAqZnVsbF9zcGFjZSk7XFxuIDE0ODpcXHRib29sIG1wdGNwX3N5bl9vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTQ5OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cyk7XFxuIDE1MDpcXHRib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwgdW5zaWduZWQgaW50ICpzaXplLFxcbiAxNTE6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xcbiAxNTI6XFx0aW50IG1wdGNwX2VzdGFibGlzaGVkX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAxNTM6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZywgYm9vbCBoYXNfdHMsXFxuIDE1NDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbXB0Y3Bfb3V0X29wdGlvbnMgKm9wdHMpO1xcbiAxNTU6XFx0Ym9vbCBtcHRjcF9pbmNvbWluZ19vcHRpb25zKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIDE1NjpcXHRcXG4gMTU3OlxcdHZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXFxuIDE1ODpcXHRcXHRcXHRcXHQgc3RydWN0IG1wdGNwX291dF9vcHRpb25zICpvcHRzKTtcXG4gMTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo0OS40ODAwNTk0OThaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzODczMzY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgSGVhZGVyIERlZmluaXRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgbm9uLU1QVENQIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gTVBUQ1AgaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIGBpbmNsdWRlL25ldC9tcHRjcC5oYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMjQ1LiBJIGtub3cgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlIGludGVyYWN0cyB3aXRoIHRoZSBNUFRDUCBsYXllci4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbGluZXMgdXAgd2l0aCBteSBtZW50YWwgbW9kZWwgb2YgaG93IGV2ZXJ5dGhpbmcgZml0cyB0b2dldGhlci4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODgyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1MS42MTg3OTU4NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvbXB0Y3AuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNDAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDA6XFx0c3RhdGljIGlubGluZSBib29sIHNrX2lzX21wdGNwKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4gMjQxOlxcdHtcXG4gMjQyOlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjQzOlxcdH1cXG4gMjQ0OlxcdFxcbiAyNDU6XFx0c3RhdGljIGlubGluZSBib29sIHJza19pc19tcHRjcChjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuIDI0NjpcXHR7XFxuIDI0NzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDI0ODpcXHR9XFxuIDI0OTpcXHRcXG4gMjUwOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCByc2tfZHJvcF9yZXEoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiAyNTE6XFx0e1xcbiAyNTI6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyNTM6XFx0fVxcbiAyNTQ6XFx0XFxuIDI1NTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbXB0Y3Bfc3luX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAyNTY6XFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgKnNpemUsXFxuIDI1NzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG4gMjU4OlxcdHtcXG4gMjU5OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gMjYwOlxcdH1cXG4gMjYxOlxcdFxcbiAyNjI6XFx0c3RhdGljIGlubGluZSBib29sIG1wdGNwX3N5bmFja19vcHRpb25zKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSxcXG4gMjYzOlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCAqc2l6ZSxcXG4gMjY0OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtcHRjcF9vdXRfb3B0aW9ucyAqb3B0cylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTk6NTEuNjE4ODk3ODQ5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDM3NTI3NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgRmFzdCBPcGVuIEltcGxlbWVudGF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGpvZyBteSBtZW1vcnkgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIFRDUCBGYXN0IE9wZW4gKFRGTykgYW5kIHN0YW5kYXJkIFRDUCBjb25uZWN0aW9uIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHNlZS4uLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgZGlnZ2luZyBhcm91bmQgaW4gdGhlIGBuZXQvaXB2NGAgZGlyZWN0b3J5LCBuYXR1cmFsbHkuIEkgc2VlbSB0byByZWNhbGwgc29tZSBrZXkgbG9naWMgYmVpbmcgaW4gYHRjcF9mYXN0b3Blbi5jYCwgYW5kIEkgYmVsaWV2ZSB0aGF0IGxpbmUgMzM3IGlzIGEgbGlrZWx5IGFyZWEgdG8gc3RhcnQsIG1heWJlIGxvb2tpbmcgZm9yIHRoZSBrZXkgZmFzdCBvcGVuIGxvZ2ljIGluIHRoZSBrZXJuZWwncyBoYW5kbGluZy4gVGhlbiwgSSBzaG91bGQgaGVhZCBvdmVyIHRvIGB0Y3BfaW5wdXQuY2AuIEkgbmVlZCB0byBjb21wYXJlIGhvdyBub3JtYWwgVENQIGNvbm5lY3Rpb25zIGFyZSB0cmVhdGVkIGR1cmluZyBwcm9jZXNzaW5nLCBjb21wYXJlZCB0byBob3cgVEZPIG1pZ2h0IGJlIGhhbmRsZWQuIEkgZmlndXJlIHRoYXQgbGluZSA3NjY5IGluIGB0Y3BfaW5wdXQuY2AgaXMgcHJvYmFibHkgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gdGhlcmUuIFRoZXNlIHR3byBmaWxlcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIGNvbm5lY3Rpb24gc2V0dXAgcHJvY2VzcywgYW5kIHRoZSBkaWZmZXJlbmNlcyB3aGVuIFRGTyBpcyBpbiBwbGF5LiBIb3BlZnVsbHksIHRoYXQgd2lsbCBnZXQgbWUgYmFjayB1cCB0byBzcGVlZCBxdWlja2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDI3LCJPdXRwdXRUb2tlbnMiOjc4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1NC4xMjI2NTM0MTNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9mYXN0b3Blbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHRcXHR9XFxuIDMyMTpcXHRvdXQ6XFxuIDMyMjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMzIzOlxcdFxcdHJldHVybiByZXQ7XFxuIDMyNDpcXHR9XFxuIDMyNTpcXHRcXG4gMzI2OlxcdHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZChzdHJ1Y3Qgc29jayAqc2ssXFxuIDMyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAzMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbiAzMjk6XFx0e1xcbiAzMzA6XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cDtcXG4gMzMxOlxcdFxcdHN0cnVjdCByZXF1ZXN0X3NvY2tfcXVldWUgKnF1ZXVlID0gXFx1MDAyNmluZXRfY3NrKHNrKS1cXHUwMDNlaWNza19hY2NlcHRfcXVldWU7XFxuIDMzMjpcXHRcXHRzdHJ1Y3Qgc29jayAqY2hpbGQ7XFxuIDMzMzpcXHRcXHRib29sIG93bl9yZXE7XFxuIDMzNDpcXHRcXG4gMzM1OlxcdFxcdGNoaWxkID0gaW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FmX29wcy1cXHUwMDNlc3luX3JlY3Zfc29jayhzaywgc2tiLCByZXEsIE5VTEwsXFxuIDMzNjpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgTlVMTCwgXFx1MDAyNm93bl9yZXEsIE5VTEwpO1xcbiAzMzc6XFx0XFx0aWYgKCFjaGlsZClcXG4gMzM4OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzMzk6XFx0XFxuIDM0MDpcXHRcXHRpZiAob3duX3JlcSBcXHUwMDI2XFx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkge1xcbiAzNDE6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soY2hpbGQpO1xcbiAzNDI6XFx0XFx0XFx0c29ja19wdXQoY2hpbGQpO1xcbiAzNDM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDM0NDpcXHRcXHR9XFxuIDM0NTpcXHRcXG4gMzQ2OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2cXVldWUtXFx1MDAzZWZhc3RvcGVucS5sb2NrKTtcXG4gMzQ3OlxcdFxcdHF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEucWxlbisrO1xcbiAzNDg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnF1ZXVlLVxcdTAwM2VmYXN0b3BlbnEubG9jayk7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdC8qIEluaXRpYWxpemUgdGhlIGNoaWxkIHNvY2tldC4gSGF2ZSB0byBmaXggc29tZSB2YWx1ZXMgdG8gdGFrZVxcbiAzNTE6XFx0XFx0ICogaW50byBhY2NvdW50IHRoZSBjaGlsZCBpcyBhIEZhc3QgT3BlbiBzb2NrZXQgYW5kIGlzIGNyZWF0ZWRcXG4gMzUyOlxcdFxcdCAqIG9ubHkgb3V0IG9mIHRoZSBiaXRzIGNhcnJpZWQgaW4gdGhlIFNZTiBwYWNrZXQuXFxuIDM1MzpcXHRcXHQgKi9cXG4gMzU0OlxcdFxcdHRwID0gdGNwX3NrKGNoaWxkKTtcXG4gMzU1OlxcdFxcbiAzNTY6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRwLVxcdTAwM2VmYXN0b3Blbl9yc2ssIHJlcSk7XFxuIDM1NzpcXHRcXHR0Y3BfcnNrKHJlcSktXFx1MDAzZXRmb19saXN0ZW5lciA9IHRydWU7XFxuIDM1ODpcXHRcXG4gMzU5OlxcdFxcdC8qIFJGQzEzMjM6IFRoZSB3aW5kb3cgaW4gU1lOIFxcdTAwMjYgU1lOL0FDSyBzZWdtZW50cyBpcyBuZXZlclxcbiAzNjA6XFx0XFx0ICogc2NhbGVkLiBTbyBjb3JyZWN0IGl0IGFwcHJvcHJpYXRlbHkuXFxuIDM2MTpcXHRcXHQgKi9cXG4gMzYyOlxcdFxcdHRwLVxcdTAwM2VzbmRfd25kID0gbnRvaHModGNwX2hkcihza2IpLVxcdTAwM2V3aW5kb3cpO1xcbiAzNjM6XFx0XFx0dHAtXFx1MDAzZW1heF93aW5kb3cgPSB0cC1cXHUwMDNlc25kX3duZDtcXG4gMzY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1NC4xMjI3NTc5NDNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTUxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3NjYwOlxcdFxcbjc2NjE6XFx0XFx0cmVxID0gaW5ldF9yZXFza19hbGxvYyhyc2tfb3BzLCBzaywgIXdhbnRfY29va2llKTtcXG43NjYyOlxcdFxcdGlmICghcmVxKVxcbjc2NjM6XFx0XFx0XFx0Z290byBkcm9wO1xcbjc2NjQ6XFx0XFxuNzY2NTpcXHRcXHRyZXEtXFx1MDAzZXN5bmNvb2tpZSA9IHdhbnRfY29va2llO1xcbjc2NjY6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2VhZl9zcGVjaWZpYyA9IGFmX29wcztcXG43NjY3OlxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldHNfb2ZmID0gMDtcXG43NjY4OlxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlcmVxX3VzZWNfdHMgPSBmYWxzZTtcXG43NjY5OlxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldHhoYXNoID0gbmV0X3R4X3JuZGhhc2goKTtcXG43NjcwOlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUClcXG43NjcxOlxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlaXNfbXB0Y3AgPSAwO1xcbjc2NzI6XFx0XFx0dGNwX3JzayhyZXEpLVxcdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO1xcbjc2NzM6XFx0I2VuZGlmXFxuNzY3NDpcXHRcXG43Njc1OlxcdFxcdHRjcF9jbGVhcl9vcHRpb25zKFxcdTAwMjZ0bXBfb3B0KTtcXG43Njc2OlxcdFxcdHRtcF9vcHQubXNzX2NsYW1wID0gYWZfb3BzLVxcdTAwM2Vtc3NfY2xhbXA7XFxuNzY3NzpcXHRcXHR0bXBfb3B0LnVzZXJfbXNzICA9IFJFQURfT05DRSh0cC1cXHUwMDNlcnhfb3B0LnVzZXJfbXNzKTtcXG43Njc4OlxcdFxcdHRjcF9wYXJzZV9vcHRpb25zKHNvY2tfbmV0KHNrKSwgc2tiLCBcXHUwMDI2dG1wX29wdCwgMCxcXG43Njc5OlxcdFxcdFxcdFxcdCAgd2FudF9jb29raWUgPyBOVUxMIDogXFx1MDAyNmZvYyk7XFxuNzY4MDpcXHRcXG43NjgxOlxcdFxcdGlmICh3YW50X2Nvb2tpZSBcXHUwMDI2XFx1MDAyNiAhdG1wX29wdC5zYXdfdHN0YW1wKVxcbjc2ODI6XFx0XFx0XFx0dGNwX2NsZWFyX29wdGlvbnMoXFx1MDAyNnRtcF9vcHQpO1xcbjc2ODM6XFx0XFxuNzY4NDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfU01DKSBcXHUwMDI2XFx1MDAyNiB3YW50X2Nvb2tpZSlcXG43Njg1OlxcdFxcdFxcdHRtcF9vcHQuc21jX29rID0gMDtcXG43Njg2OlxcdFxcbjc2ODc6XFx0XFx0dG1wX29wdC50c3RhbXBfb2sgPSB0bXBfb3B0LnNhd190c3RhbXA7XFxuNzY4ODpcXHRcXHR0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgXFx1MDAyNnRtcF9vcHQsIHNrYiwgc2spO1xcbjc2ODk6XFx0XFx0aW5ldF9yc2socmVxKS1cXHUwMDNlbm9fc3JjY2hlY2sgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XFxuNzY5MDpcXHRcXG43NjkxOlxcdFxcdC8qIE5vdGU6IHRjcF92Nl9pbml0X3JlcSgpIG1pZ2h0IG92ZXJyaWRlIGlyX2lpZiBmb3IgbGluayBsb2NhbHMgKi9cXG43NjkyOlxcdFxcdGluZXRfcnNrKHJlcSktXFx1MDAzZWlyX2lpZiA9IGluZXRfcmVxdWVzdF9ib3VuZF9kZXZfaWYoc2ssIHNrYik7XFxuNzY5MzpcXHRcXG43Njk0OlxcdFxcdGlmICh3YW50X2Nvb2tpZSkge1xcbjc2OTU6XFx0XFx0XFx0aXNuID0gY29va2llX2luaXRfc2VxdWVuY2UoYWZfb3BzLCBza2IsIFxcdTAwMjZyZXEtXFx1MDAzZW1zcyk7XFxuNzY5NjpcXHRcXHRcXHQvKiBVc2UgdGhlIGNvb2tpZSBhcyB0eGhhc2ggc28gdGhlIFNZTi1BQ0sgYW5kIHRoZSBsYXRlciBmdWxsXFxuNzY5NzpcXHRcXHRcXHQgKiBzb2NrZXQgbWFrZSB0aGUgc2FtZSBlZ3Jlc3MgY2hvaWNlIChJUHY2IEVDTVAgcGF0aDsgSVB2NCBUWCBxdWV1ZSkuXFxuNzY5ODpcXHRcXHRcXHQgKi9cXG43Njk5OlxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldHhoYXNoID0gaXNuO1xcbjc3MDA6XFx0XFx0fVxcbjc3MDE6XFx0XFxuNzcwMjpcXHRcXHRkc3QgPSBhZl9vcHMtXFx1MDAzZXJvdXRlX3JlcShzaywgc2tiLCBcXHUwMDI2ZmwsIHJlcSwgd2FudF9jb29raWUgPyAwIDogaXNuKTtcXG43NzAzOlxcdFxcdGlmICghZHN0KVxcbjc3MDQ6XFx0XFx0XFx0Z290byBkcm9wX2FuZF9mcmVlO1xcbjc3MDU6XFx0XFxuNzcwNjpcXHRcXHRpZiAodG1wX29wdC50c3RhbXBfb2sgfHwgKCF3YW50X2Nvb2tpZSBcXHUwMDI2XFx1MDAyNiAhaXNuKSlcXG43NzA3OlxcdFxcdFxcdHN0ID0gSU5ESVJFQ1RfQ0FMTF9JTkVUKGFmX29wcy1cXHUwMDNlaW5pdF9zZXFfYW5kX3RzX29mZixcXG43NzA4OlxcdFxcdFxcdFxcdFxcdFxcdHRjcF92Nl9pbml0X3NlcV9hbmRfdHNfb2ZmLFxcbjc3MDk6XFx0XFx0XFx0XFx0XFx0XFx0dGNwX3Y0X2luaXRfc2VxX2FuZF90c19vZmYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE5OjU0LjEyMzgyODgzM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzU4OTYxMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJIHdvdWxkIGJlIHRoaW5raW5nLCBmb2N1c2luZyBvbiBsaW5lcyA3NzY1LTc4MDAgb2YgYG5ldC9pcHY0L3RjcF9pbnB1dC5jYDpcblxuKipEaXZpbmcgaW50byB0aGUgVENQIElucHV0IEhhbmRsZXIqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRob3NlIGxpbmVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBmb2N1cyBvbiBsaW5lcyA3NzY1LTc4MDAgaW4gYG5ldC9pcHY0L3RjcF9pbnB1dC5jYC4gR2l2ZW4gdGhlIGNvbnRleHQgb2YgVENQIGlucHV0IHByb2Nlc3NpbmcsIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiB0byBiZSBoYW5kbGluZyBhIGNyaXRpY2FsIGFzcGVjdCwgbGlrZWx5IGRlYWxpbmcgd2l0aCBob3cgaW5jb21pbmcgVENQIHNlZ21lbnRzIGFyZSBwcm9jZXNzZWQgYW5kIHBvdGVudGlhbGx5IGludGVncmF0ZWQgaW50byB0aGUgY29ubmVjdGlvbidzIHN0YXRlLlxuXG5JJ20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgbG9naWMgcmVsYXRlZCB0byByZWFzc2VtYmx5LCBhY2tub3dsZWRnZW1lbnQgaGFuZGxpbmcsIHdpbmRvdyBtYW5hZ2VtZW50LCBvciBwZXJoYXBzIGV2ZW4gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSB3aXRoaW4gdGhlIHJlY2VpdmluZyBUQ1Agc3RhY2suIFRoZSBjb2RlIGhlcmUgaXMgdGhlIGhlYXJ0IG9mIHJlbGlhYmxlIGRhdGEgdHJhbnNmZXIuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGlzIGNvZGUgaXMgZG9pbmcgYW55dGhpbmcgdW51c3VhbCwgb3IgbWF5YmUgc29tZXRoaW5nIEkgaGF2ZSBiZWVuIHF1ZXN0aW9uaW5nIGluIG15IG93biBpbXBsZW1lbnRhdGlvbiBmb3IgYSB3aGlsZS4gSXMgdGhlcmUgYW55dGhpbmcgcGFydGljdWxhcmx5IGluZWZmaWNpZW50LCBvciBjbGV2ZXI/IEl0J3MgaGlnaGx5IHByb2JhYmxlIHRoZSBjb2RlIG1hbmFnZXMgYnVmZmVyIGFsbG9jYXRpb25zIHRvIG1pbmltaXplIHVubmVjZXNzYXJ5IG1lbW9yeSBjb3BpZXMsIGFuZCBtYW5hZ2VzIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGUgY2hhbGxlbmdlIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJJ2xsIGJlIGxvb2tpbmcgY2FyZWZ1bGx5IGF0IGhvdyB0aGlzIGNvZGUgc25pcHBldCB0YWNrbGVzIFRDUCdzIGluaGVyZW50IGNvbXBsZXhpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1Ni40ODI3OTUzNzZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcF9pbnB1dC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc3NjU6XFx0XFx0XFx0ZmFzdG9wZW5fc2sgPSB0Y3BfdHJ5X2Zhc3RvcGVuKHNrLCBza2IsIHJlcSwgXFx1MDAyNmZvYywgZHN0KTtcXG43NzY2OlxcdFxcdH1cXG43NzY3OlxcdFxcdGlmIChmYXN0b3Blbl9zaykge1xcbjc3Njg6XFx0XFx0XFx0YWZfb3BzLVxcdTAwM2VzZW5kX3N5bmFjayhmYXN0b3Blbl9zaywgZHN0LCBcXHUwMDI2ZmwsIHJlcSxcXG43NzY5OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zm9jLCBUQ1BfU1lOQUNLX0ZBU1RPUEVOLCBza2IpO1xcbjc3NzA6XFx0XFx0XFx0LyogQWRkIHRoZSBjaGlsZCBzb2NrZXQgZGlyZWN0bHkgaW50byB0aGUgYWNjZXB0IHF1ZXVlICovXFxuNzc3MTpcXHRcXHRcXHRpZiAoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2FkZChzaywgcmVxLCBmYXN0b3Blbl9zaykpIHtcXG43NzcyOlxcdFxcdFxcdFxcdGJoX3VubG9ja19zb2NrKGZhc3RvcGVuX3NrKTtcXG43NzczOlxcdFxcdFxcdFxcdHNvY2tfcHV0KGZhc3RvcGVuX3NrKTtcXG43Nzc0OlxcdFxcdFxcdFxcdGdvdG8gZHJvcF9hbmRfZnJlZTtcXG43Nzc1OlxcdFxcdFxcdH1cXG43Nzc2OlxcdFxcdFxcdFJFQURfT05DRShzay1cXHUwMDNlc2tfZGF0YV9yZWFkeSkoc2spO1xcbjc3Nzc6XFx0XFx0XFx0YmhfdW5sb2NrX3NvY2soZmFzdG9wZW5fc2spO1xcbjc3Nzg6XFx0XFx0XFx0c29ja19wdXQoZmFzdG9wZW5fc2spO1xcbjc3Nzk6XFx0XFx0fSBlbHNlIGlmIChyc2tfZHJvcF9yZXEocmVxKSkge1xcbjc3ODA6XFx0XFx0XFx0cmVxc2tfZnJlZShyZXEpO1xcbjc3ODE6XFx0XFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG43NzgyOlxcdFxcdFxcdHJldHVybiAwO1xcbjc3ODM6XFx0XFx0fSBlbHNlIHtcXG43Nzg0OlxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNldGZvX2xpc3RlbmVyID0gZmFsc2U7XFxuNzc4NTpcXHRcXHRcXHRpZiAoIXdhbnRfY29va2llIFxcdTAwMjZcXHUwMDI2XFxuNzc4NjpcXHRcXHRcXHQgICAgdW5saWtlbHkoIWluZXRfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKHNrLCByZXEpKSkge1xcbjc3ODc6XFx0XFx0XFx0XFx0cmVxc2tfZnJlZShyZXEpO1xcbjc3ODg6XFx0XFx0XFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG43Nzg5OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjc3OTA6XFx0XFx0XFx0fVxcbjc3OTE6XFx0XFx0XFx0YWZfb3BzLVxcdTAwM2VzZW5kX3N5bmFjayhzaywgZHN0LCBcXHUwMDI2ZmwsIHJlcSwgXFx1MDAyNmZvYyxcXG43NzkyOlxcdFxcdFxcdFxcdFxcdCAgICAhd2FudF9jb29raWUgPyBUQ1BfU1lOQUNLX05PUk1BTCA6XFxuNzc5MzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBUQ1BfU1lOQUNLX0NPT0tJRSxcXG43Nzk0OlxcdFxcdFxcdFxcdFxcdCAgICBza2IpO1xcbjc3OTU6XFx0XFx0XFx0aWYgKHdhbnRfY29va2llKSB7XFxuNzc5NjpcXHRcXHRcXHRcXHRyZXFza19mcmVlKHJlcSk7XFxuNzc5NzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG43Nzk4OlxcdFxcdFxcdH1cXG43Nzk5OlxcdFxcdH1cXG43ODAwOlxcdFxcdHJlcXNrX3B1dChyZXEpO1xcbjc4MDE6XFx0XFx0cmV0dXJuIDA7XFxuNzgwMjpcXHRcXG43ODAzOlxcdGRyb3BfYW5kX3JlbGVhc2U6XFxuNzgwNDpcXHRcXHRkc3RfcmVsZWFzZShkc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxOTo1Ni40ODMyMTg1NTZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg2MzYxMDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBDb25uZWN0aW9uIFJlcXVlc3QgRmxvdyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGNvZGUuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCBcIldoYXQgZXhhY3RseSBpcyB0aGlzIHBhdGNoIHRyeWluZyB0byBhY2NvbXBsaXNoP1wiIEknbSBzZWVpbmcgYSByZWZlcmVuY2UgdG8gYHRjcF9jb25uX3JlcXVlc3QoKWAgYW5kIHNvbWUgaW5pdGlhbGl6YXRpb24gb2YgYHRjcF9yc2socmVxKS1cdTAwM2Vkcm9wX3JlcSA9IGZhbHNlO2AuIFRoYXQgbWFrZXMgbWUgdGhpbmsgdGhpcyB2YXJpYWJsZSwgYGRyb3BfcmVxYCwgaXMgY3J1Y2lhbCB0byBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljLiBJIGFsc28gc2VlIHRoYXQgdGhlcmUncyBhIGNoZWNrLCBhbiBgZWxzZSBpZiAocnNrX2Ryb3BfcmVxKHJlcSkpIHsgLi4uIH1gLCBtZWFuaW5nIHRoZSBjb2RlIGlzIGVpdGhlciBhY2NlcHRpbmcgb3IgZHJvcHBpbmcgYSByZXF1ZXN0IGJhc2VkIG9uIHRoYXQgZmxhZy4gU2VlbXMgcHJldHR5IGZ1bmRhbWVudGFsLlxuXG5UaGVuIEkgbW92ZWQgb250byBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAuIEhlcmUsIHRoZSBgZHJvcF9yZXFgIGNoZWNrIHJlYXBwZWFyczogYGlmIChvd25fcmVxIFx1MDAyNlx1MDAyNiByc2tfZHJvcF9yZXEocmVxKSkgeyAuLi4gfWAuIEl0J3MgdXNlZCB0byBiYWlsIG91dCBvZiBjcmVhdGluZyBhIGNoaWxkIHNvY2tldCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoZSBgb3duX3JlcWAgY29uZGl0aW9uIGxpa2VseSBpcyByZWxhdGVkIHRvIEZhc3QgT3BlbiBvciBhIHNpbWlsYXIgTVBUQ1AgY29udGV4dCwgYW5kIHN1Z2dlc3RzIHRoYXQgYGRyb3BfcmVxYCBpcyB0aGUgZmluYWwgZGV0ZXJtaW5hbnQgZm9yIHdoZXRoZXIgYSBjaGlsZCBzb2NrZXQgaXMgYWxsb2NhdGVkLlxuXG5UaGlzIGlzIGEgZ29vZCBwb2ludCB0byBwYXVzZSBhbmQgaW52ZXN0aWdhdGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdGF0ZXMgc3Vycm91bmRpbmcgYGRyb3BfcmVxYC4gUmlnaHQgbm93LCBJIHNlZSBpdCdzIGluaXRpYWxpemVkIHRvIGZhbHNlLiBUaGUgY29uZGl0aW9uYWwgY2hlY2tzIEkgc2VlLCBzdWdnZXN0IGl0IGdldHMgc2V0IHRvIHRydWUsIGF0IHNvbWUgcG9pbnQsIGFuZCB0aGVuIHRoZSByZXF1ZXN0IGlzIGRyb3BwZWQuIFRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLCBJIG5lZWQgdG8ga25vdyB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhpcyBmbGFnIGlzIHNldCB0byB0cnVlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBzZWFyY2ggZm9yIGl0cyB1c2FnZSwgaW4gdGhlIGNvZGUgYmFzZS4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGByc2tfZHJvcF9yZXEoKWAgZ2V0cyBzZXQgYW5kIHdoeS4gR2l2ZW4gdGhlIE1QVENQIGNvbm5lY3Rpb24gY29udGV4dCwgSSB3aWxsIGdyZXAgdGhlIG1wdGNwIGRpcmVjdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNzMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyMDowMC4zNDY4MzQyNjdaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tcHRjcC9zdWJmbG93LmNcIixcbiAgXCJGaXJzdExpbmVcIjogODU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODU1OlxcdFxcbiA4NTY6XFx0Y3JlYXRlX2NoaWxkOlxcbiA4NTc6XFx0XFx0Y2hpbGQgPSBsaXN0ZW5lci1cXHUwMDNlaWNza19hZl9vcHMtXFx1MDAzZXN5bl9yZWN2X3NvY2soc2ssIHNrYiwgcmVxLCBkc3QsXFxuIDg1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHJlcV91bmhhc2gsIG93bl9yZXEsIG9wdF9jaGlsZF9pbml0KTtcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0aWYgKGNoaWxkIFxcdTAwMjZcXHUwMDI2ICpvd25fcmVxKSB7XFxuIDg2MTpcXHRcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19jb250ZXh0ICpjdHggPSBtcHRjcF9zdWJmbG93X2N0eChjaGlsZCk7XFxuIDg2MjpcXHRcXG4gODYzOlxcdFxcdFxcdHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZTtcXG4gODY0OlxcdFxcbiA4NjU6XFx0XFx0XFx0Lyogd2UgbmVlZCB0byBmYWxsYmFjayBvbiBjdHggYWxsb2NhdGlvbiBmYWlsdXJlIGFuZCBvbiBwcmUtcmVxc1xcbiA4NjY6XFx0XFx0XFx0ICogY2hlY2tpbmcgYWJvdmUuIEluIHRoZSBsYXR0ZXIgc2NlbmFyaW8gd2UgYWRkaXRpb25hbGx5IG5lZWRcXG4gODY3OlxcdFxcdFxcdCAqIHRvIHJlc2V0IHRoZSBjb250ZXh0IHRvIG5vbiBNUFRDUCBzdGF0dXMuXFxuIDg2ODpcXHRcXHRcXHQgKi9cXG4gODY5OlxcdFxcdFxcdGlmICghY3R4IHx8IGZhbGxiYWNrKSB7XFxuIDg3MDpcXHRcXHRcXHRcXHRpZiAoZmFsbGJhY2tfaXNfZmF0YWwpIHtcXG4gODcxOlxcdFxcdFxcdFxcdFxcdGlmICghY3R4KVxcbiA4NzI6XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSxcXG4gODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdE1QVENQX01JQl9NUEpPSU5BQ0tOT0NUWCk7XFxuIDg3NDpcXHRcXHRcXHRcXHRcXHRlbHNlXFxuIDg3NTpcXHRcXHRcXHRcXHRcXHRcXHRNUFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLFxcbiA4NzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TVBUQ1BfTUlCX01QSk9JTkFDS05PTVBKT0lOKTtcXG4gODc3OlxcdFxcdFxcdFxcdFxcdHN1YmZsb3dfYWRkX3Jlc2V0X3JlYXNvbihza2IsIE1QVENQX1JTVF9FTVBUQ1ApO1xcbiA4Nzg6XFx0XFx0XFx0XFx0XFx0Z290byBkaXNwb3NlX2NoaWxkO1xcbiA4Nzk6XFx0XFx0XFx0XFx0fVxcbiA4ODA6XFx0XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gODgxOlxcdFxcdFxcdH1cXG4gODgyOlxcdFxcbiA4ODM6XFx0XFx0XFx0Lyogc3NrIGluaGVyaXRzIG9wdGlvbnMgb2YgbGlzdGVuZXIgc2sgKi9cXG4gODg0OlxcdFxcdFxcdGN0eC1cXHUwMDNlc2V0c29ja29wdF9zZXEgPSBsaXN0ZW5lci1cXHUwMDNlc2V0c29ja29wdF9zZXE7XFxuIDg4NTpcXHRcXG4gODg2OlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZW1wX2NhcGFibGUpIHtcXG4gODg3OlxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlY29ubiA9IG1wdGNwX3NrX2Nsb25lX2luaXQobGlzdGVuZXItXFx1MDAzZWNvbm4sIFxcdTAwMjZtcF9vcHQsIGNoaWxkLCByZXEpO1xcbiA4ODg6XFx0XFx0XFx0XFx0aWYgKCFjdHgtXFx1MDAzZWNvbm4pXFxuIDg4OTpcXHRcXHRcXHRcXHRcXHRnb3RvIGZhbGxiYWNrO1xcbiA4OTA6XFx0XFxuIDg5MTpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXN1YmZsb3dfaWQgPSAxO1xcbiA4OTI6XFx0XFx0XFx0XFx0b3duZXIgPSBtcHRjcF9zayhjdHgtXFx1MDAzZWNvbm4pO1xcbiA4OTM6XFx0XFxuIDg5NDpcXHRcXHRcXHRcXHRpZiAobXBfb3B0LmRlbnlfam9pbl9pZDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjIwOjAwLjM0Njk5NjgyN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MTYxNTU4NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIFJlYXNvbmluZzogRGV0ZXJtaW5pbmcgdGhlIE5lZWQgZm9yIGEgRnV6emluZyBTZXNzaW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIGNvbmNlcm4gaGVyZSBpcyBtYWtpbmcgc3VyZSB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gaG93IE1QVENQIGhhbmRsZXMgRmFzdCBPcGVuIGFuZCBjb25uZWN0aW9uIHJlcXVlc3RzLCBzcGVjaWZpY2FsbHkgd2hlbiBhIHN1YmZsb3cgZmFpbHMgZHVyaW5nIHRoZSBqb2luIHByb2Nlc3MuICBJdCBhcHBlYXJzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBgZHJvcF9yZXFgIGZsYWcgd2l0aGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkYCBhbmQgYHRjcF9jb25uX3JlcXVlc3RgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGxvZ2ljLiBXaGVuIGB0Y3BfdHJ5X2Zhc3RvcGVuYCBjYWxscyBgdGNwX2Zhc3RvcGVuX2NyZWF0ZV9jaGlsZGAsIGBzdWJmbG93X3N5bl9yZWN2X3NvY2tgIG1pZ2h0IGJlIGNhbGxlZC4gSWYgYW4gTVBUQ1Agam9pbiBmYWlscywgYHN1YmZsb3dfc3luX3JlY3Zfc29ja2Agc2V0cyBgdGNwX3JzayhyZXEpLVx1MDAzZWRyb3BfcmVxID0gdHJ1ZWAuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNpdHVhdGlvbnMgd2hlcmUgdGhpcyBgZHJvcF9yZXFgIHdhc24ndCBwcm9wZXJseSBjaGVja2VkIGJlZm9yZSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBkYW5nbGluZyBzb2NrZXRzIG9yIG1lbW9yeSBsZWFrcy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIG9uIHRoZSBtZW1vcnkgc2FmZXR5OiBGaXJzdCwgYGRyb3BfcmVxYCBpcyBhIGJvb2xlYW4gd2l0aGluIGBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja2AuIEl0J3MgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGB0Y3BfY29ubl9yZXF1ZXN0YCB3aGVuIHRoZSByZXF1ZXN0IHNvY2sgKGByZXFgKSBpcyBhbGxvY2F0ZWQuIEkgY29uZmlybWVkIHRoaXMuIFRoZSBgaW5ldF9yZXFza19hbGxvY2AgdXNlcyBlaXRoZXIgYGttZW1fY2FjaGVfYWxsb2NgIG9yIGByZXFza19hbGxvY2Agd2hpY2ggYWxsb2NhdGVzIGEgYHJlcXVlc3Rfc29ja2AuIEkgYWxzbyB2ZXJpZmllZCB2aWEgdGhlIGBtcHRjcC5oYCBjb2RlIHRoYXQgZXZlbiB3aXRoIGBDT05GSUdfTVBUQ1BgIGVuYWJsZWQsIGl0J3Mgc2V0IHRvIGBmYWxzZWAsIGFuZCBkaXNhYmxlZCwgaXQgcmV0dXJucyBmYWxzZS5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgcGF0Y2ggdG91Y2hlcyBhbnkgdXNlci1zcGFjZSBjb3BpZXMuIE5vcGUsIG5vIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBzb2Nrb3B0cywgb3IgYW55dGhpbmcgbGlrZSB0aGF0LiAgVGhpcyBlbGltaW5hdGVzIHRoZSBpbW1lZGlhdGUgcmlzayBvZiBsZWFraW5nIGtlcm5lbC1zcGFjZSBkYXRhLlxuXG5Eb2VzIGl0IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBhbnN3ZXIgaXMgbm8uIFRoZSBpbml0aWFsaXphdGlvbiBvZiBgZHJvcF9yZXFgIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgcHJldmVudCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXG5cblNvLCB3aGF0IGRvZXMgdGhlIHBhdGNoICpkbyo/IEl0IGVuc3VyZXMgY29ycmVjdCBjbGVhbnVwLiBTcGVjaWZpY2FsbHksIGl0IGhhbmRsZXMgdGhlIGRyb3BwaW5nIG9mIGByZXF1ZXN0X3NvY2tgIGFuZCBjaGlsZCBzb2NrZXRzIGluIE1QVENQIEZhc3RPcGVuIC8gY29ubmVjdGlvbiByZXF1ZXN0cyB3aGVuIHRoZSBgcnNrX2Ryb3BfcmVxYCBmbGFnIGlzIHRydWUsIGVuc3VyaW5nIHByb3BlciBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGF2b2lkaW5nIGxlYWtzLiBUaGVzZSBraW5kcyBvZiBidWdzIHdvdWxkIHR5cGljYWxseSBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBkb3VibGUtZnJlZSwgaXNzdWVzIGFscmVhZHkgZmxhZ2dlZCBieSBLQVNBTi9TTFVCIGRlYnVnL3JlZmNvdW50L3N0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMsIHdoaWNoIGFyZSBub3QgS01TQU4ncyBzcGVjaWFsdHkuXG5cbk5vdyB0aGUga2V5IGRpc3RpbmN0aW9uIGlzOiBLQVNBTiBoZWxwcyBjYXRjaCBtZW1vcnkgc2FmZXR5IGlzc3VlcyAob3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBldGMuKSB3aGlsZSBLTVNBTiBoYW5kbGVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIChoZWFwLCBzdGFjaywgcGFnZSkgYW5kIHVuaW5pdGlhbGl6ZWQgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZS4gR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGZvY3VzZXMgb24gc29ja2V0IGxpZmVjeWNsZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIGl0IGxlYW5zIG1vcmUgdG93YXJkcyBtZW1vcnkgc2FmZXR5LCB3aGljaCBLQVNBTiBjYW4gaGFuZGxlLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHNvbGlkOiBUaGlzIHBhdGNoIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZXMgYGRyb3BfcmVxID0gZmFsc2VgIGR1cmluZyBhbGxvY2F0aW9uIGFuZCBkb2Vzbid0IHRvdWNoIHVzZXItc3BhY2UgY29waWVzLiBLQVNBTi9yZWZjb3VudCB0cmFja2luZyBjb3ZlcnMgdGhlIHBvdGVudGlhbCByaXNrcyBvZiB1c2UtYWZ0ZXItZnJlZSBvciBsZWFrcyByZWxhdGVkIHRvIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudC4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1OTMsIk91dHB1dFRva2VucyI6MjYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MjA6MDguNTA4NTU4ODA1WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBhbmQgY2xlYW51cCBwYXRocyBmb3IgTVBUQ1AgYW5kIFRDUCBGYXN0IE9wZW4uIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZWAgZHVyaW5nIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgYW5kIGNoZWNrcyBgcnNrX2Ryb3BfcmVxKHJlcSlgIGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKClgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHNvY2sgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHdoZW4gYSByZXF1ZXN0IGlzIGRyb3BwZWQuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6IFRoZSBmaWVsZCBgZHJvcF9yZXFgIGluIGBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGB0Y3BfY29ubl9yZXF1ZXN0KClgIHdoZW4gdGhlIHJlcXVlc3Rfc29jayBpcyBjcmVhdGVkLCBlbnN1cmluZyBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcbjIuIEluZm8tbGVhayAvIFVzZXItc3BhY2UgY29weSBBbmFseXNpczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBvcHRpb24gYnVmZmVycyBtb2RpZmllZC5cXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBhbmQgY2xlYW51cCBwYXRocyBmb3IgTVBUQ1AgYW5kIFRDUCBGYXN0IE9wZW4uIFNwZWNpZmljYWxseSwgaXQgaW5pdGlhbGl6ZXMgYHRjcF9yc2socmVxKS1cXHUwMDNlZHJvcF9yZXEgPSBmYWxzZWAgZHVyaW5nIFRDUCBjb25uZWN0aW9uIHJlcXVlc3QgaGFuZGxpbmcgYW5kIGNoZWNrcyBgcnNrX2Ryb3BfcmVxKHJlcSlgIGluIGB0Y3BfZmFzdG9wZW5fY3JlYXRlX2NoaWxkKClgIGFuZCBgdGNwX2Nvbm5fcmVxdWVzdCgpYCB0byByZWxlYXNlIHRoZSByZXF1ZXN0IHNvY2sgYW5kIGFzc29jaWF0ZWQgcmVzb3VyY2VzIHdoZW4gYSByZXF1ZXN0IGlzIGRyb3BwZWQuXFxuXFxuMS4gVW5pbml0aWFsaXplZCBNZW1vcnkgQW5hbHlzaXM6IFRoZSBmaWVsZCBgZHJvcF9yZXFgIGluIGBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja2AgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB0byBgZmFsc2VgIGluIGB0Y3BfY29ubl9yZXF1ZXN0KClgIHdoZW4gdGhlIHJlcXVlc3Rfc29jayBpcyBjcmVhdGVkLCBlbnN1cmluZyBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxcbjIuIEluZm8tbGVhayAvIFVzZXItc3BhY2UgY29weSBBbmFseXNpczogTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGFyZSBhbnkgbmV0bGluaywgaW9jdGwsIG9yIHNvY2tldCBvcHRpb24gYnVmZmVycyBtb2RpZmllZC5cXG4zLiBLQVNBTiB2cyBLTVNBTiBBcHBsaWNhYmlsaXR5OiBUaGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2ggaW52b2x2ZSBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLCBzdGF0ZSBtYW5hZ2VtZW50LCBhbmQgbWVtb3J5IGZyZWVpbmcgKHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciBtZW1vcnkgbGVha3MpLCB3aGljaCBhcmUgdGhvcm91Z2hseSBtb25pdG9yZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIGtlcm5lbCByZWZlcmVuY2UgY291bnRlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfznpc[1] Phase: Succeeded StartedAt: 2026-09-04 14:20:19 +0000 UTC FinishedAt: 2026-09-04 14:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 14:20:19 +0000 UTC FinishedAt: 2026-09-04 14:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2] Phase: Succeeded StartedAt: 2026-09-04 14:20:19 +0000 UTC FinishedAt: 2026-09-04 17:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 14:20:19 +0000 UTC FinishedAt: 2026-09-04 17:58:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 14:20:19 +0000 UTC FinishedAt: 2026-09-04 14:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 14:20:19 +0000 UTC FinishedAt: 2026-09-04 14:20:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowfznpc/series-workflowfznpc-convert-artifact-1155332905/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 14:20:29 +0000 UTC FinishedAt: 2026-09-04 14:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 14:20:29 +0000 UTC FinishedAt: 2026-09-04 14:37:05 +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:*367f4f9a-74f9-474d-8431-86ce115f3d87,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-workflowfznpc/series-workflowfznpc-convert-artifact-1155332905/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": "09a96364-bf40-4364-b40b-3f549b086ed3", "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-workflowfznpc/series-workflowfznpc-build-action-1037263751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 14:20:29 +0000 UTC FinishedAt: 2026-09-04 14:36:55 +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:*367f4f9a-74f9-474d-8431-86ce115f3d87,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-workflowfznpc/series-workflowfznpc-convert-artifact-1155332905/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": "09a96364-bf40-4364-b40b-3f549b086ed3", "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-workflowfznpc/series-workflowfznpc-build-action-1037263751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 14:37:05 +0000 UTC FinishedAt: 2026-09-04 14:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 14:37:05 +0000 UTC FinishedAt: 2026-09-04 14:37:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 14:37:05 +0000 UTC FinishedAt: 2026-09-04 14:37:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 14:37:05 +0000 UTC FinishedAt: 2026-09-04 14:37:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowfznpc/series-workflowfznpc-convert-artifact-2440169660/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 14:37:15 +0000 UTC FinishedAt: 2026-09-04 14:39:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 14:37:15 +0000 UTC FinishedAt: 2026-09-04 14:39:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*09a96364-bf40-4364-b40b-3f549b086ed3,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-workflowfznpc/series-workflowfznpc-build-action-1037263751/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-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 14:39:14 +0000 UTC FinishedAt: 2026-09-04 14:39:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 14:39:14 +0000 UTC FinishedAt: 2026-09-04 14:39:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 14:39:14 +0000 UTC FinishedAt: 2026-09-04 14:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 14:39:14 +0000 UTC FinishedAt: 2026-09-04 14:55:08 +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:*367f4f9a-74f9-474d-8431-86ce115f3d87,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-workflowfznpc/series-workflowfznpc-convert-artifact-2440169660/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": "62f4f2f5-ff41-4e15-96b2-ea6fe97c8a73", "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-workflowfznpc/series-workflowfznpc-build-action-1634063128/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 14:39:14 +0000 UTC FinishedAt: 2026-09-04 14:54:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*367f4f9a-74f9-474d-8431-86ce115f3d87,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-workflowfznpc/series-workflowfznpc-convert-artifact-2440169660/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": "62f4f2f5-ff41-4e15-96b2-ea6fe97c8a73", "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-workflowfznpc/series-workflowfznpc-build-action-1634063128/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 14:55:08 +0000 UTC FinishedAt: 2026-09-04 14:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 14:55:08 +0000 UTC FinishedAt: 2026-09-04 14:55:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 14:55:08 +0000 UTC FinishedAt: 2026-09-04 14:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 14:55:08 +0000 UTC FinishedAt: 2026-09-04 14:56:56 +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:*62f4f2f5-ff41-4e15-96b2-ea6fe97c8a73,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-workflowfznpc/series-workflowfznpc-build-action-1634063128/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-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 14:57:06 +0000 UTC FinishedAt: 2026-09-04 17:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 14:57:06 +0000 UTC FinishedAt: 2026-09-04 17:58:26 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"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:*09a96364-bf40-4364-b40b-3f549b086ed3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*62f4f2f5-ff41-4e15-96b2-ea6fe97c8a73,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-workflowfznpc/series-workflowfznpc-build-action-1037263751/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-workflowfznpc/series-workflowfznpc-build-action-1634063128/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 14:57:06 +0000 UTC FinishedAt: 2026-09-04 14:57:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 14:57:06 +0000 UTC FinishedAt: 2026-09-04 14:57:10 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"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-workflowfznpc/series-workflowfznpc-convert-artifact-964797317/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 14:57:06 +0000 UTC FinishedAt: 2026-09-04 14:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 14:57:06 +0000 UTC FinishedAt: 2026-09-04 14:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 14:57:06 +0000 UTC FinishedAt: 2026-09-04 14:57:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 14:57:16 +0000 UTC FinishedAt: 2026-09-04 17:58:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfznpc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcp_conn_request","tcp_try_fastopen","tcp_fastopen_create_child"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","MPTCP"],"series_id":"017125fd-4f6b-4f87-a5c9-3eaded6f96c4","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 14:57:16 +0000 UTC FinishedAt: 2026-09-04 17:58:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*09a96364-bf40-4364-b40b-3f549b086ed3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*62f4f2f5-ff41-4e15-96b2-ea6fe97c8a73,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-workflowfznpc/series-workflowfznpc-build-action-1037263751/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-workflowfznpc/series-workflowfznpc-build-action-1634063128/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-workflowfznpc/series-workflowfznpc-convert-artifact-964797317/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,}