Name: series-workflowwdm9s Phase: Failed StartedAt: 2026-09-05 11:33:02 +0000 UTC FinishedAt: 2026-09-05 11:50:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdm9s[0] Phase: Succeeded StartedAt: 2026-09-05 11:33:02 +0000 UTC FinishedAt: 2026-09-05 11:50:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdm9s[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 11:33:02 +0000 UTC FinishedAt: 2026-09-05 11:50:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBraG9fcmVzZXJ2ZV9zY3JhdGNoKCksIGFuIF9faW5pdCBmdW5jdGlvbiBpbiBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIHRoYXQgZXhlY3V0ZXMgZXhjbHVzaXZlbHkgZHVyaW5nIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uICh2aWEgbW1fY29yZV9pbml0KSBhbmQgaXMgZnJlZWQgYmVmb3JlIHVzZXJzcGFjZSBleGVjdXRpb24uIEJlY2F1c2UgdGhpcyBjb2RlIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYXQgcnVudGltZSBieSBzeXNjYWxscywgaW9jdGxzLCBvciB1c2VyLXNwYWNlIGludGVyZmFjZXMsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB0byB0aGUgZnV6emVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhkMTAzZjc1NWViMjhlOTAzZWRjZDkyMWRjYWQzMDllNzdmZTgwNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDExOjQ5OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCA3YzRkODZkYWY4NmQ1Li4zOWY0ODlhMjU4ZDkwIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTg0Nyw2ICYjNDM7ODQ3LDE3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gXHRcdGdvdG8gZXJyX2Rpc2FibGVfa2hvO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsY3VsYXRlIHRoZSBwZXItbm9kZSBzaXplcyBiZWZvcmUgcmVzZXJ2aW5nIGFueSBzY3JhdGNoIGFyZWFzLlxuJiM0MztcdCAqIG1lbWJsb2NrIGFsbG9jYXRpb25zIGFyZSBtYXJrZWQgTUVNQkxPQ0tfUlNSVl9LRVJOLCBzbyBjYWxjdWxhdGluZ1xuJiM0MztcdCAqIHRoZW0gbGF0ZXIgd291bGQgY291bnQgdGhlIGxvd21lbSBhbmQgZ2xvYmFsIHNjcmF0Y2ggYXJlYXMgYXMga2VybmVsXG4mIzQzO1x0ICogYWxsb2NhdGlvbnMgYW5kIHNjYWxlIHRoZW0gYWdhaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0aSA9IDI7XG4mIzQzO1x0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxuJiM0MztcdFx0a2hvX3NjcmF0Y2hbaSYjNDM7JiM0MztdLnNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuJiM0MztcdGkgPSAwO1xuJiM0MztcbiBcdC8qXG4gXHQgKiByZXNlcnZlIHNjcmF0Y2ggYXJlYSBpbiBsb3cgbWVtb3J5IGZvciBsb3dtZW0gYWxsb2NhdGlvbnMgaW4gdGhlXG4gXHQgKiBuZXh0IGtlcm5lbFxuQEAgLTg4MCw3ICYjNDM7ODkxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS5cbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG4tXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuJiM0MztcdFx0c2l6ZSA9IGtob19zY3JhdGNoW2ldLnNpemU7XG4gXHRcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsXG4gXHRcdFx0XHRcdFx0MCwgTUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRSxcbiBcdFx0XHRcdFx0XHRuaWQsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMga2hvX3Jlc2VydmVfc2NyYXRjaCgpLCBhbiBfX2luaXQgZnVuY3Rpb24gaW4ga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyB0aGF0IGV4ZWN1dGVzIGV4Y2x1c2l2ZWx5IGR1cmluZyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiAodmlhIG1tX2NvcmVfaW5pdCkgYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgZXhlY3V0aW9uLiBCZWNhdXNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUgYnkgc3lzY2FsbHMsIGlvY3Rscywgb3IgdXNlci1zcGFjZSBpbnRlcmZhY2VzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgdG8gdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZDEwM2Y3NTVlYjI4ZTkwM2VkY2Q5MjFkY2FkMzA5ZTc3ZmU4MDQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxMTo0OToyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCmluZGV4IDdjNGQ4NmRhZjg2ZDUuLjM5ZjQ4OWEyNThkOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwpAQCAtODQ3LDYgJiM0Mzs4NDcsMTcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZCkKIAkJZ290byBlcnJfZGlzYWJsZV9raG87CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIENhbGN1bGF0ZSB0aGUgcGVyLW5vZGUgc2l6ZXMgYmVmb3JlIHJlc2VydmluZyBhbnkgc2NyYXRjaCBhcmVhcy4KJiM0MzsJICogbWVtYmxvY2sgYWxsb2NhdGlvbnMgYXJlIG1hcmtlZCBNRU1CTE9DS19SU1JWX0tFUk4sIHNvIGNhbGN1bGF0aW5nCiYjNDM7CSAqIHRoZW0gbGF0ZXIgd291bGQgY291bnQgdGhlIGxvd21lbSBhbmQgZ2xvYmFsIHNjcmF0Y2ggYXJlYXMgYXMga2VybmVsCiYjNDM7CSAqIGFsbG9jYXRpb25zIGFuZCBzY2FsZSB0aGVtIGFnYWluLgomIzQzOwkgKi8KJiM0MzsJaSA9IDI7CiYjNDM7CWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkKJiM0MzsJCWtob19zY3JhdGNoW2kmIzQzOyYjNDM7XS5zaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTsKJiM0MzsJaSA9IDA7CiYjNDM7CiAJLyoKIAkgKiByZXNlcnZlIHNjcmF0Y2ggYXJlYSBpbiBsb3cgbWVtb3J5IGZvciBsb3dtZW0gYWxsb2NhdGlvbnMgaW4gdGhlCiAJICogbmV4dCBrZXJuZWwKQEAgLTg4MCw3ICYjNDM7ODkxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZCkKIAkgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIHNjcmF0Y2ggYXJlYXMgdGhlcmUuCiAJICovCiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7Ci0JCXNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpOwomIzQzOwkJc2l6ZSA9IGtob19zY3JhdGNoW2ldLnNpemU7CiAJCWFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsCiAJCQkJCQkwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLAogCQkJCQkJbmlkLCB0cnVlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGtleGVjX2hhbmRvdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byB0aG9yb3VnaGx5IGFuYWx5emUgdGhpcyBwYXRjaC4gSSYjMzk7bSBzdGFydGluZyBieSB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZTogd2hhdCBmaWxlIHdhcyBtb2RpZmllZD8gQWgsIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gT2theSwgbm93IHdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBhcmVhcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAgZnVuY3Rpb24uIEkgaGF2ZSB0byBpbW1lZGlhdGVseSBncmFzcCBpdHMgY29udGV4dCDigJMgaG93IGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZ292ZXJuIGl0cyBleGVjdXRpb24sIGFuZCBjcnVjaWFsbHksIHdoZXRoZXIgaXQmIzM5O3MgYW4gZWFybHktYm9vdCwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGBfX2luaXRgKSwgb3IgaWYgaXQmIzM5O3MgcnVudGltZSBjb2RlLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzLgoKTGV0JiMzOTtzIGdldCB0aGUgc3BlY2lmaWMgY29kZS4gR2l2ZSBtZSBsaW5lIDg0NyBvZiBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIEkgbmVlZCB0aGUgY29kZSBjb250ZXh0IHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODIwOlx0fVxuIDgyMTpcdFxuIDgyMjpcdC8qKlxuIDgyMzpcdCAqIGtob19yZXNlcnZlX3NjcmF0Y2ggLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjXG4gODI0Olx0ICpcbiA4MjU6XHQgKiBXaXRoIEtITyB3ZSBjYW4gcHJlc2VydmUgYXJiaXRyYXJ5IHBhZ2VzIGluIHRoZSBzeXN0ZW0uIFRvIGVuc3VyZSB3ZSBzdGlsbFxuIDgyNjpcdCAqIGhhdmUgYSBsYXJnZSBjb250aWd1b3VzIHJlZ2lvbiBvZiBtZW1vcnkgd2hlbiB3ZSBzZWFyY2ggdGhlIHBoeXNpY2FsIGFkZHJlc3NcbiA4Mjc6XHQgKiBzcGFjZSBmb3IgdGFyZ2V0IG1lbW9yeSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBhbHdheXMgaGF2ZSBhIGxhcmdlIENNQSByZWdpb25cbiA4Mjg6XHQgKiBhY3RpdmUuIFRoaXMgQ01BIHJlZ2lvbiB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgbW92YWJsZSBwYWdlcyB3aGljaCBhcmUgbm90IGFcbiA4Mjk6XHQgKiBwcm9ibGVtIGZvciB1cyBkdXJpbmcgS0hPIGJlY2F1c2Ugd2UgY2FuIGp1c3QgbW92ZSB0aGVtIHNvbWV3aGVyZSBlbHNlLlxuIDgzMDpcdCAqL1xuIDgzMTpcdHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gODMyOlx0e1xuIDgzMzpcdFx0cGh5c19hZGRyX3QgYWRkciwgc2l6ZTtcbiA4MzQ6XHRcdGludCBuaWQsIGkgPSAwO1xuIDgzNTpcdFxuIDgzNjpcdFx0aWYgKCFraG9fZW5hYmxlKVxuIDgzNzpcdFx0XHRyZXR1cm47XG4gODM4Olx0XG4gODM5Olx0XHRzY3JhdGNoX3NpemVfdXBkYXRlKCk7XG4gODQwOlx0XG4gODQxOlx0XHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXG4gODQyOlx0XHRraG9fc2NyYXRjaF9jbnQgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKSAmIzQzOyAyO1xuIDg0MzpcdFx0c2l6ZSA9IGtob19zY3JhdGNoX2NudCAqIHNpemVvZigqa2hvX3NjcmF0Y2gpO1xuIDg0NDpcdFx0a2hvX3NjcmF0Y2ggPSBtZW1ibG9ja19hbGxvYyhzaXplLCBQQUdFX1NJWkUpO1xuIDg0NTpcdFx0aWYgKCFraG9fc2NyYXRjaCkge1xuIDg0NjpcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxcblwmIzM0Oyk7XG4gODQ3Olx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfa2hvO1xuIDg0ODpcdFx0fVxuIDg0OTpcdFxuIDg1MDpcdFx0LypcbiA4NTE6XHRcdCAqIENhbGN1bGF0ZSB0aGUgcGVyLW5vZGUgc2l6ZXMgYmVmb3JlIHJlc2VydmluZyBhbnkgc2NyYXRjaCBhcmVhcy5cbiA4NTI6XHRcdCAqIG1lbWJsb2NrIGFsbG9jYXRpb25zIGFyZSBtYXJrZWQgTUVNQkxPQ0tfUlNSVl9LRVJOLCBzbyBjYWxjdWxhdGluZ1xuIDg1MzpcdFx0ICogdGhlbSBsYXRlciB3b3VsZCBjb3VudCB0aGUgbG93bWVtIGFuZCBnbG9iYWwgc2NyYXRjaCBhcmVhcyBhcyBrZXJuZWxcbiA4NTQ6XHRcdCAqIGFsbG9jYXRpb25zIGFuZCBzY2FsZSB0aGVtIGFnYWluLlxuIDg1NTpcdFx0ICovXG4gODU2Olx0XHRpID0gMjtcbiA4NTc6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbiA4NTg6XHRcdFx0a2hvX3NjcmF0Y2hbaSYjNDM7JiM0MztdLnNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuIDg1OTpcdFx0aSA9IDA7XG4gODYwOlx0XG4gODYxOlx0XHQvKlxuIDg2MjpcdFx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuIDg2MzpcdFx0ICogbmV4dCBrZXJuZWxcbiA4NjQ6XHRcdCAqL1xuIDg2NTpcdFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07XG4gODY2Olx0XHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywgMCxcbiA4Njc6XHRcdFx0XHRcdFx0IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpO1xuIDg2ODpcdFx0aWYgKCFhZGRyKSB7XG4gODY5Olx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcXG5cJiMzNDspO1xuIDg3MDpcdFx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfZGVzYztcbiA4NzE6XHRcdH1cbiA4NzI6XHRcbiA4NzM6XHRcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuIDg3NDpcdFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4gODc1Olx0XHRpJiM0MzsmIzQzOztcbiA4NzY6XHRcbiA4Nzc6XHRcdC8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqL1xuIDg3ODpcdFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XG4gODc5Olx0XHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4gODgwOlx0XHRpZiAoIWFkZHIpIHtcbiA4ODE6XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBzY3JhdGNoIGJ1ZmZlclxcblwmIzM0Oyk7XG4gODgyOlx0XHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcbiA4ODM6XHRcdH1cbiA4ODQ6XHRcbiA4ODU6XHRcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuIDg4NjpcdFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4gODg3Olx0XHRpJiM0MzsmIzQzOztcbiA4ODg6XHRcbiA4ODk6XHRcdC8qXG4gODkwOlx0XHQgKiBMb29wIG92ZXIgbm9kZXMgdGhhdCBoYXZlIGJvdGggbWVtb3J5IGFuZCBhcmUgb25saW5lLiBTa2lwXG4gODkxOlx0XHQgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIHNjcmF0Y2ggYXJlYXMgdGhlcmUuXG4gODkyOlx0XHQgKi9cbiA4OTM6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuIDg5NDpcdFx0XHRzaXplID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcbiA4OTU6XHRcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiA4OTY6XHRcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIDg5NzpcdFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gODk4Olx0XHRcdGlmICghYWRkcikge1xuIDg5OTpcdFx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgc2NyYXRjaCBidWZmZXJcXG5cJiMzNDssIG5pZCk7XG4gOTAwOlx0XHRcdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoX2FyZWFzO1xuIDkwMTpcdFx0XHR9XG4gOTAyOlx0XG4gOTAzOlx0XHRcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuIDkwNDpcdFx0XHRraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTtcbiA5MDU6XHRcdFx0aSYjNDM7JiM0Mzs7XG4gOTA2Olx0XHR9XG4gOTA3Olx0XG4gOTA4Olx0XHRyZXR1cm47XG4gOTA5Olx0XG4gOTEwOlx0ZXJyX2ZyZWVfc2NyYXRjaF9hcmVhczpcbiA5MTE6XHRcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKVxuIDkxMjpcdFx0XHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX3NjcmF0Y2hbaV0uYWRkciwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XG4gOTEzOlx0ZXJyX2ZyZWVfc2NyYXRjaF9kZXNjOlxuIDkxNDpcdFx0bWVtYmxvY2tfZnJlZShraG9fc2NyYXRjaCwga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCkpO1xuIDkxNTpcdGVycl9kaXNhYmxlX2tobzpcbiA5MTY6XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcmVhLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXG5cJiMzNDspO1xuIDkxNzpcdFx0a2hvX2VuYWJsZSA9IGZhbHNlO1xuIDkxODpcdH1cbiA5MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTExCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGtob19yZXNlcnZlX3NjcmF0Y2hgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYGtob19yZXNlcnZlX3NjcmF0Y2hgLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGxvY2F0ZSBhbGwgb2YgaXRzIGNhbGwgc2l0ZXMuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgaW52b2tlZCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGFuZCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLCBidXQgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzZWFyY2ggcmVzdWx0cyB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19yZXNlcnZlX3NjcmF0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz04MDY9Ym9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODIyLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MjM6ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODI0LSAqXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MzAtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjgzMTpzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MzIte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTk1MT12b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXQodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5NTUtXHRlbHNlXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5NTY6XHRcdGtob19yZXNlcnZlX3NjcmF0Y2goKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM3MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogYGtob19tZW1vcnlfaW5pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoZXJlIGFyZSB3ZSBpbml0aWFsaXppbmcgdGhpcyBga2hvX21lbW9yeWAgc3RydWN0dXJlPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgYW5kIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaXMgc2V0IHVwLiBLbm93aW5nIHdoZXJlIGBraG9fbWVtb3J5X2luaXRgIGlzIGludm9rZWQgaXMgY3J1Y2lhbCBmb3IgY29tcHJlaGVuZGluZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBtZW1vcnkgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgc3RhdGUgdGhlIHN5c3RlbSBpcyBpbiB3aGVuIHRoZSBpbml0aWFsaXphdGlvbiBoYXBwZW5zLiBUaGlzIHdpbGwgaGVscCBtZSBjb250ZXh0dWFsaXplIGFueSBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHJlbGF0ZWQgdG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgZ2V0dGluZyBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbXBvbmVudCBvcGVyYXRlcyBhbmQgaG93IHRvIHRyb3VibGVzaG9vdCBpdCB3aGVuIHRoaW5ncyBpbmV2aXRhYmx5IGdvIHdyb25nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19tZW1vcnlfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MzQ9aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM1LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM2OnZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM3OnZvaWQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0xMTU9c3RhdGljIGlubGluZSBpbnQga2hvX3JldHJpZXZlX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgcGh5c19hZGRyX3QgKnBoeXMsXG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEyMC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMjE6c3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjItXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTIzOnN0YXRpYyBpbmxpbmUgdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkgeyB9XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTI0LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTkwOT1mc19pbml0Y2FsbChraG9faW5pdCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MTAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5MTE6dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MTIte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1MC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTk1MTp2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXQodm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1Mi17XG4tLVxubW0vbW1faW5pdC5jPTI2ODA9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpXG5tbS9tbV9pbml0LmMtMjY4MS17XG5tbS9tbV9pbml0LmM6MjY4MjpcdGtob19tZW1vcnlfaW5pdF9lYXJseSgpO1xubW0vbW1faW5pdC5jLTI2ODMtXG4tLVxubW0vbW1faW5pdC5jPTI2OTc9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTI3MjEtXHQgKi9cbm1tL21tX2luaXQuYzoyNzIyOlx0a2hvX21lbW9yeV9pbml0KCk7XG5tbS9tbV9pbml0LmMtMjcyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA3CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGtob19yZXNlcnZlX3NjcmF0Y2hgKioKCk9rYXksIHNvIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBlc3NlbnRpYWxseSB0aGUgYF9faW5pdGAgZnVuY3Rpb24gY2FsbGVkIGJ5IGBraG9fbWVtb3J5X2luaXQoKWAsIHdoaWNoIGl0c2VsZiBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbW1fY29yZV9pbml0KClgIGR1cmluZyB0aGUga2VybmVsJiMzOTtzIGJvb3QgcHJvY2Vzcy4gU28sIGluaXRpYWxseSwgaXQgc291bmRzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlYXJseSBib290IG1lbW9yeSBhbGxvY2F0aW9uIHZpYSBgbWVtYmxvY2tgLiBCdXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSXMgdGhpcyAqcHVyZWx5KiBhIGJvb3QtdGltZSBmdW5jdGlvbj8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZS4KClRpbWUgdG8gc2hpZnQgZ2VhcnMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyBzeXprYWxsZXIgdGVzdGluZyBpbiByZWxhdGlvbiB0byB0aGlzPyBBbmQgSSBzaG91bGQgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggd2hhdCBsaXZldXBkYXRlIGFuZCBrZXhlY19oYW5kb3ZlciBhcmUgZG9pbmcgYXMgdGhpcyBjb3VsZCBiZSBhIHJlbGF0ZWQgdXNlIGNhc2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGdvb2QgbG9vayBhdCB0aGUgYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgIGZpbGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGZsb3csIGJlY2F1c2UgdGhhdCBtaWdodCByZXZlYWwgc29tZXRoaW5nIGltcG9ydGFudC4gSG93IGRvZXMgdGhlIGxpdmUgdXBkYXRlL2tleGVjIGhhbmRvdmVyIHByb2Nlc3Mgd29yayBpbiByZWxhdGlvbiB0byBtZW1vcnk/IEFyZSB0aGVyZSBydW50aW1lIGNhbGxzIGJlaW5nIG1hZGU/CgpVbHRpbWF0ZWx5LCB0aGUgbW9uZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgaW50ZXJhY3Rpb24gd2l0aCBga2hvX3NjcmF0Y2hgIGF0IHJ1bnRpbWUuIEFyZSB0aGVyZSBzeXNjYWxscywgaW9jdGxzLCBzeXNmcywgZGVidWdmcyBpbnRlcmZhY2VzLCBvciBldmVuIHRoZSBrZXhlYyBpbnRlcmZhY2UgaXRzZWxmLCB0aGF0IG1pZ2h0IGJlIHRvdWNoaW5nIHRoaXMgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbj8gSSBuZWVkIHRvIGtub3cuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBsYXVuY2ggYSBjb21wcmVoZW5zaXZlIGtlcm5lbC13aWRlIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBraG9fc2NyYXRjaGAuIFRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSB0cnVlIGV4dGVudCBvZiBpdHMgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19zY3JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk4PUtlcm5lbCBwYXJhbWV0ZXJzXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMzAzMy1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjMwMzQ6XHRraG9fc2NyYXRjaD1cdFtLRVhFQyxFQVJMWV1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTMwMzUtXHRcdFx0Rm9ybWF0OiBsbFtLTUddLG1tW0tNR10sbm5bS01HXSB8IG5uJVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdD0yMj1UbyB1c2UgS0hPLCBwbGVhc2UgYm9vdCB0aGUga2VybmVsIHdpdGggdGhlIGBga2hvPW9uYGAgY29tbWFuZCBsaW5lXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q6MjM6cGFyYW1ldGVyLiBZb3UgbWF5IHVzZSBgYGtob19zY3JhdGNoYGAgcGFyYW1ldGVyIHRvIGRlZmluZSBzaXplIG9mIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0OjI0OnNjcmF0Y2ggcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fc2NyYXRjaD0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGFcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdC0yNS0xNiBNaUIgbG93IG1lbW9yeSBzY3JhdGNoIGFyZWEsIGEgNTEyIE1pQiBnbG9iYWwgc2NyYXRjaCByZWdpb24sIGFuZCAyNTYgTWlCXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0PTE2PXRoZSBwcmVzZXJ2ZWQgc3RhdGUgZnJvbSBwcmUtZXhlYyBrZXJuZWwgdG8gcG9zdC1rZXhlYyBrZXJuZWwgYW5kIDpyZWY6YHNjcmF0Y2hcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdDoxNzptZW1vcnkgcmVnaW9ucyBcdTAwM2NraG9fc2NyYXRjaFx1MDAzZWAgdG8gZW5zdXJlIGludGVncml0eSBvZiB0aGUgcHJlc2VydmVkIG1lbW9yeS5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdC0xOC1cbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q9MzU9YW5kIHBvc3Qta2V4ZWMga2VybmVscy4gVGhpcyBBQkkgaXMgZGVmaW5lZCBieSBoZWFkZXIgZmlsZXMgaW5cbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtNDItXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q6NDM6Li4gX2tob19zY3JhdGNoOlxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0LTQ0LVxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdD01OD1CeSBkZWZhdWx0LCBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnlcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdDo1OTphbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtNjAtdXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbnMuXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0PTY1PW1vdmFibGUgcGFnZXMgY2FuIGJlIGxvY2F0ZWQgaW5zaWRlLlxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0LTY2LVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0OjY3OkFmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtNjgtaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM9NzcwPXN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzEte1xuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6NzcyOlx0c3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc3My1cdHN0cnVjdCBzZXR1cF9kYXRhICpwdHI7XG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNzgzLVx0XHRcdGtobyA9IChzdHJ1Y3Qga2hvX2RhdGEgKikodW5zaWduZWQgbG9uZylwdHItXHUwMDNlZGF0YTtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjc4NDpcdFx0XHRraG9fc2NyYXRjaCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVx1MDAzZXNjcmF0Y2hfYWRkcjtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjc4NTpcdFx0XHRucl9hcmVhcyA9IGtoby1cdTAwM2VzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc4Ni1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03OTUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9hcmVhczsgaSYjNDM7JiM0MzspIHtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjc5NjpcdFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXHUwMDI2a2hvX3NjcmF0Y2hbaV07XG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03OTctXHRcdHN0cnVjdCBtZW1fdmVjdG9yIHJlZ2lvbiA9IHtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jPTEyODg9X19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNjUtXHQgKi9cbmFyY2gveDg2L2tlcm5lbC9lODIwLmM6MTM2NjpcdG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goMCwgU1pfMU0pO1xuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzY3LVxuLS1cbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYz00Nz12b2lkIF9faW5pdCByZXNlcnZlX3JlYWxfbW9kZSh2b2lkKVxuLS1cbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYy02OC1cbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYzo2OTpcdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYy03MC19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYz0xNTk9c3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMtMTgwLVx0XHRmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmM6MTgxOlx0XHRcdGlmICghbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gocikpIHtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMtMTgyLVx0XHRcdFx0bWVtYmxvY2tfcmVtb3ZlKHItXHUwMDNlYmFzZSwgci1cdTAwM2VzaXplKTtcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmgtNi1cbmluY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaDo3OnN0cnVjdCBraG9fc2NyYXRjaCB7XG5pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmgtOC1cdHBoeXNfYWRkcl90IGFkZHI7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTM5PXZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLFxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00MS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo0Mjpib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQzLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjQ0OnN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00NS1cdFx0XHRcdFx0XHQgICAgICAgZW51bSBtaWdyYXRldHlwZSBtdClcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00Ni17XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NDc6XHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQ4LVx0XHRyZXR1cm4gTUlHUkFURV9DTUE7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTEyNT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTI5LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjEzMDpzdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzEte1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzQtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTM1OnN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzYtXHRcdFx0XHRcdFx0ICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTE2MD1pbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19rZXJuKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjE2MTppbnQgbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDoxNjI6aW50IG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTE2My1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9Mjk5PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19kcml2ZXJfbWFuYWdlZChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0zMDMtXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MzA0OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fc2NyYXRjaChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTMwNS17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTYxND1zdGF0aWMgaW5saW5lIHZvaWQgbWVtdGVzdF9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC02MTctI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjYxODp2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjYxOTp2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCk7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNjIwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NjIxOnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo2MjI6c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCkgeyB9XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNjIzLSNlbmRpZlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjUxPXN0YXRpYyB2b2lkIF9faW5pdCAqa2hvX2dldF9tZW1fbWFwKGNvbnN0IHZvaWQgKmZkdClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY2NS0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NjY2OnN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY2Nzp1bnNpZ25lZCBpbnQga2hvX3NjcmF0Y2hfY250O1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NjgtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzItICpcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NjczOiAqIGtob19zY3JhdGNoPU4lXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjc3LSAqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY3ODogKiBraG9fc2NyYXRjaD1sW0tNR10sbltLTUddLG1bS01HXVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzktICpcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTY4Nz1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy03NTItfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo3NTM6ZWFybHlfcGFyYW0oXCYjMzQ7a2hvX3NjcmF0Y2hcJiMzNDssIGtob19wYXJzZV9zY3JhdGNoX3NpemUpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy03NTQtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz03ODg9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODA1LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MDY6Ym9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MDcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODEwLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MTE6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjgxMjpcdFx0c2NyYXRjaF9zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHI7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjgxMzpcdFx0c2NyYXRjaF9lbmQgPSBraG9fc2NyYXRjaFtpXS5hZGRyICYjNDM7IGtob19zY3JhdGNoW2ldLnNpemU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTgxNC1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTgzMT1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODQxLVx0LyogRklYTUU6IGRlYWwgd2l0aCBub2RlIGhvdC1wbHVnL3JlbW92ZSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NDI6XHRraG9fc2NyYXRjaF9jbnQgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKSAmIzQzOyAyO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NDM6XHRzaXplID0ga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjg0NDpcdGtob19zY3JhdGNoID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODQ1Olx0aWYgKCFraG9fc2NyYXRjaCkge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04NDYtXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFycmF5XFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg1Ny1cdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODU4Olx0XHRraG9fc2NyYXRjaFtpJiM0MzsmIzQzO10uc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9ub2RlKG5pZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg1OS1cdGkgPSAwO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODcyLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NzM6XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODc0Olx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg3NS1cdGkmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODg0LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4ODU6XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODg2Olx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg4Ny1cdGkmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODkzLVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjg5NDpcdFx0c2l6ZSA9IGtob19zY3JhdGNoW2ldLnNpemU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg5NS1cdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkwMi1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTAzOlx0XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTA0Olx0XHRraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTA1LVx0XHRpJiM0MzsmIzQzOztcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkxMS1cdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MTI6XHRcdG1lbWJsb2NrX3BoeXNfZnJlZShraG9fc2NyYXRjaFtpXS5hZGRyLCBraG9fc2NyYXRjaFtpXS5zaXplKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTEzLWVycl9mcmVlX3NjcmF0Y2hfZGVzYzpcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTE0Olx0bWVtYmxvY2tfZnJlZShraG9fc2NyYXRjaCwga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCkpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MTUtZXJyX2Rpc2FibGVfa2hvOlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTY0PXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTcwLVx0aWYgKHN0YXJ0IFx1MDAzZSAqcHJldl9lbmQpIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTcxOlx0XHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NzItXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDA1PXN0YXRpYyB2b2lkIF9faW5pdCBraG9fZXh0ZW5kX3NjcmF0Y2godm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDMtXHRpZiAocHJldl9lbmQgXHUwMDNjIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwNDQ6XHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDUtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMTU4PWludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNjQtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpIFx1MDAyNlx1MDAyNlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTY1Olx0ICAgIFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSlcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMjMzPWludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjQyLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTI0MzpcdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAoc3RhcnRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjQ0LVx0XHRcdFx0XHRucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKSB7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xODI5PXN0YXRpYyBfX2luaXQgaW50IGtob19pbml0KHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODY4LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxODY5Olx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTg3MDpcdFx0dW5zaWduZWQgbG9uZyBiYXNlX3BmbiA9IFBIWVNfUEZOKGtob19zY3JhdGNoW2ldLmFkZHIpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxODcxOlx0XHR1bnNpZ25lZCBsb25nIGNvdW50ID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTg3Mi1cdFx0dW5zaWduZWQgbG9uZyBwZm47XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODgxLVx0XHQgKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTg4MjpcdFx0a21lbWxlYWtfaWdub3JlX3BoeXMoa2hvX3NjcmF0Y2hbaV0uYWRkcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE4ODMtXHRcdGZvciAocGZuID0gYmFzZV9wZm47IHBmbiBcdTAwM2MgYmFzZV9wZm4gJiM0MzsgY291bnQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODk5LVx0a2hvX291dC5mZHQgPSBOVUxMO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTAwOlx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTkwMTpcdFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19zY3JhdGNoW2ldLmFkZHIpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTAyOlx0XHR2b2lkICplbmQgPSBzdGFydCAmIzQzOyBraG9fc2NyYXRjaFtpXS5zaXplO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTAzLVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTkxMT12b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MjgtXHQvKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTI5Olx0ICoga2hvX3NjcmF0Y2hfb3ZlcmxhcCgpIG5lZWRzIGtob19zY3JhdGNoIHRvIGJlIGluaXRpYWxpemVkLiBJdFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTMwLVx0ICogaXMgdXNlZCBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTkzMi1cdCAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTMzOlx0a2hvX3NjcmF0Y2ggPSBwaHlzX3RvX3ZpcnQoa2hvX2luLnNjcmF0Y2hfcGh5cyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MzQtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xOTU5PXZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTYxLXtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTk2MjpcdHVuc2lnbmVkIGludCBzY3JhdGNoX2NudCA9IHNjcmF0Y2hfbGVuIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5NjM6XHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKnNjcmF0Y2ggPSBOVUxMO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTY0LVx0cGh5c19hZGRyX3QgbWVtX21hcF9waHlzO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAwNC1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjAwNTpcdFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXHUwMDI2c2NyYXRjaFtpXTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAwNi1cdFx0dTY0IHNpemUgPSBhcmVhLVx1MDAzZXNpemU7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDA4LVx0XHRtZW1ibG9ja19hZGQoYXJlYS1cdTAwM2VhZGRyLCBzaXplKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjAwOTpcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChhcmVhLVx1MDAzZWFkZHIsIHNpemUpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDEwLVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDI2LVx0ICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMjc6XHRtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSgpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDI4LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAzMC1cdGtob19pbi5zY3JhdGNoX3BoeXMgPSBzY3JhdGNoX3BoeXM7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMzE6XHRraG9fc2NyYXRjaF9jbnQgPSBzY3JhdGNoX2NudDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAzMi1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTIwNDc9aW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwNTctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwNTg6XHRzY3JhdGNoX3NpemUgPSBzaXplb2YoKmtob19zY3JhdGNoKSAqIGtob19zY3JhdGNoX2NudDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA1OS1cdHNjcmF0Y2ggPSAoc3RydWN0IGtleGVjX2J1Zil7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwNjAtXHRcdC5pbWFnZSA9IGltYWdlLFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDYxOlx0XHQuYnVmZmVyID0ga2hvX3NjcmF0Y2gsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwNjItXHRcdC5idWZzeiA9IHNjcmF0Y2hfc2l6ZSxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTIwNzc9c3RhdGljIGludCBraG9fd2Fsa19zY3JhdGNoKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDgyLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDgzOlx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDg0LVx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzID0ge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDg1Olx0XHRcdC5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwODY6XHRcdFx0LmVuZCA9IGtob19zY3JhdGNoW2ldLmFkZHIgJiM0Mzsga2hvX3NjcmF0Y2hbaV0uc2l6ZSAtIDEsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwODctXHRcdH07XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jPTgwPXN0YXRpYyBpbnQgc2NyYXRjaF9waHlzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jLTgxLXtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYzo4MjpcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jOjgzOlx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OzB4JWxseFxcblwmIzM0Oywga2hvX3NjcmF0Y2hbaV0uYWRkcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMtODQtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jPTg5PXN0YXRpYyBpbnQgc2NyYXRjaF9sZW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMtOTAte1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jOjkxOlx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmM6OTI6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7LCBraG9fc2NyYXRjaFtpXS5zaXplKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYy05My1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTE5PXN0cnVjdCBraG9fZGVidWdmcyB7fTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTIxLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDoyMjpleHRlcm4gc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmg6MjM6ZXh0ZXJuIHVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTI0LVxuLS1cbm1tL21lbWJsb2NrLmM9MTE0PXVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuO1xuLS1cbm1tL21lbWJsb2NrLmMtMTE3LS8qIFdoZW4gc2V0IHRvIHRydWUsIG9ubHkgYWxsb2NhdGUgZnJvbSBNRU1CTE9DS19LSE9fU0NSQVRDSCByYW5nZXMgKi9cbm1tL21lbWJsb2NrLmM6MTE4OnN0YXRpYyBib29sIGtob19zY3JhdGNoX29ubHk7XG5tbS9tZW1ibG9jay5jLTExOS0jZWxzZVxubW0vbWVtYmxvY2suYzoxMjA6I2RlZmluZSBraG9fc2NyYXRjaF9vbmx5IGZhbHNlXG5tbS9tZW1ibG9jay5jLTEyMS0jZW5kaWZcbi0tXG5tbS9tZW1ibG9jay5jPTE4MD1zdGF0aWMgZW51bSBtZW1ibG9ja19mbGFncyBfX2luaXRfbWVtYmxvY2sgY2hvb3NlX21lbWJsb2NrX2ZsYWdzKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0xODItXHQvKiBza2lwIG5vbi1zY3JhdGNoIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi9cbm1tL21lbWJsb2NrLmM6MTgzOlx0aWYgKGtob19zY3JhdGNoX29ubHkpXG5tbS9tZW1ibG9jay5jLTE4NC1cdFx0cmV0dXJuIE1FTUJMT0NLX0tIT19TQ1JBVENIO1xuLS1cbm1tL21lbWJsb2NrLmM9MTE3MT1pbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfa2VybihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuLS1cbm1tL21lbWJsb2NrLmMtMTE3Ny0vKipcbm1tL21lbWJsb2NrLmM6MTE3ODogKiBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoIC0gTWFyayBhIG1lbW9yeSByZWdpb24gYXMgTUVNQkxPQ0tfS0hPX1NDUkFUQ0guXG5tbS9tZW1ibG9jay5jLTExNzktICogQGJhc2U6IHRoZSBiYXNlIHBoeXMgYWRkciBvZiB0aGUgcmVnaW9uXG4tLVxubW0vbWVtYmxvY2suYy0xMTg2LSAqL1xubW0vbWVtYmxvY2suYzoxMTg3Ol9faW5pdCBpbnQgbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxubW0vbWVtYmxvY2suYy0xMTg4LXtcbi0tXG5tbS9tZW1ibG9jay5jLTExOTMtLyoqXG5tbS9tZW1ibG9jay5jOjExOTQ6ICogbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2ggLSBDbGVhciBNRU1CTE9DS19LSE9fU0NSQVRDSCBmbGFnIGZvciBhXG5tbS9tZW1ibG9jay5jLTExOTUtICogc3BlY2lmaWVkIHJlZ2lvbi5cbi0tXG5tbS9tZW1ibG9jay5jLTEyMDAtICovXG5tbS9tZW1ibG9jay5jOjEyMDE6X19pbml0IGludCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxubW0vbWVtYmxvY2suYy0xMjAyLXtcbi0tXG5tbS9tZW1ibG9jay5jPTEyMDc9c3RhdGljIGJvb2wgc2hvdWxkX3NraXBfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuLS1cbm1tL21lbWJsb2NrLmMtMTI0MS1cdCAqL1xubW0vbWVtYmxvY2suYzoxMjQyOlx0aWYgKChmbGFncyBcdTAwMjYgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpIFx1MDAyNlx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gobSkpXG5tbS9tZW1ibG9jay5jLTEyNDMtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL21lbWJsb2NrLmM9MTc3Nz12b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXG4tLVxubW0vbWVtYmxvY2suYy0xODE3LVx0ICovXG5tbS9tZW1ibG9jay5jOjE4MTg6XHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChhZGRyLCBzaXplKSkge1xubW0vbWVtYmxvY2suYy0xODE5LVx0XHRpZiAobWVtYmxvY2tfYm90dG9tX3VwKCkpXG4tLVxubW0vbWVtYmxvY2suYz0yNDk0PXZvaWQgX19pbml0IG1lbWJsb2NrX2ZyZWVfYWxsKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNTAwLVxubW0vbWVtYmxvY2suYzoyNTAxOlx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xubW0vbWVtYmxvY2suYy0yNTAyLVx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xuLS1cbm1tL21lbWJsb2NrLmM9MjU3OT1pbnQgcmVzZXJ2ZV9tZW1fcmVsZWFzZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubW0vbWVtYmxvY2suYy0yNTk5LSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcbm1tL21lbWJsb2NrLmM6MjYwMDpfX2luaXQgdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKVxubW0vbWVtYmxvY2suYy0yNjAxLXtcbm1tL21lbWJsb2NrLmM6MjYwMjpcdGtob19zY3JhdGNoX29ubHkgPSB0cnVlO1xubW0vbWVtYmxvY2suYy0yNjAzLX1cbm1tL21lbWJsb2NrLmMtMjYwNC1cbm1tL21lbWJsb2NrLmM6MjYwNTpfX2luaXQgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXG5tbS9tZW1ibG9jay5jLTI2MDYte1xubW0vbWVtYmxvY2suYzoyNjA3Olx0a2hvX3NjcmF0Y2hfb25seSA9IGZhbHNlO1xubW0vbWVtYmxvY2suYy0yNjA4LX1cbi0tXG5tbS9tbV9pbml0LmM9NjgxPXN0YXRpYyBfX21lbWluaXQgdm9pZCBwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtNjg2LVx0Zm9yIChwZm4gPSBwYWdlYmxvY2tfYWxpZ24ocGZuKTsgcGZuIFx1MDAzYyBlbmQ7IHBmbiAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XG5tbS9tbV9pbml0LmM6Njg3Olx0XHRlbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7XG5tbS9tbV9pbml0LmMtNjg4LVxuLS1cbm1tL21tX2luaXQuYz03NjU9c3RhdGljIHZvaWQgX19tZW1pbml0IF9faW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuLS1cbm1tL21tX2luaXQuYy03NzYtXHRcdGVudW0gbWlncmF0ZXR5cGUgbXQgPVxubW0vbW1faW5pdC5jOjc3NzpcdFx0XHRraG9fc2NyYXRjaF9taWdyYXRldHlwZShwZm4sIE1JR1JBVEVfTU9WQUJMRSk7XG5tbS9tbV9pbml0LmMtNzc4LVx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwZm5fdG9fcGFnZShwZm4pLCBtdCwgZmFsc2UpO1xuLS1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaD0zOT1zdGF0aWMgaW5saW5lIGJvb2wgX19pc19rZXJuZWwodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC00OC1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaDo0OTpzdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC01MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjE1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBga2hvX3Jlc2VydmVfc2NyYXRjaGAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemVkIGFzIGEgYHN0YXRpYyB2b2lkIF9faW5pdGAgZnVuY3Rpb24uIFRoZSBgX19pbml0YCBhdHRyaWJ1dGUgaXMgYSByZWQgZmxhZywgc3VnZ2VzdGluZyBpdCYjMzk7cyBleGVjdXRlZCBvbmx5IGR1cmluZyB0aGUga2VybmVsIGluaXRpYWxpemF0aW9uIHBoYXNlLiBJIHF1aWNrbHkgdHJhY2tlZCB0aGUgY2FsbCBjaGFpbjogYGtob19tZW1vcnlfaW5pdGAgdGhlbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIFRoZW4gYG1tX2NvcmVfaW5pdGAgY2FsbHMgYGtob19tZW1vcnlfaW5pdGAgYW5kIGBtbV9jb3JlX2luaXRgIGlzIGNhbGxlZCBieSBgc3RhcnRfa2VybmVsYC4gQ2xlYXJseSB0aGlzIGlzIGFsbCBkdXJpbmcgZWFybHkgYm9vdC4KCk15IG5leHQgaW1tZWRpYXRlIHF1ZXN0aW9uIHdhcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24sIG9yIGFueSBwYXJ0IG9mIHRoaXMgY29kZXBhdGgsIGNvdWxkIGJlIHJlYWNoZWQgZHVyaW5nIHJ1bnRpbWUsIGVzcGVjaWFsbHkgYnkgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyBuby4gYF9faW5pdGAgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHRoZSBpbml0aWFsIFJBTSBkaXNrLCBleGVjdXRlZCBvbmNlLCBhbmQgdGhlaXIgbWVtb3J5IGlzIGZyZWVkIGJ5IGBmcmVlX2luaXRtZW0oKWAgYmVmb3JlIHVzZXJzcGFjZSBldmVuIGJlZ2lucywgdGh1cywgbWFraW5nIHRoZSBmdW5jdGlvbnMgY29tcGxldGVseSBpbmFjY2Vzc2libGUgYWZ0ZXIgdGhlIHN5c3RlbSBpcyBmdWxseSBib290ZWQuIEZ1enppbmcgd291bGQgYmUgdW5hYmxlIHRvIGludm9rZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAgdmlhIGFueSBzeXNjYWxsLCBJT0NUTCwgdmlydHVhbCBkZXZpY2UsIG9yIHN5c2ZzIGludGVyYWN0aW9uLgoKVG8gY29uZmlybSB0aGlzLCBJIGRvdWJsZS1jaGVja2VkIHRoZSBkaWZmIHByb3ZpZGVkIHRvIGVuc3VyZSBub3RoaW5nIGVsc2Ugd2FzIG1vZGlmaWVkIGluIHRoZSBjb21taXQsIHRvIGVsaW1pbmF0ZSBhbnkgZG91YnQuIEl0JiMzOTtzIGNvbmZpbmVkIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIEkgdGhlbiB3ZW50IGJhY2sgYW5kIHZlcmlmaWVkIHdoZXJlIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBjYWxsZWQsIGFuZCBmb3VuZCB0aGF0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIGluIGBraG9fbWVtb3J5X2luaXRgIGFuZCBmcm9tIHRoZSBzYW1lIGZpbGUuCgpJIGNvbnNpZGVyZWQgd2hldGhlciB0aGlzIEtITyBlYXJseSBib290IHNjcmF0Y2ggcmVzZXJ2YXRpb24sIHdoaWNoIHJlbGllcyBvbiBtZW1ibG9jayBhbGxvY2F0aW9ucyAoYG1lbWJsb2NrX2FsbG9jYCwgYG1lbWJsb2NrX3BoeXNfYWxsb2NgLCBldGMuKSBiZWZvcmUgdGhlIGJ1ZGR5IGFsbG9jYXRvciBpcyBpbml0aWFsaXplZCwgd291bGQgYmUgYSBmYWN0b3IuIFRoZSBjb25jbHVzaW9uIHJlbWFpbmVkIHVuY2hhbmdlZDogYWZ0ZXIgYm9vdCBjb21wbGV0aW9uLCB0aGUgYC5pbml0LnRleHRgIHNlY3Rpb24gY29udGFpbmluZyB0aGlzIGZ1bmN0aW9uIGlzIHVubWFwcGVkIGFuZCBmcmVlZC4KCkkgdGhlbiByZXZpc2l0ZWQgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEgYW5kIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgJiMzNDt1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0OyBjYXRlZ29yeSBzcGVjaWZpY2FsbHkgaW5jbHVkZXMgY29kZSBleGVjdXRlZCBvbmx5IGR1cmluZyBkcml2ZXIgdGVhcmRvd24sIHBoeXNpY2FsIGhvdC11bnBsdWcsIG9yIG9uIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0LiBUaGlzIG1hZGUgbWUgdGhpbmsgYWJvdXQgd2hldGhlciBlYXJseSBib290IGBfX2luaXRgIGNvZGUgY291bGQgZXZlbiBiZSBjb25zaWRlcmVkIGJ5IHN5emthbGxlci4KClVsdGltYXRlbHksIHN5emthbGxlciwgcnVubmluZyBpbiB1c2Vyc3BhY2Ugd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGlzIGRlc2lnbmVkIHRvIGV4ZWN1dGUgdGVzdCBwcm9ncmFtcywgd2hpY2ggdHJhbnNsYXRlIHRvIHN5c2NhbGwgc2VxdWVuY2VzLiBJdCBpcywgdGhlcmVmb3JlLCB1bmFibGUgdG8gcmVhY2ggdGhlIGBfX2luaXRgIGZ1bmN0aW9ucyB0aGF0IHJ1biBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgYXJlIGZyZWVkIGJlZm9yZSBzeXprYWxsZXIgZXZlbiBiZWdpbnMgdG8gcnVuLiBUaGVyZWZvcmUsIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBub3QgcmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VYRUNfSEFORE9WRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TGl2ZSBVcGRhdGUgYW5kIEtleGVjIEhhbmRPdmVyXCYjMzQ7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjU6Y29uZmlnIEtFWEVDX0hBTkRPVkVSXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6MTg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgS2V4ZWMgSGFuZG92ZXIgZGVidWcgY2hlY2tzXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yNi1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjgtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mzg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgaGFuZG92ZXIgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIExpdmUgVXBkYXRlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbGl2ZSB1cGRhdGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgdHlwZSBvZiB0aGluZyB3b3VsZCBiZSB1bmRlciBga2VybmVsL2AuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnYC4gVGhhdCBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGhlIGJlZHJvY2sgZm9yIGVuYWJsaW5nLCBkaXNhYmxpbmcsIGFuZCBjdXN0b21pemluZyB0aGUgbGl2ZSB1cGRhdGUgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3B0aW9ucyBhcmUgZXhwb3NlZCB0aGVyZSwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIGdpdmUgbWUgdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZSBiZWZvcmUgSSBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0xpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclwmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlclwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSIFx1MDAyNlx1MDAyNiBBUkNIX1NVUFBPUlRTX0tFWEVDX0ZJTEVcbiAgIDg6XHRcdHNlbGVjdCBNRU1CTE9DS19LSE9fU0NSQVRDSFxuICAgOTpcdFx0c2VsZWN0IEtFWEVDX0ZJTEVcbiAgMTA6XHRcdHNlbGVjdCBMSUJGRFRcbiAgMTE6XHRcdHNlbGVjdCBDTUFcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgQWxsb3cga2V4ZWMgdG8gaGFuZCBvdmVyIHN0YXRlIGFjcm9zcyBrZXJuZWxzIGJ5IGdlbmVyYXRpbmcgYW5kXG4gIDE0Olx0XHQgIHBhc3NpbmcgYWRkaXRpb25hbCBtZXRhZGF0YSB0byB0aGUgdGFyZ2V0IGtlcm5lbC4gVGhpcyBpcyB1c2VmdWxcbiAgMTU6XHRcdCAgdG8ga2VlcCBkYXRhIG9yIHN0YXRlIGFsaXZlIGFjcm9zcyB0aGUga2V4ZWMuIEZvciB0aGlzIHRvIHdvcmssXG4gIDE2Olx0XHQgIGJvdGggc291cmNlIGFuZCB0YXJnZXQga2VybmVscyBuZWVkIHRvIGhhdmUgdGhpcyBvcHRpb24gZW5hYmxlZC5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcbiAgMTk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEtleGVjIEhhbmRvdmVyIGRlYnVnIGNoZWNrc1wmIzM0O1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBLRVhFQ19IQU5ET1ZFUlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGV4dHJhIHNhbml0eSBjaGVja3MgZm9yIHRoZSBLZXhlYyBIYW5kb3ZlclxuICAyMzpcdFx0ICBzdWJzeXN0ZW0uIFNpbmNlLCBLSE8gcGVyZm9ybWFuY2UgaXMgY3J1Y2lhbCBpbiBsaXZlIHVwZGF0ZVxuICAyNDpcdFx0ICBzY2VuYXJpb3MgYW5kIHRoZSBleHRyYSBjb2RlIG1pZ2h0IGJlIGFkZGluZyBvdmVyaGVhZCBpdCBpc1xuICAyNTpcdFx0ICBvbmx5IG9wdGlvbmFsbHkgZW5hYmxlZC5cbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdGU1xuICAyODpcdFx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuICAyOTpcdFx0ZGVmYXVsdCBLRVhFQ19IQU5ET1ZFUlxuICAzMDpcdFx0ZGVwZW5kcyBvbiBLRVhFQ19IQU5ET1ZFUlxuICAzMTpcdFx0c2VsZWN0IERFQlVHX0ZTXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIEFsbG93IHRvIGNvbnRyb2wga2V4ZWMgaGFuZG92ZXIgZGV2aWNlIHRyZWUgdmlhIGRlYnVnZnNcbiAgMzQ6XHRcdCAgaW50ZXJmYWNlLCBpLmUuIGZpbmFsaXplIHRoZSBzdGF0ZSBvciBhYm9ydGluZyB0aGUgZmluYWxpemF0aW9uLlxuICAzNTpcdFx0ICBBbHNvLCBlbmFibGVzIGluc3BlY3RpbmcgdGhlIEtITyBmZHQgdHJlZXMgd2l0aCB0aGUgZGVidWdmcyBiaW5hcnlcbiAgMzY6XHRcdCAgYmxvYnMuXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUXG4gIDM5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBrZXhlYyBoYW5kb3ZlciBieSBkZWZhdWx0XCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIEtFWEVDX0hBTkRPVkVSXG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIEVuYWJsZSBLZXhlYyBIYW5kb3ZlciBieSBkZWZhdWx0LiBUaGlzIGF2b2lkcyB0aGUgbmVlZCB0b1xuICA0MzpcdFx0ICBleHBsaWNpdGx5IHBhc3MgJiMzOTtraG89b24mIzM5OyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgVGhpcyBpcyB1c2VmdWwgZm9yIHN5c3RlbXMgd2hlcmUgS0hPIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBvdGhlclxuICA0NjpcdFx0ICBmZWF0dXJlcywgc3VjaCBhcyBMaXZlIFVwZGF0ZSwgZW5zdXJpbmcgdGhlIG1lY2hhbmlzbSBpcyBhbHdheXNcbiAgNDc6XHRcdCAgYWN0aXZlLlxuICA0ODpcdFxuICA0OTpcdFx0ICBUaGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gc3RpbGwgYmUgb3ZlcnJpZGRlbiBhdCBib290IHRpbWUgYnlcbiAgNTA6XHRcdCAgcGFzc2luZyAmIzM5O2tobz1vZmYmIzM5Oy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjUKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGluIGBraG9fcmVzZXJ2ZV9zY3JhdGNoKClgLCBhbiBgX19pbml0YCBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gSXRzIHJvbGUgaXMgdG8gY2FsY3VsYXRlIHNjcmF0Y2ggc2l6ZXMgcGVyIG5vZGUgKmJlZm9yZSogcmVzZXJ2aW5nIGxvd21lbSBhbmQgZ2xvYmFsIHNjcmF0Y2ggYXJlYXMuIFRoaXMgb3B0aW1pemF0aW9uIGF2b2lkcyB0cmVhdGluZyB0aG9zZSBhcmVhcyBhcyBrZXJuZWwgYWxsb2NhdGlvbnMgd2hlbiBzY2FsaW5nIHBlci1ub2RlIHNpemVzLCB3aGljaCBtYWtlcyBzZW5zZS4KCk5leHQsIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHRoaXMgZnVuY3Rpb24gYmUgcmVhY2hlZCBhbmQgZnV6emVkIGJ5IHN5emthbGxlciBkdXJpbmcgcnVudGltZT8gTm8uIFRoZSBgX19pbml0YCBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQuIFRoZSBjYWxsIGNoYWluIGlzIHZlcnkgY2xlYXI6IGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBpbnZva2VkIGR1cmluZyBlYXJseSBib290IGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgc3RhcnRfa2VybmVsYCAtJmd0OyBgbW1fY29yZV9pbml0YCAtJmd0OyBga2hvX21lbW9yeV9pbml0YCAtJmd0OyBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIE1vcmVvdmVyLCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uIGlzIGV4cGxpY2l0bHkgZnJlZWQgYnkgYGZyZWVfaW5pdG1lbSgpYCBiZWZvcmUgdXNlcnNwYWNlIGV2ZW4gc3RhcnRzLiBTeXprYWxsZXIsIGFzIHdlIGtub3csIG9wZXJhdGVzIGJ5IGZ1enppbmcgc3lzY2FsbHMgYW5kIHVzZXItc3BhY2UgaW50ZXJmYWNlcyBpbiBhIHJ1bm5pbmcga2VybmVsLiBUaGUgYC5pbml0LnRleHRgIGNvZGUgaGFzIGJlZW4gZXhlY3V0ZWQgYW5kIGZyZWVkLCBtYWtpbmcgdGhlIHRhcmdldCB1bnJlYWNoYWJsZSB0byB0aGUgZnV6emVyLgoKVGhlcmVmb3JlLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBtdXN0IGJlIHNldCB0byBmYWxzZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agb3B0aW9ucyBhcmUgaXJyZWxldmFudCBpbiB0aGlzIHNjZW5hcmlvLCBzbyB0aGV5IHNob3VsZCBiZSBudWxsIG9yIGFuIGVtcHR5IGxpc3QuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIHF1aWNrbHkgcmUtaXRlcmF0ZTogV2UgYXJlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpbiBga2V4ZWNfaGFuZG92ZXIuY2AuIEl0IGlzIGEgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IHRhZ2dlZCBhcyBgX19pbml0YCwgYW5kIGl0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290LCBwcmlvciB0byB1c2VyLXNwYWNlIGV4ZWN1dGlvbi4gIFN5emthbGxlciBmb2N1c2VzIG9uIHRoZSBydW4tdGltZSBrZXJuZWwgc3RhdGUsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSB0byBpdHMgZnV6emluZyBwcm9jZXNzLgoKQWxyaWdodCwgdGhhdCYjMzk7cyByb2NrIHNvbGlkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMga2hvX3Jlc2VydmVfc2NyYXRjaCgpLCBhbiBfX2luaXQgZnVuY3Rpb24gaW4ga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyB0aGF0IGV4ZWN1dGVzIGV4Y2x1c2l2ZWx5IGR1cmluZyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiAodmlhIG1tX2NvcmVfaW5pdCkgYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgZXhlY3V0aW9uLiBCZWNhdXNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUgYnkgc3lzY2FsbHMsIGlvY3Rscywgb3IgdXNlci1zcGFjZSBpbnRlcmZhY2VzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgdG8gdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMga2hvX3Jlc2VydmVfc2NyYXRjaCgpLCBhbiBfX2luaXQgZnVuY3Rpb24gaW4ga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyB0aGF0IGV4ZWN1dGVzIGV4Y2x1c2l2ZWx5IGR1cmluZyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiAodmlhIG1tX2NvcmVfaW5pdCkgYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgZXhlY3V0aW9uLiBCZWNhdXNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUgYnkgc3lzY2FsbHMsIGlvY3Rscywgb3IgdXNlci1zcGFjZSBpbnRlcmZhY2VzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgdG8gdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OToyNy4xNjIxNTE4MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ0ODEzMDg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMga2hvX3Jlc2VydmVfc2NyYXRjaCgpLCBhbiBfX2luaXQgZnVuY3Rpb24gaW4ga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyB0aGF0IGV4ZWN1dGVzIGV4Y2x1c2l2ZWx5IGR1cmluZyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiAodmlhIG1tX2NvcmVfaW5pdCkgYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgZXhlY3V0aW9uLiBCZWNhdXNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUgYnkgc3lzY2FsbHMsIGlvY3Rscywgb3IgdXNlci1zcGFjZSBpbnRlcmZhY2VzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgdG8gdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDExOjQ5OjI3LjE2MjE1NzExNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NjQ3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGQxMDNmNzU1ZWIyOGU5MDNlZGNkOTIxZGNhZDMwOWU3N2ZlODA0NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDExOjQ5OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuaW5kZXggN2M0ZDg2ZGFmODZkNS4uMzlmNDg5YTI1OGQ5MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbkBAIC04NDcsNiArODQ3LDE3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuIFxcdFxcdGdvdG8gZXJyX2Rpc2FibGVfa2hvO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDYWxjdWxhdGUgdGhlIHBlci1ub2RlIHNpemVzIGJlZm9yZSByZXNlcnZpbmcgYW55IHNjcmF0Y2ggYXJlYXMuXFxuK1xcdCAqIG1lbWJsb2NrIGFsbG9jYXRpb25zIGFyZSBtYXJrZWQgTUVNQkxPQ0tfUlNSVl9LRVJOLCBzbyBjYWxjdWxhdGluZ1xcbitcXHQgKiB0aGVtIGxhdGVyIHdvdWxkIGNvdW50IHRoZSBsb3dtZW0gYW5kIGdsb2JhbCBzY3JhdGNoIGFyZWFzIGFzIGtlcm5lbFxcbitcXHQgKiBhbGxvY2F0aW9ucyBhbmQgc2NhbGUgdGhlbSBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGkgPSAyO1xcbitcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpXFxuK1xcdFxcdGtob19zY3JhdGNoW2krK10uc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9ub2RlKG5pZCk7XFxuK1xcdGkgPSAwO1xcbitcXG4gXFx0LypcXG4gXFx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxcbiBcXHQgKiBuZXh0IGtlcm5lbFxcbkBAIC04ODAsNyArODkxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG4gXFx0ICogbWVtb3J5bGVzcyBub2RlcywgYXMgd2UgY2FuIG5vdCBhbGxvY2F0ZSBzY3JhdGNoIGFyZWFzIHRoZXJlLlxcbiBcXHQgKi9cXG4gXFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuLVxcdFxcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xcbitcXHRcXHRzaXplID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcXG4gXFx0XFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0MCwgTUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bmlkLCB0cnVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTE6NDk6MjcuNjQ5NzI5NDU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDk2MDUzMjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBraG9fcmVzZXJ2ZV9zY3JhdGNoKCksIGFuIF9faW5pdCBmdW5jdGlvbiBpbiBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIHRoYXQgZXhlY3V0ZXMgZXhjbHVzaXZlbHkgZHVyaW5nIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uICh2aWEgbW1fY29yZV9pbml0KSBhbmQgaXMgZnJlZWQgYmVmb3JlIHVzZXJzcGFjZSBleGVjdXRpb24uIEJlY2F1c2UgdGhpcyBjb2RlIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYXQgcnVudGltZSBieSBzeXNjYWxscywgaW9jdGxzLCBvciB1c2VyLXNwYWNlIGludGVyZmFjZXMsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB0byB0aGUgZnV6emVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZDEwM2Y3NTVlYjI4ZTkwM2VkY2Q5MjFkY2FkMzA5ZTc3ZmU4MDQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMTo0OToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCA3YzRkODZkYWY4NmQ1Li4zOWY0ODlhMjU4ZDkwIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTg0Nyw2ICs4NDcsMTcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdFx0Z290byBlcnJfZGlzYWJsZV9raG87XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogQ2FsY3VsYXRlIHRoZSBwZXItbm9kZSBzaXplcyBiZWZvcmUgcmVzZXJ2aW5nIGFueSBzY3JhdGNoIGFyZWFzLlxuK1x0ICogbWVtYmxvY2sgYWxsb2NhdGlvbnMgYXJlIG1hcmtlZCBNRU1CTE9DS19SU1JWX0tFUk4sIHNvIGNhbGN1bGF0aW5nXG4rXHQgKiB0aGVtIGxhdGVyIHdvdWxkIGNvdW50IHRoZSBsb3dtZW0gYW5kIGdsb2JhbCBzY3JhdGNoIGFyZWFzIGFzIGtlcm5lbFxuK1x0ICogYWxsb2NhdGlvbnMgYW5kIHNjYWxlIHRoZW0gYWdhaW4uXG4rXHQgKi9cbitcdGkgPSAyO1xuK1x0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxuK1x0XHRraG9fc2NyYXRjaFtpKytdLnNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuK1x0aSA9IDA7XG4rXG4gXHQvKlxuIFx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuIFx0ICogbmV4dCBrZXJuZWxcbkBAIC04ODAsNyArODkxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS5cbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG4tXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuK1x0XHRzaXplID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcbiBcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OToyNy42NDk3MzE5OTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTQyMjI0MzcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtleGVjX2hhbmRvdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoaXMgcGF0Y2guIEknbSBzdGFydGluZyBieSB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZTogd2hhdCBmaWxlIHdhcyBtb2RpZmllZD8gQWgsIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gT2theSwgbm93IHdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBhcmVhcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAgZnVuY3Rpb24uIEkgaGF2ZSB0byBpbW1lZGlhdGVseSBncmFzcCBpdHMgY29udGV4dCDigJMgaG93IGl0J3MgY2FsbGVkLCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBnb3Zlcm4gaXRzIGV4ZWN1dGlvbiwgYW5kIGNydWNpYWxseSwgd2hldGhlciBpdCdzIGFuIGVhcmx5LWJvb3QsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIChgX19pbml0YCksIG9yIGlmIGl0J3MgcnVudGltZSBjb2RlLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzLlxuXG5MZXQncyBnZXQgdGhlIHNwZWNpZmljIGNvZGUuIEdpdmUgbWUgbGluZSA4NDcgb2YgYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgLiBJIG5lZWQgdGhlIGNvZGUgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTE6NDk6MzkuMDcxOTc5NDM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgyMDpcXHR9XFxuIDgyMTpcXHRcXG4gODIyOlxcdC8qKlxcbiA4MjM6XFx0ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG4gODI0OlxcdCAqXFxuIDgyNTpcXHQgKiBXaXRoIEtITyB3ZSBjYW4gcHJlc2VydmUgYXJiaXRyYXJ5IHBhZ2VzIGluIHRoZSBzeXN0ZW0uIFRvIGVuc3VyZSB3ZSBzdGlsbFxcbiA4MjY6XFx0ICogaGF2ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeSB3aGVuIHdlIHNlYXJjaCB0aGUgcGh5c2ljYWwgYWRkcmVzc1xcbiA4Mjc6XFx0ICogc3BhY2UgZm9yIHRhcmdldCBtZW1vcnksIGxldCdzIG1ha2Ugc3VyZSB3ZSBhbHdheXMgaGF2ZSBhIGxhcmdlIENNQSByZWdpb25cXG4gODI4OlxcdCAqIGFjdGl2ZS4gVGhpcyBDTUEgcmVnaW9uIHdpbGwgb25seSBiZSB1c2VkIGZvciBtb3ZhYmxlIHBhZ2VzIHdoaWNoIGFyZSBub3QgYVxcbiA4Mjk6XFx0ICogcHJvYmxlbSBmb3IgdXMgZHVyaW5nIEtITyBiZWNhdXNlIHdlIGNhbiBqdXN0IG1vdmUgdGhlbSBzb21ld2hlcmUgZWxzZS5cXG4gODMwOlxcdCAqL1xcbiA4MzE6XFx0c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG4gODMyOlxcdHtcXG4gODMzOlxcdFxcdHBoeXNfYWRkcl90IGFkZHIsIHNpemU7XFxuIDgzNDpcXHRcXHRpbnQgbmlkLCBpID0gMDtcXG4gODM1OlxcdFxcbiA4MzY6XFx0XFx0aWYgKCFraG9fZW5hYmxlKVxcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuO1xcbiA4Mzg6XFx0XFxuIDgzOTpcXHRcXHRzY3JhdGNoX3NpemVfdXBkYXRlKCk7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdC8qIEZJWE1FOiBkZWFsIHdpdGggbm9kZSBob3QtcGx1Zy9yZW1vdmUgKi9cXG4gODQyOlxcdFxcdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICsgMjtcXG4gODQzOlxcdFxcdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcXG4gODQ0OlxcdFxcdGtob19zY3JhdGNoID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcXG4gODQ1OlxcdFxcdGlmICgha2hvX3NjcmF0Y2gpIHtcXG4gODQ2OlxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxcXFxuXFxcIik7XFxuIDg0NzpcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2tobztcXG4gODQ4OlxcdFxcdH1cXG4gODQ5OlxcdFxcbiA4NTA6XFx0XFx0LypcXG4gODUxOlxcdFxcdCAqIENhbGN1bGF0ZSB0aGUgcGVyLW5vZGUgc2l6ZXMgYmVmb3JlIHJlc2VydmluZyBhbnkgc2NyYXRjaCBhcmVhcy5cXG4gODUyOlxcdFxcdCAqIG1lbWJsb2NrIGFsbG9jYXRpb25zIGFyZSBtYXJrZWQgTUVNQkxPQ0tfUlNSVl9LRVJOLCBzbyBjYWxjdWxhdGluZ1xcbiA4NTM6XFx0XFx0ICogdGhlbSBsYXRlciB3b3VsZCBjb3VudCB0aGUgbG93bWVtIGFuZCBnbG9iYWwgc2NyYXRjaCBhcmVhcyBhcyBrZXJuZWxcXG4gODU0OlxcdFxcdCAqIGFsbG9jYXRpb25zIGFuZCBzY2FsZSB0aGVtIGFnYWluLlxcbiA4NTU6XFx0XFx0ICovXFxuIDg1NjpcXHRcXHRpID0gMjtcXG4gODU3OlxcdFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcXG4gODU4OlxcdFxcdFxcdGtob19zY3JhdGNoW2krK10uc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9ub2RlKG5pZCk7XFxuIDg1OTpcXHRcXHRpID0gMDtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0LypcXG4gODYyOlxcdFxcdCAqIHJlc2VydmUgc2NyYXRjaCBhcmVhIGluIGxvdyBtZW1vcnkgZm9yIGxvd21lbSBhbGxvY2F0aW9ucyBpbiB0aGVcXG4gODYzOlxcdFxcdCAqIG5leHQga2VybmVsXFxuIDg2NDpcXHRcXHQgKi9cXG4gODY1OlxcdFxcdHNpemUgPSBzY3JhdGNoX3NpemVfbG93bWVtO1xcbiA4NjY6XFx0XFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsXFxuIDg2NzpcXHRcXHRcXHRcXHRcXHRcXHQgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7XFxuIDg2ODpcXHRcXHRpZiAoIWFkZHIpIHtcXG4gODY5OlxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgbG93bWVtIHNjcmF0Y2ggYnVmZmVyXFxcXG5cXFwiKTtcXG4gODcwOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9kZXNjO1xcbiA4NzE6XFx0XFx0fVxcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG4gODc0OlxcdFxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbiA4NzU6XFx0XFx0aSsrO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHQvKiByZXNlcnZlIGxhcmdlIGNvbnRpZ3VvdXMgYXJlYSBmb3IgYWxsb2NhdGlvbnMgd2l0aG91dCBuaWQgKi9cXG4gODc4OlxcdFxcdHNpemUgPSBzY3JhdGNoX3NpemVfZ2xvYmFsO1xcbiA4Nzk6XFx0XFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xcbiA4ODA6XFx0XFx0aWYgKCFhZGRyKSB7XFxuIDg4MTpcXHRcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBzY3JhdGNoIGJ1ZmZlclxcXFxuXFxcIik7XFxuIDg4MjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7XFxuIDg4MzpcXHRcXHR9XFxuIDg4NDpcXHRcXG4gODg1OlxcdFxcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xcbiA4ODY6XFx0XFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XFxuIDg4NzpcXHRcXHRpKys7XFxuIDg4ODpcXHRcXG4gODg5OlxcdFxcdC8qXFxuIDg5MDpcXHRcXHQgKiBMb29wIG92ZXIgbm9kZXMgdGhhdCBoYXZlIGJvdGggbWVtb3J5IGFuZCBhcmUgb25saW5lLiBTa2lwXFxuIDg5MTpcXHRcXHQgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIHNjcmF0Y2ggYXJlYXMgdGhlcmUuXFxuIDg5MjpcXHRcXHQgKi9cXG4gODkzOlxcdFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbiA4OTQ6XFx0XFx0XFx0c2l6ZSA9IGtob19zY3JhdGNoW2ldLnNpemU7XFxuIDg5NTpcXHRcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTLFxcbiA4OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0MCwgTUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRSxcXG4gODk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG5pZCwgdHJ1ZSk7XFxuIDg5ODpcXHRcXHRcXHRpZiAoIWFkZHIpIHtcXG4gODk5OlxcdFxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgbmlkICVkIHNjcmF0Y2ggYnVmZmVyXFxcXG5cXFwiLCBuaWQpO1xcbiA5MDA6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zY3JhdGNoX2FyZWFzO1xcbiA5MDE6XFx0XFx0XFx0fVxcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHRcXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG4gOTA0OlxcdFxcdFxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbiA5MDU6XFx0XFx0XFx0aSsrO1xcbiA5MDY6XFx0XFx0fVxcbiA5MDc6XFx0XFxuIDkwODpcXHRcXHRyZXR1cm47XFxuIDkwOTpcXHRcXG4gOTEwOlxcdGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM6XFxuIDkxMTpcXHRcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuIDkxMjpcXHRcXHRcXHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX3NjcmF0Y2hbaV0uYWRkciwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XFxuIDkxMzpcXHRlcnJfZnJlZV9zY3JhdGNoX2Rlc2M6XFxuIDkxNDpcXHRcXHRtZW1ibG9ja19mcmVlKGtob19zY3JhdGNoLCBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKSk7XFxuIDkxNTpcXHRlcnJfZGlzYWJsZV9raG86XFxuIDkxNjpcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFyZWEsIGRpc2FibGluZyBrZXhlYyBoYW5kb3ZlclxcXFxuXFxcIik7XFxuIDkxNzpcXHRcXHRraG9fZW5hYmxlID0gZmFsc2U7XFxuIDkxODpcXHR9XFxuIDkxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTE6NDk6MzkuMDcyMTE1OTA3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyNTMwNDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGtob19yZXNlcnZlX3NjcmF0Y2hgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBvciB2YXJpYWJsZSBpcyBhY3R1YWxseSB1c2VkLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBsb2NhdGUgYWxsIG9mIGl0cyBjYWxsIHNpdGVzLiBLbm93aW5nIHdoZXJlIGl0J3MgaW52b2tlZCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGFuZCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIHNlYXJjaCB0aHJvdWdoIHRoZSBjb2RlLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IGxldCdzIHNlZSB3aGF0IHRoZSBzZWFyY2ggcmVzdWx0cyB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTExLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OTo0MS4wOTc0MjQ4ODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NDkwMTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmVzZXJ2ZV9zY3JhdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9ODA2PWJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODIyLS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODIzOiAqIGtob19yZXNlcnZlX3NjcmF0Y2ggLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MjQtICpcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODMwLSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODMxOnN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MzIte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xOTUxPXZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTU1LVxcdGVsc2VcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5NTY6XFx0XFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDExOjQ5OjQzLjQ3MjMzMjM3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODM3MzU3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogYGtob19tZW1vcnlfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGVyZSBhcmUgd2UgaW5pdGlhbGl6aW5nIHRoaXMgYGtob19tZW1vcnlgIHN0cnVjdHVyZT9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHNldCB1cC4gS25vd2luZyB3aGVyZSBga2hvX21lbW9yeV9pbml0YCBpcyBpbnZva2VkIGlzIGNydWNpYWwgZm9yIGNvbXByZWhlbmRpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgbWVtb3J5IHN1YnN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgaXQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgc3RhdGUgdGhlIHN5c3RlbSBpcyBpbiB3aGVuIHRoZSBpbml0aWFsaXphdGlvbiBoYXBwZW5zLiBUaGlzIHdpbGwgaGVscCBtZSBjb250ZXh0dWFsaXplIGFueSBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHJlbGF0ZWQgdG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgZ2V0dGluZyBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbXBvbmVudCBvcGVyYXRlcyBhbmQgaG93IHRvIHRyb3VibGVzaG9vdCBpdCB3aGVuIHRoaW5ncyBpbmV2aXRhYmx5IGdvIHdyb25nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzcxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTE6NDk6NDUuMzU2MDcwMzU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzYxNjIxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX21lbW9yeV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zND1pbnQga2hvX3JldHJpZXZlX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgcGh5c19hZGRyX3QgKnBoeXMsIHNpemVfdCAqc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM1LVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNjp2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mzc6dm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTExNT1zdGF0aWMgaW5saW5lIGludCBraG9fcmV0cmlldmVfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCAqcGh5cyxcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjAtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjEyMTpzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjItXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjEyMzpzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE5MDk9ZnNfaW5pdGNhbGwoa2hvX2luaXQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTkxMC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5MTE6dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTEyLXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5NTE6dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTUyLXtcXG4tLVxcbm1tL21tX2luaXQuYz0yNjgwPXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxcbm1tL21tX2luaXQuYy0yNjgxLXtcXG5tbS9tbV9pbml0LmM6MjY4MjpcXHRraG9fbWVtb3J5X2luaXRfZWFybHkoKTtcXG5tbS9tbV9pbml0LmMtMjY4My1cXG4tLVxcbm1tL21tX2luaXQuYz0yNjk3PXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTI3MjEtXFx0ICovXFxubW0vbW1faW5pdC5jOjI3MjI6XFx0a2hvX21lbW9yeV9pbml0KCk7XFxubW0vbW1faW5pdC5jLTI3MjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDExOjQ5OjQ3Ljc5MjIzODU1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjMyNzYzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAqKlxuXG5Pa2F5LCBzbyBga2hvX3Jlc2VydmVfc2NyYXRjaGAgaXMgZXNzZW50aWFsbHkgdGhlIGBfX2luaXRgIGZ1bmN0aW9uIGNhbGxlZCBieSBga2hvX21lbW9yeV9pbml0KClgLCB3aGljaCBpdHNlbGYgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gY2FsbGVkIGZyb20gYG1tX2NvcmVfaW5pdCgpYCBkdXJpbmcgdGhlIGtlcm5lbCdzIGJvb3QgcHJvY2Vzcy4gU28sIGluaXRpYWxseSwgaXQgc291bmRzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGVhcmx5IGJvb3QgbWVtb3J5IGFsbG9jYXRpb24gdmlhIGBtZW1ibG9ja2AuIEJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBJcyB0aGlzICpwdXJlbHkqIGEgYm9vdC10aW1lIGZ1bmN0aW9uPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuXG5cblRpbWUgdG8gc2hpZnQgZ2VhcnMuIExldCdzIGRpZyBpbnRvIHRoZSBjb250ZXh0LiBXaGF0J3Mgc3l6a2FsbGVyIHRlc3RpbmcgaW4gcmVsYXRpb24gdG8gdGhpcz8gQW5kIEkgc2hvdWxkIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHdoYXQgbGl2ZXVwZGF0ZSBhbmQga2V4ZWNfaGFuZG92ZXIgYXJlIGRvaW5nIGFzIHRoaXMgY291bGQgYmUgYSByZWxhdGVkIHVzZSBjYXNlLlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgZ29vZCBsb29rIGF0IHRoZSBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZmxvdywgYmVjYXVzZSB0aGF0IG1pZ2h0IHJldmVhbCBzb21ldGhpbmcgaW1wb3J0YW50LiBIb3cgZG9lcyB0aGUgbGl2ZSB1cGRhdGUva2V4ZWMgaGFuZG92ZXIgcHJvY2VzcyB3b3JrIGluIHJlbGF0aW9uIHRvIG1lbW9yeT8gQXJlIHRoZXJlIHJ1bnRpbWUgY2FsbHMgYmVpbmcgbWFkZT9cblxuVWx0aW1hdGVseSwgdGhlIG1vbmV5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUncyBzb21lIGtpbmQgb2YgaW50ZXJhY3Rpb24gd2l0aCBga2hvX3NjcmF0Y2hgIGF0IHJ1bnRpbWUuIEFyZSB0aGVyZSBzeXNjYWxscywgaW9jdGxzLCBzeXNmcywgZGVidWdmcyBpbnRlcmZhY2VzLCBvciBldmVuIHRoZSBrZXhlYyBpbnRlcmZhY2UgaXRzZWxmLCB0aGF0IG1pZ2h0IGJlIHRvdWNoaW5nIHRoaXMgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbj8gSSBuZWVkIHRvIGtub3cuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGxhdW5jaCBhIGNvbXByZWhlbnNpdmUga2VybmVsLXdpZGUgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGtob19zY3JhdGNoYC4gVGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIHRydWUgZXh0ZW50IG9mIGl0cyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwNywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OTo1MC42NTU1MTc1NDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTkzMjA1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3NjcmF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTg9S2VybmVsIHBhcmFtZXRlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTMwMzMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MzAzNDpcXHRraG9fc2NyYXRjaD1cXHRbS0VYRUMsRUFSTFldXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMzAzNS1cXHRcXHRcXHRGb3JtYXQ6IGxsW0tNR10sbW1bS01HXSxubltLTUddIHwgbm4lXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q9MjI9VG8gdXNlIEtITywgcGxlYXNlIGJvb3QgdGhlIGtlcm5lbCB3aXRoIHRoZSBgYGtobz1vbmBgIGNvbW1hbmQgbGluZVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdDoyMzpwYXJhbWV0ZXIuIFlvdSBtYXkgdXNlIGBga2hvX3NjcmF0Y2hgYCBwYXJhbWV0ZXIgdG8gZGVmaW5lIHNpemUgb2YgdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0OjI0OnNjcmF0Y2ggcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fc2NyYXRjaD0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGFcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QtMjUtMTYgTWlCIGxvdyBtZW1vcnkgc2NyYXRjaCBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIHNjcmF0Y2ggcmVnaW9uLCBhbmQgMjU2IE1pQlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0PTE2PXRoZSBwcmVzZXJ2ZWQgc3RhdGUgZnJvbSBwcmUtZXhlYyBrZXJuZWwgdG8gcG9zdC1rZXhlYyBrZXJuZWwgYW5kIDpyZWY6YHNjcmF0Y2hcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q6MTc6bWVtb3J5IHJlZ2lvbnMgXFx1MDAzY2tob19zY3JhdGNoXFx1MDAzZWAgdG8gZW5zdXJlIGludGVncml0eSBvZiB0aGUgcHJlc2VydmVkIG1lbW9yeS5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtMTgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q9MzU9YW5kIHBvc3Qta2V4ZWMga2VybmVscy4gVGhpcyBBQkkgaXMgZGVmaW5lZCBieSBoZWFkZXIgZmlsZXMgaW5cXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdC00Mi1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q6NDM6Li4gX2tob19zY3JhdGNoOlxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdC00NC1cXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdD01OD1CeSBkZWZhdWx0LCBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnlcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q6NTk6YWxsb2NhdGVkIGR1cmluZyBib290LiBUaGUgYGBraG9fc2NyYXRjaGBgIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIG1heSBiZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdC02MC11c2VkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIHNpemUgb2YgdGhlIHNjcmF0Y2ggcmVnaW9ucy5cXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdD02NT1tb3ZhYmxlIHBhZ2VzIGNhbiBiZSBsb2NhdGVkIGluc2lkZS5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtNjYtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0OjY3OkFmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0LTY4LWluc3RlYWQgcmV1c2UgdGhlIGV4YWN0IHNhbWUgcmVnaW9uIHRoYXQgd2FzIG9yaWdpbmFsbHkgYWxsb2NhdGVkLiBUaGlzIGFsbG93c1xcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM9NzcwPXN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNzcxLXtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo3NzI6XFx0c3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzMtXFx0c3RydWN0IHNldHVwX2RhdGEgKnB0cjtcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc4My1cXHRcXHRcXHRraG8gPSAoc3RydWN0IGtob19kYXRhICopKHVuc2lnbmVkIGxvbmcpcHRyLVxcdTAwM2VkYXRhO1xcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjc4NDpcXHRcXHRcXHRraG9fc2NyYXRjaCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVxcdTAwM2VzY3JhdGNoX2FkZHI7XFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6Nzg1OlxcdFxcdFxcdG5yX2FyZWFzID0ga2hvLVxcdTAwM2VzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03ODYtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03OTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2FyZWFzOyBpKyspIHtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo3OTY6XFx0XFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXFx1MDAyNmtob19zY3JhdGNoW2ldO1xcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc5Ny1cXHRcXHRzdHJ1Y3QgbWVtX3ZlY3RvciByZWdpb24gPSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jPTEyODg9X19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTM2NS1cXHQgKi9cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jOjEzNjY6XFx0bWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCgwLCBTWl8xTSk7XFxuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzY3LVxcbi0tXFxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jPTQ3PXZvaWQgX19pbml0IHJlc2VydmVfcmVhbF9tb2RlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmMtNjgtXFxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jOjY5OlxcdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmMtNzAtfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYz0xNTk9c3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYy0xODAtXFx0XFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYzoxODE6XFx0XFx0XFx0aWYgKCFtZW1ibG9ja19pc19raG9fc2NyYXRjaChyKSkge1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMtMTgyLVxcdFxcdFxcdFxcdG1lbWJsb2NrX3JlbW92ZShyLVxcdTAwM2ViYXNlLCByLVxcdTAwM2VzaXplKTtcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaC02LVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaDo3OnN0cnVjdCBraG9fc2NyYXRjaCB7XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oLTgtXFx0cGh5c19hZGRyX3QgYWRkcjtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zOT12b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cyxcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00MS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NDI6Ym9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNDMtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjQ0OnN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQ2LXtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NDc6XFx0aWYgKGtob19zY3JhdGNoX292ZXJsYXAoUEZOX1BIWVMocGZuKSwgcGFnZWJsb2NrX25yX3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00OC1cXHRcXHRyZXR1cm4gTUlHUkFURV9DTUE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MTI1PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEyOS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTMwOnN0YXRpYyBpbmxpbmUgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzEte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEzNC1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTM1OnN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBlbnVtIG1pZ3JhdGV0eXBlIG10KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTE2MD1pbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19rZXJuKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDoxNjE6aW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjE2MjppbnQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTE2My1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaD0yOTk9c3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2RyaXZlcl9tYW5hZ2VkKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMzAzLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDozMDQ6c3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2tob19zY3JhdGNoKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTMwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9NjE0PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW10ZXN0X3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNjE3LSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NjE4OnZvaWQgbWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjYxOTp2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTYyMC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo2MjE6c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo2MjI6c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCkgeyB9XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTYyMy0jZW5kaWZcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjUxPXN0YXRpYyB2b2lkIF9faW5pdCAqa2hvX2dldF9tZW1fbWFwKGNvbnN0IHZvaWQgKmZkdClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjY1LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NjY2OnN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2Njc6dW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY2OC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjcyLSAqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NzM6ICoga2hvX3NjcmF0Y2g9TiVcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzctICpcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY3ODogKiBraG9fc2NyYXRjaD1sW0tNR10sbltLTUddLG1bS01HXVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjc5LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTY4Nz1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTc1Mi19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo3NTM6ZWFybHlfcGFyYW0oXFxcImtob19zY3JhdGNoXFxcIiwga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy03NTQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTc4OD1zdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IHNjcmF0Y2hfc2l6ZV9ub2RlKGludCBuaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTgwNS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjgwNjpib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MDcte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MTAtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MTE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSsrKSB7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MTI6XFx0XFx0c2NyYXRjaF9zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHI7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MTM6XFx0XFx0c2NyYXRjaF9lbmQgPSBraG9fc2NyYXRjaFtpXS5hZGRyICsga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTgxNC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9ODMxPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg0MS1cXHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NDI6XFx0a2hvX3NjcmF0Y2hfY250ID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSkgKyAyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODQzOlxcdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjg0NDpcXHRraG9fc2NyYXRjaCA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NDU6XFx0aWYgKCFraG9fc2NyYXRjaCkge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODQ2LVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg1Ny1cXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NTg6XFx0XFx0a2hvX3NjcmF0Y2hbaSsrXS5zaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg1OS1cXHRpID0gMDtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODcyLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODczOlxcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODc0OlxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODc1LVxcdGkrKztcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODg0LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODg1OlxcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODg2OlxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODg3LVxcdGkrKztcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODkzLVxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODk0OlxcdFxcdHNpemUgPSBraG9fc2NyYXRjaFtpXS5zaXplO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODk1LVxcdFxcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkwMi1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkwMzpcXHRcXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkwNDpcXHRcXHRraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkwNS1cXHRcXHRpKys7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkxMS1cXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MTI6XFx0XFx0bWVtYmxvY2tfcGh5c19mcmVlKGtob19zY3JhdGNoW2ldLmFkZHIsIGtob19zY3JhdGNoW2ldLnNpemUpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTEzLWVycl9mcmVlX3NjcmF0Y2hfZGVzYzpcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkxNDpcXHRtZW1ibG9ja19mcmVlKGtob19zY3JhdGNoLCBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MTUtZXJyX2Rpc2FibGVfa2hvOlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05NjQ9c3RhdGljIGludCBfX2luaXQga2hvX2V4dF9tYXJrX3NjcmF0Y2godW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk3MC1cXHRpZiAoc3RhcnQgXFx1MDAzZSAqcHJldl9lbmQpIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk3MTpcXHRcXHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTcyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEwMDU9c3RhdGljIHZvaWQgX19pbml0IGtob19leHRlbmRfc2NyYXRjaCh2b2lkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQzLVxcdGlmIChwcmV2X2VuZCBcXHUwMDNjIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDQ0OlxcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ1LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMTU4PWludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2NC1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTY1OlxcdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTIzMz1pbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjQyLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNDM6XFx0ICAgIFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChzdGFydF9wZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNDQtXFx0XFx0XFx0XFx0XFx0bnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpKSB7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE4Mjk9c3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTg2OC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE4Njk6XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKykge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTg3MDpcXHRcXHR1bnNpZ25lZCBsb25nIGJhc2VfcGZuID0gUEhZU19QRk4oa2hvX3NjcmF0Y2hbaV0uYWRkcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxODcxOlxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fc2NyYXRjaFtpXS5zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODcyLVxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODgxLVxcdFxcdCAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTg4MjpcXHRcXHRrbWVtbGVha19pZ25vcmVfcGh5cyhraG9fc2NyYXRjaFtpXS5hZGRyKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE4ODMtXFx0XFx0Zm9yIChwZm4gPSBiYXNlX3BmbjsgcGZuIFxcdTAwM2MgYmFzZV9wZm4gKyBjb3VudDtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTg5OS1cXHRraG9fb3V0LmZkdCA9IE5VTEw7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTAwOlxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5MDE6XFx0XFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19zY3JhdGNoW2ldLmFkZHIpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTkwMjpcXHRcXHR2b2lkICplbmQgPSBzdGFydCArIGtob19zY3JhdGNoW2ldLnNpemU7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTAzLVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xOTExPXZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdF9lYXJseSh2b2lkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTI4LVxcdC8qXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTI5OlxcdCAqIGtob19zY3JhdGNoX292ZXJsYXAoKSBuZWVkcyBraG9fc2NyYXRjaCB0byBiZSBpbml0aWFsaXplZC4gSXRcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MzAtXFx0ICogaXMgdXNlZCBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTMyLVxcdCAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTkzMzpcXHRraG9fc2NyYXRjaCA9IHBoeXNfdG9fdmlydChraG9faW4uc2NyYXRjaF9waHlzKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MzQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE5NTk9dm9pZCBfX2luaXQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk2MS17XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTYyOlxcdHVuc2lnbmVkIGludCBzY3JhdGNoX2NudCA9IHNjcmF0Y2hfbGVuIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTYzOlxcdHN0cnVjdCBraG9fc2NyYXRjaCAqc2NyYXRjaCA9IE5VTEw7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTY0LVxcdHBoeXNfYWRkcl90IG1lbV9tYXBfcGh5cztcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAwNC1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHNjcmF0Y2hfY250OyBpKyspIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMDU6XFx0XFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXFx1MDAyNnNjcmF0Y2hbaV07XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDA2LVxcdFxcdHU2NCBzaXplID0gYXJlYS1cXHUwMDNlc2l6ZTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAwOC1cXHRcXHRtZW1ibG9ja19hZGQoYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDA5OlxcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDEwLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAyNi1cXHQgKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMjc6XFx0bWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkoKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwMjgtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwMzAtXFx0a2hvX2luLnNjcmF0Y2hfcGh5cyA9IHNjcmF0Y2hfcGh5cztcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMzE6XFx0a2hvX3NjcmF0Y2hfY250ID0gc2NyYXRjaF9jbnQ7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDMyLVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0yMDQ3PWludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwNTctXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDU4OlxcdHNjcmF0Y2hfc2l6ZSA9IHNpemVvZigqa2hvX3NjcmF0Y2gpICoga2hvX3NjcmF0Y2hfY250O1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA1OS1cXHRzY3JhdGNoID0gKHN0cnVjdCBrZXhlY19idWYpe1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA2MC1cXHRcXHQuaW1hZ2UgPSBpbWFnZSxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwNjE6XFx0XFx0LmJ1ZmZlciA9IGtob19zY3JhdGNoLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA2Mi1cXHRcXHQuYnVmc3ogPSBzY3JhdGNoX3NpemUsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTIwNzc9c3RhdGljIGludCBraG9fd2Fsa19zY3JhdGNoKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwODItXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDgzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKykge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA4NC1cXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzID0ge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjA4NTpcXHRcXHRcXHQuc3RhcnQgPSBraG9fc2NyYXRjaFtpXS5hZGRyLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjA4NjpcXHRcXHRcXHQuZW5kID0ga2hvX3NjcmF0Y2hbaV0uYWRkciArIGtob19zY3JhdGNoW2ldLnNpemUgLSAxLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA4Ny1cXHRcXHR9O1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jPTgwPXN0YXRpYyBpbnQgc2NyYXRjaF9waHlzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYy04MS17XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jOjgyOlxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jOjgzOlxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX3NjcmF0Y2hbaV0uYWRkcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jLTg0LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jPTg5PXN0YXRpYyBpbnQgc2NyYXRjaF9sZW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jLTkwLXtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmM6OTE6XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKylcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmM6OTI6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiMHglbGx4XFxcXG5cXFwiLCBraG9fc2NyYXRjaFtpXS5zaXplKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMtOTMtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTE5PXN0cnVjdCBraG9fZGVidWdmcyB7fTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMjEtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDoyMjpleHRlcm4gc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjIzOmV4dGVybiB1bnNpZ25lZCBpbnQga2hvX3NjcmF0Y2hfY250O1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMjQtXFxuLS1cXG5tbS9tZW1ibG9jay5jPTExND11bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3BmbjtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTE3LS8qIFdoZW4gc2V0IHRvIHRydWUsIG9ubHkgYWxsb2NhdGUgZnJvbSBNRU1CTE9DS19LSE9fU0NSQVRDSCByYW5nZXMgKi9cXG5tbS9tZW1ibG9jay5jOjExODpzdGF0aWMgYm9vbCBraG9fc2NyYXRjaF9vbmx5O1xcbm1tL21lbWJsb2NrLmMtMTE5LSNlbHNlXFxubW0vbWVtYmxvY2suYzoxMjA6I2RlZmluZSBraG9fc2NyYXRjaF9vbmx5IGZhbHNlXFxubW0vbWVtYmxvY2suYy0xMjEtI2VuZGlmXFxuLS1cXG5tbS9tZW1ibG9jay5jPTE4MD1zdGF0aWMgZW51bSBtZW1ibG9ja19mbGFncyBfX2luaXRfbWVtYmxvY2sgY2hvb3NlX21lbWJsb2NrX2ZsYWdzKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTE4Mi1cXHQvKiBza2lwIG5vbi1zY3JhdGNoIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi9cXG5tbS9tZW1ibG9jay5jOjE4MzpcXHRpZiAoa2hvX3NjcmF0Y2hfb25seSlcXG5tbS9tZW1ibG9jay5jLTE4NC1cXHRcXHRyZXR1cm4gTUVNQkxPQ0tfS0hPX1NDUkFUQ0g7XFxuLS1cXG5tbS9tZW1ibG9jay5jPTExNzE9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX2tlcm4ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTE3Ny0vKipcXG5tbS9tZW1ibG9jay5jOjExNzg6ICogbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCAtIE1hcmsgYSBtZW1vcnkgcmVnaW9uIGFzIE1FTUJMT0NLX0tIT19TQ1JBVENILlxcbm1tL21lbWJsb2NrLmMtMTE3OS0gKiBAYmFzZTogdGhlIGJhc2UgcGh5cyBhZGRyIG9mIHRoZSByZWdpb25cXG4tLVxcbm1tL21lbWJsb2NrLmMtMTE4Ni0gKi9cXG5tbS9tZW1ibG9jay5jOjExODc6X19pbml0IGludCBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxubW0vbWVtYmxvY2suYy0xMTg4LXtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTE5My0vKipcXG5tbS9tZW1ibG9jay5jOjExOTQ6ICogbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2ggLSBDbGVhciBNRU1CTE9DS19LSE9fU0NSQVRDSCBmbGFnIGZvciBhXFxubW0vbWVtYmxvY2suYy0xMTk1LSAqIHNwZWNpZmllZCByZWdpb24uXFxuLS1cXG5tbS9tZW1ibG9jay5jLTEyMDAtICovXFxubW0vbWVtYmxvY2suYzoxMjAxOl9faW5pdCBpbnQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG5tbS9tZW1ibG9jay5jLTEyMDIte1xcbi0tXFxubW0vbWVtYmxvY2suYz0xMjA3PXN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTI0MS1cXHQgKi9cXG5tbS9tZW1ibG9jay5jOjEyNDI6XFx0aWYgKChmbGFncyBcXHUwMDI2IE1FTUJMT0NLX0tIT19TQ1JBVENIKSBcXHUwMDI2XFx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gobSkpXFxubW0vbWVtYmxvY2suYy0xMjQzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWVtYmxvY2suYz0xNzc3PXZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfaHVnZXRsYihwaHlzX2FkZHJfdCBzaXplLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZClcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTgxNy1cXHQgKi9cXG5tbS9tZW1ibG9jay5jOjE4MTg6XFx0aWYgKGtob19zY3JhdGNoX292ZXJsYXAoYWRkciwgc2l6ZSkpIHtcXG5tbS9tZW1ibG9jay5jLTE4MTktXFx0XFx0aWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNDk0PXZvaWQgX19pbml0IG1lbWJsb2NrX2ZyZWVfYWxsKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI1MDAtXFxubW0vbWVtYmxvY2suYzoyNTAxOlxcdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkoKTtcXG5tbS9tZW1ibG9jay5jLTI1MDItXFx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xcbi0tXFxubW0vbWVtYmxvY2suYz0yNTc5PWludCByZXNlcnZlX21lbV9yZWxlYXNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjU5OS0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXFxubW0vbWVtYmxvY2suYzoyNjAwOl9faW5pdCB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXFxubW0vbWVtYmxvY2suYy0yNjAxLXtcXG5tbS9tZW1ibG9jay5jOjI2MDI6XFx0a2hvX3NjcmF0Y2hfb25seSA9IHRydWU7XFxubW0vbWVtYmxvY2suYy0yNjAzLX1cXG5tbS9tZW1ibG9jay5jLTI2MDQtXFxubW0vbWVtYmxvY2suYzoyNjA1Ol9faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZClcXG5tbS9tZW1ibG9jay5jLTI2MDYte1xcbm1tL21lbWJsb2NrLmM6MjYwNzpcXHRraG9fc2NyYXRjaF9vbmx5ID0gZmFsc2U7XFxubW0vbWVtYmxvY2suYy0yNjA4LX1cXG4tLVxcbm1tL21tX2luaXQuYz02ODE9c3RhdGljIF9fbWVtaW5pdCB2b2lkIHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTY4Ni1cXHRmb3IgKHBmbiA9IHBhZ2VibG9ja19hbGlnbihwZm4pOyBwZm4gXFx1MDAzYyBlbmQ7IHBmbiArPSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcXG5tbS9tbV9pbml0LmM6Njg3OlxcdFxcdGVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fc2NyYXRjaF9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTtcXG5tbS9tbV9pbml0LmMtNjg4LVxcbi0tXFxubW0vbW1faW5pdC5jPTc2NT1zdGF0aWMgdm9pZCBfX21lbWluaXQgX19pbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtNzc2LVxcdFxcdGVudW0gbWlncmF0ZXR5cGUgbXQgPVxcbm1tL21tX2luaXQuYzo3Nzc6XFx0XFx0XFx0a2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBNSUdSQVRFX01PVkFCTEUpO1xcbm1tL21tX2luaXQuYy03NzgtXFx0XFx0aW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGZuX3RvX3BhZ2UocGZuKSwgbXQsIGZhbHNlKTtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaD0zOT1zdGF0aWMgaW5saW5lIGJvb2wgX19pc19rZXJuZWwodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oLTQ4LVxcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaDo0OTpzdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgtNTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OTo1Mi45MTQ4NTc0NjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA5NzU3MTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBga2hvX3Jlc2VydmVfc2NyYXRjaGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplZCBhcyBhIGBzdGF0aWMgdm9pZCBfX2luaXRgIGZ1bmN0aW9uLiBUaGUgYF9faW5pdGAgYXR0cmlidXRlIGlzIGEgcmVkIGZsYWcsIHN1Z2dlc3RpbmcgaXQncyBleGVjdXRlZCBvbmx5IGR1cmluZyB0aGUga2VybmVsIGluaXRpYWxpemF0aW9uIHBoYXNlLiBJIHF1aWNrbHkgdHJhY2tlZCB0aGUgY2FsbCBjaGFpbjogYGtob19tZW1vcnlfaW5pdGAgdGhlbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIFRoZW4gYG1tX2NvcmVfaW5pdGAgY2FsbHMgYGtob19tZW1vcnlfaW5pdGAgYW5kIGBtbV9jb3JlX2luaXRgIGlzIGNhbGxlZCBieSBgc3RhcnRfa2VybmVsYC4gQ2xlYXJseSB0aGlzIGlzIGFsbCBkdXJpbmcgZWFybHkgYm9vdC5cblxuTXkgbmV4dCBpbW1lZGlhdGUgcXVlc3Rpb24gd2FzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiwgb3IgYW55IHBhcnQgb2YgdGhpcyBjb2RlcGF0aCwgY291bGQgYmUgcmVhY2hlZCBkdXJpbmcgcnVudGltZSwgZXNwZWNpYWxseSBieSBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIG5vLiBgX19pbml0YCBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIGluaXRpYWwgUkFNIGRpc2ssIGV4ZWN1dGVkIG9uY2UsIGFuZCB0aGVpciBtZW1vcnkgaXMgZnJlZWQgYnkgYGZyZWVfaW5pdG1lbSgpYCBiZWZvcmUgdXNlcnNwYWNlIGV2ZW4gYmVnaW5zLCB0aHVzLCBtYWtpbmcgdGhlIGZ1bmN0aW9ucyBjb21wbGV0ZWx5IGluYWNjZXNzaWJsZSBhZnRlciB0aGUgc3lzdGVtIGlzIGZ1bGx5IGJvb3RlZC4gRnV6emluZyB3b3VsZCBiZSB1bmFibGUgdG8gaW52b2tlIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCB2aWEgYW55IHN5c2NhbGwsIElPQ1RMLCB2aXJ0dWFsIGRldmljZSwgb3Igc3lzZnMgaW50ZXJhY3Rpb24uXG5cblRvIGNvbmZpcm0gdGhpcywgSSBkb3VibGUtY2hlY2tlZCB0aGUgZGlmZiBwcm92aWRlZCB0byBlbnN1cmUgbm90aGluZyBlbHNlIHdhcyBtb2RpZmllZCBpbiB0aGUgY29tbWl0LCB0byBlbGltaW5hdGUgYW55IGRvdWJ0LiBJdCdzIGNvbmZpbmVkIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIEkgdGhlbiB3ZW50IGJhY2sgYW5kIHZlcmlmaWVkIHdoZXJlIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBjYWxsZWQsIGFuZCBmb3VuZCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgaW4gYGtob19tZW1vcnlfaW5pdGAgYW5kIGZyb20gdGhlIHNhbWUgZmlsZS5cblxuSSBjb25zaWRlcmVkIHdoZXRoZXIgdGhpcyBLSE8gZWFybHkgYm9vdCBzY3JhdGNoIHJlc2VydmF0aW9uLCB3aGljaCByZWxpZXMgb24gbWVtYmxvY2sgYWxsb2NhdGlvbnMgKGBtZW1ibG9ja19hbGxvY2AsIGBtZW1ibG9ja19waHlzX2FsbG9jYCwgZXRjLikgYmVmb3JlIHRoZSBidWRkeSBhbGxvY2F0b3IgaXMgaW5pdGlhbGl6ZWQsIHdvdWxkIGJlIGEgZmFjdG9yLiBUaGUgY29uY2x1c2lvbiByZW1haW5lZCB1bmNoYW5nZWQ6IGFmdGVyIGJvb3QgY29tcGxldGlvbiwgdGhlIGAuaW5pdC50ZXh0YCBzZWN0aW9uIGNvbnRhaW5pbmcgdGhpcyBmdW5jdGlvbiBpcyB1bm1hcHBlZCBhbmQgZnJlZWQuXG5cbkkgdGhlbiByZXZpc2l0ZWQgdGhlIFwiV29ydGhGdXp6aW5nXCIgY3JpdGVyaWEgYW5kIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgXCJ1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHNcIiBjYXRlZ29yeSBzcGVjaWZpY2FsbHkgaW5jbHVkZXMgY29kZSBleGVjdXRlZCBvbmx5IGR1cmluZyBkcml2ZXIgdGVhcmRvd24sIHBoeXNpY2FsIGhvdC11bnBsdWcsIG9yIG9uIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0LiBUaGlzIG1hZGUgbWUgdGhpbmsgYWJvdXQgd2hldGhlciBlYXJseSBib290IGBfX2luaXRgIGNvZGUgY291bGQgZXZlbiBiZSBjb25zaWRlcmVkIGJ5IHN5emthbGxlci5cblxuVWx0aW1hdGVseSwgc3l6a2FsbGVyLCBydW5uaW5nIGluIHVzZXJzcGFjZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgaXMgZGVzaWduZWQgdG8gZXhlY3V0ZSB0ZXN0IHByb2dyYW1zLCB3aGljaCB0cmFuc2xhdGUgdG8gc3lzY2FsbCBzZXF1ZW5jZXMuIEl0IGlzLCB0aGVyZWZvcmUsIHVuYWJsZSB0byByZWFjaCB0aGUgYF9faW5pdGAgZnVuY3Rpb25zIHRoYXQgcnVuIG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCBhcmUgZnJlZWQgYmVmb3JlIHN5emthbGxlciBldmVuIGJlZ2lucyB0byBydW4uIFRoZXJlZm9yZSwgYGtob19yZXNlcnZlX3NjcmF0Y2hgIGlzIG5vdCByZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjE1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowMC4wMTI0MzU4NjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzM0MDU2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtFWEVDX0hBTkRPVkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9saXZldXBkYXRlL0tjb25maWc9Mz1tZW51IFxcXCJMaXZlIFVwZGF0ZSBhbmQgS2V4ZWMgSGFuZE92ZXJcXFwiXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy00LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6NTpjb25maWcgS0VYRUNfSEFORE9WRVJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTYtXFx0Ym9vbCBcXFwia2V4ZWMgaGFuZG92ZXJcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE3LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6MTg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xOS1cXHRib29sIFxcXCJFbmFibGUgS2V4ZWMgSGFuZG92ZXIgZGVidWcgY2hlY2tzXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yNi1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjI3OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzozODpjb25maWcgS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkVuYWJsZSBrZXhlYyBoYW5kb3ZlciBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowMi4zODU4NTQ2NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4ODY5NzIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBMaXZlIFVwZGF0ZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbGl2ZSB1cGRhdGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgdHlwZSBvZiB0aGluZyB3b3VsZCBiZSB1bmRlciBga2VybmVsL2AuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGhlYWQgZGlyZWN0bHkgdG8gYGtlcm5lbC9saXZldXBkYXRlL0tjb25maWdgLiBUaGF0IGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB0aGUgYmVkcm9jayBmb3IgZW5hYmxpbmcsIGRpc2FibGluZywgYW5kIGN1c3RvbWl6aW5nIHRoZSBsaXZlIHVwZGF0ZSBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkIHRoZXJlLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBnaXZlIG1lIHRoZSBoaWdoLWxldmVsIHBpY3R1cmUgYmVmb3JlIEkgaGF2ZSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowNC4zNzQ1NTQ1NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJMaXZlIFVwZGF0ZSBhbmQgS2V4ZWMgSGFuZE92ZXJcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwia2V4ZWMgaGFuZG92ZXJcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVIgXFx1MDAyNlxcdTAwMjYgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXFxuICAgODpcXHRcXHRzZWxlY3QgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG4gICA5OlxcdFxcdHNlbGVjdCBLRVhFQ19GSUxFXFxuICAxMDpcXHRcXHRzZWxlY3QgTElCRkRUXFxuICAxMTpcXHRcXHRzZWxlY3QgQ01BXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIEFsbG93IGtleGVjIHRvIGhhbmQgb3ZlciBzdGF0ZSBhY3Jvc3Mga2VybmVscyBieSBnZW5lcmF0aW5nIGFuZFxcbiAgMTQ6XFx0XFx0ICBwYXNzaW5nIGFkZGl0aW9uYWwgbWV0YWRhdGEgdG8gdGhlIHRhcmdldCBrZXJuZWwuIFRoaXMgaXMgdXNlZnVsXFxuICAxNTpcXHRcXHQgIHRvIGtlZXAgZGF0YSBvciBzdGF0ZSBhbGl2ZSBhY3Jvc3MgdGhlIGtleGVjLiBGb3IgdGhpcyB0byB3b3JrLFxcbiAgMTY6XFx0XFx0ICBib3RoIHNvdXJjZSBhbmQgdGFyZ2V0IGtlcm5lbHMgbmVlZCB0byBoYXZlIHRoaXMgb3B0aW9uIGVuYWJsZWQuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR1xcbiAgMTk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEtleGVjIEhhbmRvdmVyIGRlYnVnIGNoZWNrc1xcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gS0VYRUNfSEFORE9WRVJcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBleHRyYSBzYW5pdHkgY2hlY2tzIGZvciB0aGUgS2V4ZWMgSGFuZG92ZXJcXG4gIDIzOlxcdFxcdCAgc3Vic3lzdGVtLiBTaW5jZSwgS0hPIHBlcmZvcm1hbmNlIGlzIGNydWNpYWwgaW4gbGl2ZSB1cGRhdGVcXG4gIDI0OlxcdFxcdCAgc2NlbmFyaW9zIGFuZCB0aGUgZXh0cmEgY29kZSBtaWdodCBiZSBhZGRpbmcgb3ZlcmhlYWQgaXQgaXNcXG4gIDI1OlxcdFxcdCAgb25seSBvcHRpb25hbGx5IGVuYWJsZWQuXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXFxuICAyODpcXHRcXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS0VYRUNfSEFORE9WRVJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gS0VYRUNfSEFORE9WRVJcXG4gIDMxOlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBBbGxvdyB0byBjb250cm9sIGtleGVjIGhhbmRvdmVyIGRldmljZSB0cmVlIHZpYSBkZWJ1Z2ZzXFxuICAzNDpcXHRcXHQgIGludGVyZmFjZSwgaS5lLiBmaW5hbGl6ZSB0aGUgc3RhdGUgb3IgYWJvcnRpbmcgdGhlIGZpbmFsaXphdGlvbi5cXG4gIDM1OlxcdFxcdCAgQWxzbywgZW5hYmxlcyBpbnNwZWN0aW5nIHRoZSBLSE8gZmR0IHRyZWVzIHdpdGggdGhlIGRlYnVnZnMgYmluYXJ5XFxuICAzNjpcXHRcXHQgIGJsb2JzLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBrZXhlYyBoYW5kb3ZlciBieSBkZWZhdWx0XFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBLRVhFQ19IQU5ET1ZFUlxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBFbmFibGUgS2V4ZWMgSGFuZG92ZXIgYnkgZGVmYXVsdC4gVGhpcyBhdm9pZHMgdGhlIG5lZWQgdG9cXG4gIDQzOlxcdFxcdCAgZXhwbGljaXRseSBwYXNzICdraG89b24nIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQgIFRoaXMgaXMgdXNlZnVsIGZvciBzeXN0ZW1zIHdoZXJlIEtITyBpcyBhIHByZXJlcXVpc2l0ZSBmb3Igb3RoZXJcXG4gIDQ2OlxcdFxcdCAgZmVhdHVyZXMsIHN1Y2ggYXMgTGl2ZSBVcGRhdGUsIGVuc3VyaW5nIHRoZSBtZWNoYW5pc20gaXMgYWx3YXlzXFxuICA0NzpcXHRcXHQgIGFjdGl2ZS5cXG4gIDQ4OlxcdFxcbiAgNDk6XFx0XFx0ICBUaGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gc3RpbGwgYmUgb3ZlcnJpZGRlbiBhdCBib290IHRpbWUgYnlcXG4gIDUwOlxcdFxcdCAgcGFzc2luZyAna2hvPW9mZicuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDExOjUwOjA0LjM3NDYyNTk4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjM1NTkyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBga2hvX3Jlc2VydmVfc2NyYXRjaCgpYCwgYW4gYF9faW5pdGAgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIEl0cyByb2xlIGlzIHRvIGNhbGN1bGF0ZSBzY3JhdGNoIHNpemVzIHBlciBub2RlICpiZWZvcmUqIHJlc2VydmluZyBsb3dtZW0gYW5kIGdsb2JhbCBzY3JhdGNoIGFyZWFzLiBUaGlzIG9wdGltaXphdGlvbiBhdm9pZHMgdHJlYXRpbmcgdGhvc2UgYXJlYXMgYXMga2VybmVsIGFsbG9jYXRpb25zIHdoZW4gc2NhbGluZyBwZXItbm9kZSBzaXplcywgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5leHQsIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHRoaXMgZnVuY3Rpb24gYmUgcmVhY2hlZCBhbmQgZnV6emVkIGJ5IHN5emthbGxlciBkdXJpbmcgcnVudGltZT8gTm8uIFRoZSBgX19pbml0YCBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQuIFRoZSBjYWxsIGNoYWluIGlzIHZlcnkgY2xlYXI6IGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBpbnZva2VkIGR1cmluZyBlYXJseSBib290IGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgc3RhcnRfa2VybmVsYCAtXHUwMDNlIGBtbV9jb3JlX2luaXRgIC1cdTAwM2UgYGtob19tZW1vcnlfaW5pdGAgLVx1MDAzZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIE1vcmVvdmVyLCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uIGlzIGV4cGxpY2l0bHkgZnJlZWQgYnkgYGZyZWVfaW5pdG1lbSgpYCBiZWZvcmUgdXNlcnNwYWNlIGV2ZW4gc3RhcnRzLiBTeXprYWxsZXIsIGFzIHdlIGtub3csIG9wZXJhdGVzIGJ5IGZ1enppbmcgc3lzY2FsbHMgYW5kIHVzZXItc3BhY2UgaW50ZXJmYWNlcyBpbiBhIHJ1bm5pbmcga2VybmVsLiBUaGUgYC5pbml0LnRleHRgIGNvZGUgaGFzIGJlZW4gZXhlY3V0ZWQgYW5kIGZyZWVkLCBtYWtpbmcgdGhlIHRhcmdldCB1bnJlYWNoYWJsZSB0byB0aGUgZnV6emVyLlxuXG5UaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIG11c3QgYmUgc2V0IHRvIGZhbHNlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBvcHRpb25zIGFyZSBpcnJlbGV2YW50IGluIHRoaXMgc2NlbmFyaW8sIHNvIHRoZXkgc2hvdWxkIGJlIG51bGwgb3IgYW4gZW1wdHkgbGlzdC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCdzIHF1aWNrbHkgcmUtaXRlcmF0ZTogV2UgYXJlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpbiBga2V4ZWNfaGFuZG92ZXIuY2AuIEl0IGlzIGEgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IHRhZ2dlZCBhcyBgX19pbml0YCwgYW5kIGl0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290LCBwcmlvciB0byB1c2VyLXNwYWNlIGV4ZWN1dGlvbi4gIFN5emthbGxlciBmb2N1c2VzIG9uIHRoZSBydW4tdGltZSBrZXJuZWwgc3RhdGUsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSB0byBpdHMgZnV6emluZyBwcm9jZXNzLlxuXG5BbHJpZ2h0LCB0aGF0J3Mgcm9jayBzb2xpZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg2NSwiT3V0cHV0VG9rZW5zIjoxMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowOC42MTAyMjI1MTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGtob19yZXNlcnZlX3NjcmF0Y2goKSwgYW4gX19pbml0IGZ1bmN0aW9uIGluIGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgdGhhdCBleGVjdXRlcyBleGNsdXNpdmVseSBkdXJpbmcgZWFybHkgYm9vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKHZpYSBtbV9jb3JlX2luaXQpIGFuZCBpcyBmcmVlZCBiZWZvcmUgdXNlcnNwYWNlIGV4ZWN1dGlvbi4gQmVjYXVzZSB0aGlzIGNvZGUgY2Fubm90IGJlIHRyaWdnZXJlZCBhdCBydW50aW1lIGJ5IHN5c2NhbGxzLCBpb2N0bHMsIG9yIHVzZXItc3BhY2UgaW50ZXJmYWNlcywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHRvIHRoZSBmdXp6ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGtob19yZXNlcnZlX3NjcmF0Y2goKSwgYW4gX19pbml0IGZ1bmN0aW9uIGluIGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgdGhhdCBleGVjdXRlcyBleGNsdXNpdmVseSBkdXJpbmcgZWFybHkgYm9vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKHZpYSBtbV9jb3JlX2luaXQpIGFuZCBpcyBmcmVlZCBiZWZvcmUgdXNlcnNwYWNlIGV4ZWN1dGlvbi4gQmVjYXVzZSB0aGlzIGNvZGUgY2Fubm90IGJlIHRyaWdnZXJlZCBhdCBydW50aW1lIGJ5IHN5c2NhbGxzLCBpb2N0bHMsIG9yIHVzZXItc3BhY2UgaW50ZXJmYWNlcywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHRvIHRoZSBmdXp6ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowOC42MTAyNjQ5OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdm9s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 11:33:02 +0000 UTC FinishedAt: 2026-09-05 11:50:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBraG9fcmVzZXJ2ZV9zY3JhdGNoKCksIGFuIF9faW5pdCBmdW5jdGlvbiBpbiBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIHRoYXQgZXhlY3V0ZXMgZXhjbHVzaXZlbHkgZHVyaW5nIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uICh2aWEgbW1fY29yZV9pbml0KSBhbmQgaXMgZnJlZWQgYmVmb3JlIHVzZXJzcGFjZSBleGVjdXRpb24uIEJlY2F1c2UgdGhpcyBjb2RlIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYXQgcnVudGltZSBieSBzeXNjYWxscywgaW9jdGxzLCBvciB1c2VyLXNwYWNlIGludGVyZmFjZXMsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB0byB0aGUgZnV6emVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhkMTAzZjc1NWViMjhlOTAzZWRjZDkyMWRjYWQzMDllNzdmZTgwNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDExOjQ5OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCA3YzRkODZkYWY4NmQ1Li4zOWY0ODlhMjU4ZDkwIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTg0Nyw2ICYjNDM7ODQ3LDE3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gXHRcdGdvdG8gZXJyX2Rpc2FibGVfa2hvO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2FsY3VsYXRlIHRoZSBwZXItbm9kZSBzaXplcyBiZWZvcmUgcmVzZXJ2aW5nIGFueSBzY3JhdGNoIGFyZWFzLlxuJiM0MztcdCAqIG1lbWJsb2NrIGFsbG9jYXRpb25zIGFyZSBtYXJrZWQgTUVNQkxPQ0tfUlNSVl9LRVJOLCBzbyBjYWxjdWxhdGluZ1xuJiM0MztcdCAqIHRoZW0gbGF0ZXIgd291bGQgY291bnQgdGhlIGxvd21lbSBhbmQgZ2xvYmFsIHNjcmF0Y2ggYXJlYXMgYXMga2VybmVsXG4mIzQzO1x0ICogYWxsb2NhdGlvbnMgYW5kIHNjYWxlIHRoZW0gYWdhaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0aSA9IDI7XG4mIzQzO1x0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxuJiM0MztcdFx0a2hvX3NjcmF0Y2hbaSYjNDM7JiM0MztdLnNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuJiM0MztcdGkgPSAwO1xuJiM0MztcbiBcdC8qXG4gXHQgKiByZXNlcnZlIHNjcmF0Y2ggYXJlYSBpbiBsb3cgbWVtb3J5IGZvciBsb3dtZW0gYWxsb2NhdGlvbnMgaW4gdGhlXG4gXHQgKiBuZXh0IGtlcm5lbFxuQEAgLTg4MCw3ICYjNDM7ODkxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS5cbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG4tXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuJiM0MztcdFx0c2l6ZSA9IGtob19zY3JhdGNoW2ldLnNpemU7XG4gXHRcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsXG4gXHRcdFx0XHRcdFx0MCwgTUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRSxcbiBcdFx0XHRcdFx0XHRuaWQsIHRydWUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMga2hvX3Jlc2VydmVfc2NyYXRjaCgpLCBhbiBfX2luaXQgZnVuY3Rpb24gaW4ga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyB0aGF0IGV4ZWN1dGVzIGV4Y2x1c2l2ZWx5IGR1cmluZyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiAodmlhIG1tX2NvcmVfaW5pdCkgYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgZXhlY3V0aW9uLiBCZWNhdXNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUgYnkgc3lzY2FsbHMsIGlvY3Rscywgb3IgdXNlci1zcGFjZSBpbnRlcmZhY2VzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgdG8gdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZDEwM2Y3NTVlYjI4ZTkwM2VkY2Q5MjFkY2FkMzA5ZTc3ZmU4MDQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxMTo0OToyNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jCmluZGV4IDdjNGQ4NmRhZjg2ZDUuLjM5ZjQ4OWEyNThkOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYwpAQCAtODQ3LDYgJiM0Mzs4NDcsMTcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZCkKIAkJZ290byBlcnJfZGlzYWJsZV9raG87CiAJfQogCiYjNDM7CS8qCiYjNDM7CSAqIENhbGN1bGF0ZSB0aGUgcGVyLW5vZGUgc2l6ZXMgYmVmb3JlIHJlc2VydmluZyBhbnkgc2NyYXRjaCBhcmVhcy4KJiM0MzsJICogbWVtYmxvY2sgYWxsb2NhdGlvbnMgYXJlIG1hcmtlZCBNRU1CTE9DS19SU1JWX0tFUk4sIHNvIGNhbGN1bGF0aW5nCiYjNDM7CSAqIHRoZW0gbGF0ZXIgd291bGQgY291bnQgdGhlIGxvd21lbSBhbmQgZ2xvYmFsIHNjcmF0Y2ggYXJlYXMgYXMga2VybmVsCiYjNDM7CSAqIGFsbG9jYXRpb25zIGFuZCBzY2FsZSB0aGVtIGFnYWluLgomIzQzOwkgKi8KJiM0MzsJaSA9IDI7CiYjNDM7CWZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkKJiM0MzsJCWtob19zY3JhdGNoW2kmIzQzOyYjNDM7XS5zaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTsKJiM0MzsJaSA9IDA7CiYjNDM7CiAJLyoKIAkgKiByZXNlcnZlIHNjcmF0Y2ggYXJlYSBpbiBsb3cgbWVtb3J5IGZvciBsb3dtZW0gYWxsb2NhdGlvbnMgaW4gdGhlCiAJICogbmV4dCBrZXJuZWwKQEAgLTg4MCw3ICYjNDM7ODkxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZCkKIAkgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIHNjcmF0Y2ggYXJlYXMgdGhlcmUuCiAJICovCiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7Ci0JCXNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpOwomIzQzOwkJc2l6ZSA9IGtob19zY3JhdGNoW2ldLnNpemU7CiAJCWFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsCiAJCQkJCQkwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLAogCQkJCQkJbmlkLCB0cnVlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGtleGVjX2hhbmRvdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCBhcHByb2FjaCBpcyB0byB0aG9yb3VnaGx5IGFuYWx5emUgdGhpcyBwYXRjaC4gSSYjMzk7bSBzdGFydGluZyBieSB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZTogd2hhdCBmaWxlIHdhcyBtb2RpZmllZD8gQWgsIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gT2theSwgbm93IHdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBhcmVhcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAgZnVuY3Rpb24uIEkgaGF2ZSB0byBpbW1lZGlhdGVseSBncmFzcCBpdHMgY29udGV4dCDigJMgaG93IGl0JiMzOTtzIGNhbGxlZCwgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZ292ZXJuIGl0cyBleGVjdXRpb24sIGFuZCBjcnVjaWFsbHksIHdoZXRoZXIgaXQmIzM5O3MgYW4gZWFybHktYm9vdCwgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGBfX2luaXRgKSwgb3IgaWYgaXQmIzM5O3MgcnVudGltZSBjb2RlLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzLgoKTGV0JiMzOTtzIGdldCB0aGUgc3BlY2lmaWMgY29kZS4gR2l2ZSBtZSBsaW5lIDg0NyBvZiBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIEkgbmVlZCB0aGUgY29kZSBjb250ZXh0IHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODIwOlx0fVxuIDgyMTpcdFxuIDgyMjpcdC8qKlxuIDgyMzpcdCAqIGtob19yZXNlcnZlX3NjcmF0Y2ggLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjXG4gODI0Olx0ICpcbiA4MjU6XHQgKiBXaXRoIEtITyB3ZSBjYW4gcHJlc2VydmUgYXJiaXRyYXJ5IHBhZ2VzIGluIHRoZSBzeXN0ZW0uIFRvIGVuc3VyZSB3ZSBzdGlsbFxuIDgyNjpcdCAqIGhhdmUgYSBsYXJnZSBjb250aWd1b3VzIHJlZ2lvbiBvZiBtZW1vcnkgd2hlbiB3ZSBzZWFyY2ggdGhlIHBoeXNpY2FsIGFkZHJlc3NcbiA4Mjc6XHQgKiBzcGFjZSBmb3IgdGFyZ2V0IG1lbW9yeSwgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBhbHdheXMgaGF2ZSBhIGxhcmdlIENNQSByZWdpb25cbiA4Mjg6XHQgKiBhY3RpdmUuIFRoaXMgQ01BIHJlZ2lvbiB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgbW92YWJsZSBwYWdlcyB3aGljaCBhcmUgbm90IGFcbiA4Mjk6XHQgKiBwcm9ibGVtIGZvciB1cyBkdXJpbmcgS0hPIGJlY2F1c2Ugd2UgY2FuIGp1c3QgbW92ZSB0aGVtIHNvbWV3aGVyZSBlbHNlLlxuIDgzMDpcdCAqL1xuIDgzMTpcdHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXG4gODMyOlx0e1xuIDgzMzpcdFx0cGh5c19hZGRyX3QgYWRkciwgc2l6ZTtcbiA4MzQ6XHRcdGludCBuaWQsIGkgPSAwO1xuIDgzNTpcdFxuIDgzNjpcdFx0aWYgKCFraG9fZW5hYmxlKVxuIDgzNzpcdFx0XHRyZXR1cm47XG4gODM4Olx0XG4gODM5Olx0XHRzY3JhdGNoX3NpemVfdXBkYXRlKCk7XG4gODQwOlx0XG4gODQxOlx0XHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXG4gODQyOlx0XHRraG9fc2NyYXRjaF9jbnQgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKSAmIzQzOyAyO1xuIDg0MzpcdFx0c2l6ZSA9IGtob19zY3JhdGNoX2NudCAqIHNpemVvZigqa2hvX3NjcmF0Y2gpO1xuIDg0NDpcdFx0a2hvX3NjcmF0Y2ggPSBtZW1ibG9ja19hbGxvYyhzaXplLCBQQUdFX1NJWkUpO1xuIDg0NTpcdFx0aWYgKCFraG9fc2NyYXRjaCkge1xuIDg0NjpcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxcblwmIzM0Oyk7XG4gODQ3Olx0XHRcdGdvdG8gZXJyX2Rpc2FibGVfa2hvO1xuIDg0ODpcdFx0fVxuIDg0OTpcdFxuIDg1MDpcdFx0LypcbiA4NTE6XHRcdCAqIENhbGN1bGF0ZSB0aGUgcGVyLW5vZGUgc2l6ZXMgYmVmb3JlIHJlc2VydmluZyBhbnkgc2NyYXRjaCBhcmVhcy5cbiA4NTI6XHRcdCAqIG1lbWJsb2NrIGFsbG9jYXRpb25zIGFyZSBtYXJrZWQgTUVNQkxPQ0tfUlNSVl9LRVJOLCBzbyBjYWxjdWxhdGluZ1xuIDg1MzpcdFx0ICogdGhlbSBsYXRlciB3b3VsZCBjb3VudCB0aGUgbG93bWVtIGFuZCBnbG9iYWwgc2NyYXRjaCBhcmVhcyBhcyBrZXJuZWxcbiA4NTQ6XHRcdCAqIGFsbG9jYXRpb25zIGFuZCBzY2FsZSB0aGVtIGFnYWluLlxuIDg1NTpcdFx0ICovXG4gODU2Olx0XHRpID0gMjtcbiA4NTc6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbiA4NTg6XHRcdFx0a2hvX3NjcmF0Y2hbaSYjNDM7JiM0MztdLnNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuIDg1OTpcdFx0aSA9IDA7XG4gODYwOlx0XG4gODYxOlx0XHQvKlxuIDg2MjpcdFx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuIDg2MzpcdFx0ICogbmV4dCBrZXJuZWxcbiA4NjQ6XHRcdCAqL1xuIDg2NTpcdFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9sb3dtZW07XG4gODY2Olx0XHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvY19yYW5nZShzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUywgMCxcbiA4Njc6XHRcdFx0XHRcdFx0IEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpO1xuIDg2ODpcdFx0aWYgKCFhZGRyKSB7XG4gODY5Olx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBsb3dtZW0gc2NyYXRjaCBidWZmZXJcXG5cJiMzNDspO1xuIDg3MDpcdFx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfZGVzYztcbiA4NzE6XHRcdH1cbiA4NzI6XHRcbiA4NzM6XHRcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuIDg3NDpcdFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4gODc1Olx0XHRpJiM0MzsmIzQzOztcbiA4NzY6XHRcbiA4Nzc6XHRcdC8qIHJlc2VydmUgbGFyZ2UgY29udGlndW91cyBhcmVhIGZvciBhbGxvY2F0aW9ucyB3aXRob3V0IG5pZCAqL1xuIDg3ODpcdFx0c2l6ZSA9IHNjcmF0Y2hfc2l6ZV9nbG9iYWw7XG4gODc5Olx0XHRhZGRyID0gbWVtYmxvY2tfcGh5c19hbGxvYyhzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyk7XG4gODgwOlx0XHRpZiAoIWFkZHIpIHtcbiA4ODE6XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBzY3JhdGNoIGJ1ZmZlclxcblwmIzM0Oyk7XG4gODgyOlx0XHRcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9hcmVhcztcbiA4ODM6XHRcdH1cbiA4ODQ6XHRcbiA4ODU6XHRcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuIDg4NjpcdFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG4gODg3Olx0XHRpJiM0MzsmIzQzOztcbiA4ODg6XHRcbiA4ODk6XHRcdC8qXG4gODkwOlx0XHQgKiBMb29wIG92ZXIgbm9kZXMgdGhhdCBoYXZlIGJvdGggbWVtb3J5IGFuZCBhcmUgb25saW5lLiBTa2lwXG4gODkxOlx0XHQgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIHNjcmF0Y2ggYXJlYXMgdGhlcmUuXG4gODkyOlx0XHQgKi9cbiA4OTM6XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuIDg5NDpcdFx0XHRzaXplID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcbiA4OTU6XHRcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiA4OTY6XHRcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIDg5NzpcdFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4gODk4Olx0XHRcdGlmICghYWRkcikge1xuIDg5OTpcdFx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBuaWQgJWQgc2NyYXRjaCBidWZmZXJcXG5cJiMzNDssIG5pZCk7XG4gOTAwOlx0XHRcdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoX2FyZWFzO1xuIDkwMTpcdFx0XHR9XG4gOTAyOlx0XG4gOTAzOlx0XHRcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xuIDkwNDpcdFx0XHRraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTtcbiA5MDU6XHRcdFx0aSYjNDM7JiM0Mzs7XG4gOTA2Olx0XHR9XG4gOTA3Olx0XG4gOTA4Olx0XHRyZXR1cm47XG4gOTA5Olx0XG4gOTEwOlx0ZXJyX2ZyZWVfc2NyYXRjaF9hcmVhczpcbiA5MTE6XHRcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKVxuIDkxMjpcdFx0XHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX3NjcmF0Y2hbaV0uYWRkciwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XG4gOTEzOlx0ZXJyX2ZyZWVfc2NyYXRjaF9kZXNjOlxuIDkxNDpcdFx0bWVtYmxvY2tfZnJlZShraG9fc2NyYXRjaCwga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCkpO1xuIDkxNTpcdGVycl9kaXNhYmxlX2tobzpcbiA5MTY6XHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcmVhLCBkaXNhYmxpbmcga2V4ZWMgaGFuZG92ZXJcXG5cJiMzNDspO1xuIDkxNzpcdFx0a2hvX2VuYWJsZSA9IGZhbHNlO1xuIDkxODpcdH1cbiA5MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTExCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGtob19yZXNlcnZlX3NjcmF0Y2hgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYGtob19yZXNlcnZlX3NjcmF0Y2hgLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UgYW5kIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIG9yIHZhcmlhYmxlIGlzIGFjdHVhbGx5IHVzZWQuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIGxvY2F0ZSBhbGwgb2YgaXRzIGNhbGwgc2l0ZXMuIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgaW52b2tlZCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGFuZCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBzZWFyY2ggdGhyb3VnaCB0aGUgY29kZS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwcm9jZXNzLCBidXQgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBzZWFyY2ggcmVzdWx0cyB0dXJuIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19yZXNlcnZlX3NjcmF0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz04MDY9Ym9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODIyLS8qKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MjM6ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODI0LSAqXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MzAtICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjgzMTpzdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MzIte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTk1MT12b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXQodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5NTUtXHRlbHNlXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5NTY6XHRcdGtob19yZXNlcnZlX3NjcmF0Y2goKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM3MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogYGtob19tZW1vcnlfaW5pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHdoZXJlIGFyZSB3ZSBpbml0aWFsaXppbmcgdGhpcyBga2hvX21lbW9yeWAgc3RydWN0dXJlPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSwgYW5kIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgaXMgc2V0IHVwLiBLbm93aW5nIHdoZXJlIGBraG9fbWVtb3J5X2luaXRgIGlzIGludm9rZWQgaXMgY3J1Y2lhbCBmb3IgY29tcHJlaGVuZGluZyB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBtZW1vcnkgc3Vic3lzdGVtLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgc3RhdGUgdGhlIHN5c3RlbSBpcyBpbiB3aGVuIHRoZSBpbml0aWFsaXphdGlvbiBoYXBwZW5zLiBUaGlzIHdpbGwgaGVscCBtZSBjb250ZXh0dWFsaXplIGFueSBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHJlbGF0ZWQgdG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgZ2V0dGluZyBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbXBvbmVudCBvcGVyYXRlcyBhbmQgaG93IHRvIHRyb3VibGVzaG9vdCBpdCB3aGVuIHRoaW5ncyBpbmV2aXRhYmx5IGdvIHdyb25nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19tZW1vcnlfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MzQ9aW50IGtob19yZXRyaWV2ZV9zdWJ0cmVlKGNvbnN0IGNoYXIgKm5hbWUsIHBoeXNfYWRkcl90ICpwaHlzLCBzaXplX3QgKnNpemUpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM1LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM2OnZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjM3OnZvaWQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0xMTU9c3RhdGljIGlubGluZSBpbnQga2hvX3JldHJpZXZlX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgcGh5c19hZGRyX3QgKnBoeXMsXG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEyMC1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDoxMjE6c3RhdGljIGlubGluZSB2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjItXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTIzOnN0YXRpYyBpbmxpbmUgdm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCkgeyB9XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTI0LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTkwOT1mc19pbml0Y2FsbChraG9faW5pdCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MTAtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5MTE6dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MTIte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1MC1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTk1MTp2b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXQodm9pZClcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1Mi17XG4tLVxubW0vbW1faW5pdC5jPTI2ODA9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpXG5tbS9tbV9pbml0LmMtMjY4MS17XG5tbS9tbV9pbml0LmM6MjY4MjpcdGtob19tZW1vcnlfaW5pdF9lYXJseSgpO1xubW0vbW1faW5pdC5jLTI2ODMtXG4tLVxubW0vbW1faW5pdC5jPTI2OTc9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTI3MjEtXHQgKi9cbm1tL21tX2luaXQuYzoyNzIyOlx0a2hvX21lbW9yeV9pbml0KCk7XG5tbS9tbV9pbml0LmMtMjcyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA3CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gYGtob19yZXNlcnZlX3NjcmF0Y2hgKioKCk9rYXksIHNvIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBlc3NlbnRpYWxseSB0aGUgYF9faW5pdGAgZnVuY3Rpb24gY2FsbGVkIGJ5IGBraG9fbWVtb3J5X2luaXQoKWAsIHdoaWNoIGl0c2VsZiBpcyBhbiBgX19pbml0YCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbW1fY29yZV9pbml0KClgIGR1cmluZyB0aGUga2VybmVsJiMzOTtzIGJvb3QgcHJvY2Vzcy4gU28sIGluaXRpYWxseSwgaXQgc291bmRzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlYXJseSBib290IG1lbW9yeSBhbGxvY2F0aW9uIHZpYSBgbWVtYmxvY2tgLiBCdXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSXMgdGhpcyAqcHVyZWx5KiBhIGJvb3QtdGltZSBmdW5jdGlvbj8gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZS4KClRpbWUgdG8gc2hpZnQgZ2VhcnMuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyBzeXprYWxsZXIgdGVzdGluZyBpbiByZWxhdGlvbiB0byB0aGlzPyBBbmQgSSBzaG91bGQgcmUtZmFtaWxpYXJpemUgbXlzZWxmIHdpdGggd2hhdCBsaXZldXBkYXRlIGFuZCBrZXhlY19oYW5kb3ZlciBhcmUgZG9pbmcgYXMgdGhpcyBjb3VsZCBiZSBhIHJlbGF0ZWQgdXNlIGNhc2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGdvb2QgbG9vayBhdCB0aGUgYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgIGZpbGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGZsb3csIGJlY2F1c2UgdGhhdCBtaWdodCByZXZlYWwgc29tZXRoaW5nIGltcG9ydGFudC4gSG93IGRvZXMgdGhlIGxpdmUgdXBkYXRlL2tleGVjIGhhbmRvdmVyIHByb2Nlc3Mgd29yayBpbiByZWxhdGlvbiB0byBtZW1vcnk/IEFyZSB0aGVyZSBydW50aW1lIGNhbGxzIGJlaW5nIG1hZGU/CgpVbHRpbWF0ZWx5LCB0aGUgbW9uZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgaW50ZXJhY3Rpb24gd2l0aCBga2hvX3NjcmF0Y2hgIGF0IHJ1bnRpbWUuIEFyZSB0aGVyZSBzeXNjYWxscywgaW9jdGxzLCBzeXNmcywgZGVidWdmcyBpbnRlcmZhY2VzLCBvciBldmVuIHRoZSBrZXhlYyBpbnRlcmZhY2UgaXRzZWxmLCB0aGF0IG1pZ2h0IGJlIHRvdWNoaW5nIHRoaXMgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbj8gSSBuZWVkIHRvIGtub3cuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBsYXVuY2ggYSBjb21wcmVoZW5zaXZlIGtlcm5lbC13aWRlIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBraG9fc2NyYXRjaGAuIFRoYXQgd2lsbCBpbGx1bWluYXRlIHRoZSB0cnVlIGV4dGVudCBvZiBpdHMgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tob19zY3JhdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0PTk4PUtlcm5lbCBwYXJhbWV0ZXJzXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMzAzMy1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0OjMwMzQ6XHRraG9fc2NyYXRjaD1cdFtLRVhFQyxFQVJMWV1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTMwMzUtXHRcdFx0Rm9ybWF0OiBsbFtLTUddLG1tW0tNR10sbm5bS01HXSB8IG5uJVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdD0yMj1UbyB1c2UgS0hPLCBwbGVhc2UgYm9vdCB0aGUga2VybmVsIHdpdGggdGhlIGBga2hvPW9uYGAgY29tbWFuZCBsaW5lXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q6MjM6cGFyYW1ldGVyLiBZb3UgbWF5IHVzZSBgYGtob19zY3JhdGNoYGAgcGFyYW1ldGVyIHRvIGRlZmluZSBzaXplIG9mIHRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0OjI0OnNjcmF0Y2ggcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fc2NyYXRjaD0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGFcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdC0yNS0xNiBNaUIgbG93IG1lbW9yeSBzY3JhdGNoIGFyZWEsIGEgNTEyIE1pQiBnbG9iYWwgc2NyYXRjaCByZWdpb24sIGFuZCAyNTYgTWlCXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0PTE2PXRoZSBwcmVzZXJ2ZWQgc3RhdGUgZnJvbSBwcmUtZXhlYyBrZXJuZWwgdG8gcG9zdC1rZXhlYyBrZXJuZWwgYW5kIDpyZWY6YHNjcmF0Y2hcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdDoxNzptZW1vcnkgcmVnaW9ucyBcdTAwM2NraG9fc2NyYXRjaFx1MDAzZWAgdG8gZW5zdXJlIGludGVncml0eSBvZiB0aGUgcHJlc2VydmVkIG1lbW9yeS5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdC0xOC1cbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q9MzU9YW5kIHBvc3Qta2V4ZWMga2VybmVscy4gVGhpcyBBQkkgaXMgZGVmaW5lZCBieSBoZWFkZXIgZmlsZXMgaW5cbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtNDItXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q6NDM6Li4gX2tob19zY3JhdGNoOlxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0LTQ0LVxuLS1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdD01OD1CeSBkZWZhdWx0LCBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnlcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdDo1OTphbGxvY2F0ZWQgZHVyaW5nIGJvb3QuIFRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gbWF5IGJlXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtNjAtdXNlZCB0byBleHBsaWNpdGx5IGRlZmluZSBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbnMuXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0PTY1PW1vdmFibGUgcGFnZXMgY2FuIGJlIGxvY2F0ZWQgaW5zaWRlLlxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0LTY2LVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0OjY3OkFmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtNjgtaW5zdGVhZCByZXVzZSB0aGUgZXhhY3Qgc2FtZSByZWdpb24gdGhhdCB3YXMgb3JpZ2luYWxseSBhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzXG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM9NzcwPXN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzEte1xuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6NzcyOlx0c3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc3My1cdHN0cnVjdCBzZXR1cF9kYXRhICpwdHI7XG4tLVxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNzgzLVx0XHRcdGtobyA9IChzdHJ1Y3Qga2hvX2RhdGEgKikodW5zaWduZWQgbG9uZylwdHItXHUwMDNlZGF0YTtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjc4NDpcdFx0XHRraG9fc2NyYXRjaCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVx1MDAzZXNjcmF0Y2hfYWRkcjtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjc4NTpcdFx0XHRucl9hcmVhcyA9IGtoby1cdTAwM2VzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc4Ni1cdFx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03OTUtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9hcmVhczsgaSYjNDM7JiM0MzspIHtcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjc5NjpcdFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXHUwMDI2a2hvX3NjcmF0Y2hbaV07XG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03OTctXHRcdHN0cnVjdCBtZW1fdmVjdG9yIHJlZ2lvbiA9IHtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jPTEyODg9X19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jLTEzNjUtXHQgKi9cbmFyY2gveDg2L2tlcm5lbC9lODIwLmM6MTM2NjpcdG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goMCwgU1pfMU0pO1xuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzY3LVxuLS1cbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYz00Nz12b2lkIF9faW5pdCByZXNlcnZlX3JlYWxfbW9kZSh2b2lkKVxuLS1cbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYy02OC1cbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYzo2OTpcdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcbmFyY2gveDg2L3JlYWxtb2RlL2luaXQuYy03MC19XG4tLVxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYz0xNTk9c3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKVxuLS1cbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMtMTgwLVx0XHRmb3JfZWFjaF9tZW1fcmVnaW9uKHIpIHtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmM6MTgxOlx0XHRcdGlmICghbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gocikpIHtcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMtMTgyLVx0XHRcdFx0bWVtYmxvY2tfcmVtb3ZlKHItXHUwMDNlYmFzZSwgci1cdTAwM2VzaXplKTtcbi0tXG5pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmgtNi1cbmluY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaDo3OnN0cnVjdCBraG9fc2NyYXRjaCB7XG5pbmNsdWRlL2FzbS1nZW5lcmljL2tleGVjX2hhbmRvdmVyLmgtOC1cdHBoeXNfYWRkcl90IGFkZHI7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTM5PXZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbiwgcGh5c19hZGRyX3Qgc2NyYXRjaF9waHlzLFxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00MS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDo0Mjpib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpO1xuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQzLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjQ0OnN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00NS1cdFx0XHRcdFx0XHQgICAgICAgZW51bSBtaWdyYXRldHlwZSBtdClcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00Ni17XG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NDc6XHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChQRk5fUEhZUyhwZm4pLCBwYWdlYmxvY2tfbnJfcGFnZXMgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQ4LVx0XHRyZXR1cm4gTUlHUkFURV9DTUE7XG4tLVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTEyNT1zdGF0aWMgaW5saW5lIHZvaWQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcbi0tXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTI5LVxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjEzMDpzdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzEte1xuLS1cbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzQtXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTM1OnN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzYtXHRcdFx0XHRcdFx0ICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTE2MD1pbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19rZXJuKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjE2MTppbnQgbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDoxNjI6aW50IG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTE2My1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9Mjk5PXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19kcml2ZXJfbWFuYWdlZChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0zMDMtXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6MzA0OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1ibG9ja19pc19raG9fc2NyYXRjaChzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICptKVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTMwNS17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTYxND1zdGF0aWMgaW5saW5lIHZvaWQgbWVtdGVzdF9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pIHsgfVxuLS1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC02MTctI2lmZGVmIENPTkZJR19NRU1CTE9DS19LSE9fU0NSQVRDSFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjYxODp2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjYxOTp2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCk7XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNjIwLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NjIxOnN0YXRpYyBpbmxpbmUgdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKSB7IH1cbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo2MjI6c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCkgeyB9XG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNjIzLSNlbmRpZlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjUxPXN0YXRpYyB2b2lkIF9faW5pdCAqa2hvX2dldF9tZW1fbWFwKGNvbnN0IHZvaWQgKmZkdClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY2NS0gKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NjY2OnN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY2Nzp1bnNpZ25lZCBpbnQga2hvX3NjcmF0Y2hfY250O1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NjgtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzItICpcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NjczOiAqIGtob19zY3JhdGNoPU4lXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjc3LSAqXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY3ODogKiBraG9fc2NyYXRjaD1sW0tNR10sbltLTUddLG1bS01HXVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzktICpcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTY4Nz1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy03NTItfVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo3NTM6ZWFybHlfcGFyYW0oXCYjMzQ7a2hvX3NjcmF0Y2hcJiMzNDssIGtob19wYXJzZV9zY3JhdGNoX3NpemUpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy03NTQtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz03ODg9c3RhdGljIHBoeXNfYWRkcl90IF9faW5pdCBzY3JhdGNoX3NpemVfbm9kZShpbnQgbmlkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODA1LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MDY6Ym9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MDcte1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODEwLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MTE6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjgxMjpcdFx0c2NyYXRjaF9zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHI7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjgxMzpcdFx0c2NyYXRjaF9lbmQgPSBraG9fc2NyYXRjaFtpXS5hZGRyICYjNDM7IGtob19zY3JhdGNoW2ldLnNpemU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTgxNC1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTgzMT1zdGF0aWMgdm9pZCBfX2luaXQga2hvX3Jlc2VydmVfc2NyYXRjaCh2b2lkKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODQxLVx0LyogRklYTUU6IGRlYWwgd2l0aCBub2RlIGhvdC1wbHVnL3JlbW92ZSAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NDI6XHRraG9fc2NyYXRjaF9jbnQgPSBub2Rlc193ZWlnaHQobm9kZV9zdGF0ZXNbTl9NRU1PUlldKSAmIzQzOyAyO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NDM6XHRzaXplID0ga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjg0NDpcdGtob19zY3JhdGNoID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODQ1Olx0aWYgKCFraG9fc2NyYXRjaCkge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04NDYtXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFycmF5XFxuXCYjMzQ7KTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg1Ny1cdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODU4Olx0XHRraG9fc2NyYXRjaFtpJiM0MzsmIzQzO10uc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9ub2RlKG5pZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg1OS1cdGkgPSAwO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODcyLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NzM6XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODc0Olx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg3NS1cdGkmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODg0LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4ODU6XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODg2Olx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg4Ny1cdGkmIzQzOyYjNDM7O1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODkzLVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjg5NDpcdFx0c2l6ZSA9IGtob19zY3JhdGNoW2ldLnNpemU7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg5NS1cdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkwMi1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTAzOlx0XHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTA0Olx0XHRraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTA1LVx0XHRpJiM0MzsmIzQzOztcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkxMS1cdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MTI6XHRcdG1lbWJsb2NrX3BoeXNfZnJlZShraG9fc2NyYXRjaFtpXS5hZGRyLCBraG9fc2NyYXRjaFtpXS5zaXplKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTEzLWVycl9mcmVlX3NjcmF0Y2hfZGVzYzpcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTE0Olx0bWVtYmxvY2tfZnJlZShraG9fc2NyYXRjaCwga2hvX3NjcmF0Y2hfY250ICogc2l6ZW9mKCpraG9fc2NyYXRjaCkpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MTUtZXJyX2Rpc2FibGVfa2hvOlxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9OTY0PXN0YXRpYyBpbnQgX19pbml0IGtob19leHRfbWFya19zY3JhdGNoKHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTcwLVx0aWYgKHN0YXJ0IFx1MDAzZSAqcHJldl9lbmQpIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6OTcxOlx0XHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05NzItXHRcdGlmIChlcnIpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMDA1PXN0YXRpYyB2b2lkIF9faW5pdCBraG9fZXh0ZW5kX3NjcmF0Y2godm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDMtXHRpZiAocHJldl9lbmQgXHUwMDNjIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEwNDQ6XHRcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEwNDUtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMTU4PWludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTExNjQtXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpIFx1MDAyNlx1MDAyNlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTY1Olx0ICAgIFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcdTAwM2NcdTAwM2Mgb3JkZXIpKSlcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMjMzPWludCBraG9fcHJlc2VydmVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjQyLVx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0tFWEVDX0hBTkRPVkVSX0RFQlVHKSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTI0MzpcdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAoc3RhcnRfcGZuIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZULFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjQ0LVx0XHRcdFx0XHRucl9wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKSB7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xODI5PXN0YXRpYyBfX2luaXQgaW50IGtob19pbml0KHZvaWQpXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODY4LVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxODY5Olx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTg3MDpcdFx0dW5zaWduZWQgbG9uZyBiYXNlX3BmbiA9IFBIWVNfUEZOKGtob19zY3JhdGNoW2ldLmFkZHIpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxODcxOlx0XHR1bnNpZ25lZCBsb25nIGNvdW50ID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTg3Mi1cdFx0dW5zaWduZWQgbG9uZyBwZm47XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODgxLVx0XHQgKi9cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTg4MjpcdFx0a21lbWxlYWtfaWdub3JlX3BoeXMoa2hvX3NjcmF0Y2hbaV0uYWRkcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE4ODMtXHRcdGZvciAocGZuID0gYmFzZV9wZm47IHBmbiBcdTAwM2MgYmFzZV9wZm4gJiM0MzsgY291bnQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODk5LVx0a2hvX291dC5mZHQgPSBOVUxMO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTAwOlx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTkwMTpcdFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19zY3JhdGNoW2ldLmFkZHIpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTAyOlx0XHR2b2lkICplbmQgPSBzdGFydCAmIzQzOyBraG9fc2NyYXRjaFtpXS5zaXplO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTAzLVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTkxMT12b2lkIF9faW5pdCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZClcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MjgtXHQvKlxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTI5Olx0ICoga2hvX3NjcmF0Y2hfb3ZlcmxhcCgpIG5lZWRzIGtob19zY3JhdGNoIHRvIGJlIGluaXRpYWxpemVkLiBJdFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTMwLVx0ICogaXMgdXNlZCBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdFxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTkzMi1cdCAqL1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTMzOlx0a2hvX3NjcmF0Y2ggPSBwaHlzX3RvX3ZpcnQoa2hvX2luLnNjcmF0Y2hfcGh5cyk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MzQtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xOTU5PXZvaWQgX19pbml0IGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTYxLXtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTk2MjpcdHVuc2lnbmVkIGludCBzY3JhdGNoX2NudCA9IHNjcmF0Y2hfbGVuIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5NjM6XHRzdHJ1Y3Qga2hvX3NjcmF0Y2ggKnNjcmF0Y2ggPSBOVUxMO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTY0LVx0cGh5c19hZGRyX3QgbWVtX21hcF9waHlzO1xuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAwNC1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjAwNTpcdFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXHUwMDI2c2NyYXRjaFtpXTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAwNi1cdFx0dTY0IHNpemUgPSBhcmVhLVx1MDAzZXNpemU7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDA4LVx0XHRtZW1ibG9ja19hZGQoYXJlYS1cdTAwM2VhZGRyLCBzaXplKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjAwOTpcdFx0ZXJyID0gbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChhcmVhLVx1MDAzZWFkZHIsIHNpemUpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDEwLVx0XHRpZiAoZXJyKSB7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDI2LVx0ICovXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMjc6XHRtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSgpO1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDI4LVxuLS1cbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAzMC1cdGtob19pbi5zY3JhdGNoX3BoeXMgPSBzY3JhdGNoX3BoeXM7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMzE6XHRraG9fc2NyYXRjaF9jbnQgPSBzY3JhdGNoX2NudDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAzMi1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTIwNDc9aW50IGtob19maWxsX2tpbWFnZShzdHJ1Y3Qga2ltYWdlICppbWFnZSlcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwNTctXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwNTg6XHRzY3JhdGNoX3NpemUgPSBzaXplb2YoKmtob19zY3JhdGNoKSAqIGtob19zY3JhdGNoX2NudDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA1OS1cdHNjcmF0Y2ggPSAoc3RydWN0IGtleGVjX2J1Zil7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwNjAtXHRcdC5pbWFnZSA9IGltYWdlLFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDYxOlx0XHQuYnVmZmVyID0ga2hvX3NjcmF0Y2gsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwNjItXHRcdC5idWZzeiA9IHNjcmF0Y2hfc2l6ZSxcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTIwNzc9c3RhdGljIGludCBraG9fd2Fsa19zY3JhdGNoKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDgyLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDgzOlx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpJiM0MzsmIzQzOykge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDg0LVx0XHRzdHJ1Y3QgcmVzb3VyY2UgcmVzID0ge1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDg1Olx0XHRcdC5zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHIsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwODY6XHRcdFx0LmVuZCA9IGtob19zY3JhdGNoW2ldLmFkZHIgJiM0Mzsga2hvX3NjcmF0Y2hbaV0uc2l6ZSAtIDEsXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwODctXHRcdH07XG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jPTgwPXN0YXRpYyBpbnQgc2NyYXRjaF9waHlzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jLTgxLXtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYzo4MjpcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkmIzQzOyYjNDM7KVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jOjgzOlx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OzB4JWxseFxcblwmIzM0Oywga2hvX3NjcmF0Y2hbaV0uYWRkcik7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMtODQtXG4tLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jPTg5PXN0YXRpYyBpbnQgc2NyYXRjaF9sZW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMtOTAte1xua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jOjkxOlx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSYjNDM7JiM0MzspXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmM6OTI6XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7MHglbGx4XFxuXCYjMzQ7LCBraG9fc2NyYXRjaFtpXS5zaXplKTtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYy05My1cbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTE5PXN0cnVjdCBraG9fZGVidWdmcyB7fTtcbi0tXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTIxLVxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDoyMjpleHRlcm4gc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmg6MjM6ZXh0ZXJuIHVuc2lnbmVkIGludCBraG9fc2NyYXRjaF9jbnQ7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oLTI0LVxuLS1cbm1tL21lbWJsb2NrLmM9MTE0PXVuc2lnbmVkIGxvbmcgbG9uZyBtYXhfcG9zc2libGVfcGZuO1xuLS1cbm1tL21lbWJsb2NrLmMtMTE3LS8qIFdoZW4gc2V0IHRvIHRydWUsIG9ubHkgYWxsb2NhdGUgZnJvbSBNRU1CTE9DS19LSE9fU0NSQVRDSCByYW5nZXMgKi9cbm1tL21lbWJsb2NrLmM6MTE4OnN0YXRpYyBib29sIGtob19zY3JhdGNoX29ubHk7XG5tbS9tZW1ibG9jay5jLTExOS0jZWxzZVxubW0vbWVtYmxvY2suYzoxMjA6I2RlZmluZSBraG9fc2NyYXRjaF9vbmx5IGZhbHNlXG5tbS9tZW1ibG9jay5jLTEyMS0jZW5kaWZcbi0tXG5tbS9tZW1ibG9jay5jPTE4MD1zdGF0aWMgZW51bSBtZW1ibG9ja19mbGFncyBfX2luaXRfbWVtYmxvY2sgY2hvb3NlX21lbWJsb2NrX2ZsYWdzKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0xODItXHQvKiBza2lwIG5vbi1zY3JhdGNoIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi9cbm1tL21lbWJsb2NrLmM6MTgzOlx0aWYgKGtob19zY3JhdGNoX29ubHkpXG5tbS9tZW1ibG9jay5jLTE4NC1cdFx0cmV0dXJuIE1FTUJMT0NLX0tIT19TQ1JBVENIO1xuLS1cbm1tL21lbWJsb2NrLmM9MTE3MT1pbnQgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX3Jlc2VydmVkX21hcmtfa2VybihwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuLS1cbm1tL21lbWJsb2NrLmMtMTE3Ny0vKipcbm1tL21lbWJsb2NrLmM6MTE3ODogKiBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoIC0gTWFyayBhIG1lbW9yeSByZWdpb24gYXMgTUVNQkxPQ0tfS0hPX1NDUkFUQ0guXG5tbS9tZW1ibG9jay5jLTExNzktICogQGJhc2U6IHRoZSBiYXNlIHBoeXMgYWRkciBvZiB0aGUgcmVnaW9uXG4tLVxubW0vbWVtYmxvY2suYy0xMTg2LSAqL1xubW0vbWVtYmxvY2suYzoxMTg3Ol9faW5pdCBpbnQgbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxubW0vbWVtYmxvY2suYy0xMTg4LXtcbi0tXG5tbS9tZW1ibG9jay5jLTExOTMtLyoqXG5tbS9tZW1ibG9jay5jOjExOTQ6ICogbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2ggLSBDbGVhciBNRU1CTE9DS19LSE9fU0NSQVRDSCBmbGFnIGZvciBhXG5tbS9tZW1ibG9jay5jLTExOTUtICogc3BlY2lmaWVkIHJlZ2lvbi5cbi0tXG5tbS9tZW1ibG9jay5jLTEyMDAtICovXG5tbS9tZW1ibG9jay5jOjEyMDE6X19pbml0IGludCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxubW0vbWVtYmxvY2suYy0xMjAyLXtcbi0tXG5tbS9tZW1ibG9jay5jPTEyMDc9c3RhdGljIGJvb2wgc2hvdWxkX3NraXBfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuLS1cbm1tL21lbWJsb2NrLmMtMTI0MS1cdCAqL1xubW0vbWVtYmxvY2suYzoxMjQyOlx0aWYgKChmbGFncyBcdTAwMjYgTUVNQkxPQ0tfS0hPX1NDUkFUQ0gpIFx1MDAyNlx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gobSkpXG5tbS9tZW1ibG9jay5jLTEyNDMtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL21lbWJsb2NrLmM9MTc3Nz12b2lkICogX19pbml0IG1lbWJsb2NrX2FsbG9jX2h1Z2V0bGIocGh5c19hZGRyX3Qgc2l6ZSwgaW50IG5pZCwgYm9vbCBleGFjdF9uaWQpXG4tLVxubW0vbWVtYmxvY2suYy0xODE3LVx0ICovXG5tbS9tZW1ibG9jay5jOjE4MTg6XHRpZiAoa2hvX3NjcmF0Y2hfb3ZlcmxhcChhZGRyLCBzaXplKSkge1xubW0vbWVtYmxvY2suYy0xODE5LVx0XHRpZiAobWVtYmxvY2tfYm90dG9tX3VwKCkpXG4tLVxubW0vbWVtYmxvY2suYz0yNDk0PXZvaWQgX19pbml0IG1lbWJsb2NrX2ZyZWVfYWxsKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNTAwLVxubW0vbWVtYmxvY2suYzoyNTAxOlx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xubW0vbWVtYmxvY2suYy0yNTAyLVx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xuLS1cbm1tL21lbWJsb2NrLmM9MjU3OT1pbnQgcmVzZXJ2ZV9tZW1fcmVsZWFzZV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxubW0vbWVtYmxvY2suYy0yNTk5LSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcbm1tL21lbWJsb2NrLmM6MjYwMDpfX2luaXQgdm9pZCBtZW1ibG9ja19zZXRfa2hvX3NjcmF0Y2hfb25seSh2b2lkKVxubW0vbWVtYmxvY2suYy0yNjAxLXtcbm1tL21lbWJsb2NrLmM6MjYwMjpcdGtob19zY3JhdGNoX29ubHkgPSB0cnVlO1xubW0vbWVtYmxvY2suYy0yNjAzLX1cbm1tL21lbWJsb2NrLmMtMjYwNC1cbm1tL21lbWJsb2NrLmM6MjYwNTpfX2luaXQgdm9pZCBtZW1ibG9ja19jbGVhcl9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXG5tbS9tZW1ibG9jay5jLTI2MDYte1xubW0vbWVtYmxvY2suYzoyNjA3Olx0a2hvX3NjcmF0Y2hfb25seSA9IGZhbHNlO1xubW0vbWVtYmxvY2suYy0yNjA4LX1cbi0tXG5tbS9tbV9pbml0LmM9NjgxPXN0YXRpYyBfX21lbWluaXQgdm9pZCBwYWdlYmxvY2tfbWlncmF0ZXR5cGVfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbixcbi0tXG5tbS9tbV9pbml0LmMtNjg2LVx0Zm9yIChwZm4gPSBwYWdlYmxvY2tfYWxpZ24ocGZuKTsgcGZuIFx1MDAzYyBlbmQ7IHBmbiAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7XG5tbS9tbV9pbml0LmM6Njg3Olx0XHRlbnVtIG1pZ3JhdGV0eXBlIG10ID0ga2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBtaWdyYXRldHlwZSk7XG5tbS9tbV9pbml0LmMtNjg4LVxuLS1cbm1tL21tX2luaXQuYz03NjU9c3RhdGljIHZvaWQgX19tZW1pbml0IF9faW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuLS1cbm1tL21tX2luaXQuYy03NzYtXHRcdGVudW0gbWlncmF0ZXR5cGUgbXQgPVxubW0vbW1faW5pdC5jOjc3NzpcdFx0XHRraG9fc2NyYXRjaF9taWdyYXRldHlwZShwZm4sIE1JR1JBVEVfTU9WQUJMRSk7XG5tbS9tbV9pbml0LmMtNzc4LVx0XHRpbml0X3BhZ2VibG9ja19taWdyYXRldHlwZShwZm5fdG9fcGFnZShwZm4pLCBtdCwgZmFsc2UpO1xuLS1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaD0zOT1zdGF0aWMgaW5saW5lIGJvb2wgX19pc19rZXJuZWwodW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC00OC1cbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaDo0OTpzdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaC01MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjE1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBga2hvX3Jlc2VydmVfc2NyYXRjaGAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBleGFtaW5lIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCwgd2hpY2ggSSBpbW1lZGlhdGVseSByZWNvZ25pemVkIGFzIGEgYHN0YXRpYyB2b2lkIF9faW5pdGAgZnVuY3Rpb24uIFRoZSBgX19pbml0YCBhdHRyaWJ1dGUgaXMgYSByZWQgZmxhZywgc3VnZ2VzdGluZyBpdCYjMzk7cyBleGVjdXRlZCBvbmx5IGR1cmluZyB0aGUga2VybmVsIGluaXRpYWxpemF0aW9uIHBoYXNlLiBJIHF1aWNrbHkgdHJhY2tlZCB0aGUgY2FsbCBjaGFpbjogYGtob19tZW1vcnlfaW5pdGAgdGhlbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIFRoZW4gYG1tX2NvcmVfaW5pdGAgY2FsbHMgYGtob19tZW1vcnlfaW5pdGAgYW5kIGBtbV9jb3JlX2luaXRgIGlzIGNhbGxlZCBieSBgc3RhcnRfa2VybmVsYC4gQ2xlYXJseSB0aGlzIGlzIGFsbCBkdXJpbmcgZWFybHkgYm9vdC4KCk15IG5leHQgaW1tZWRpYXRlIHF1ZXN0aW9uIHdhcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24sIG9yIGFueSBwYXJ0IG9mIHRoaXMgY29kZXBhdGgsIGNvdWxkIGJlIHJlYWNoZWQgZHVyaW5nIHJ1bnRpbWUsIGVzcGVjaWFsbHkgYnkgc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyLiBUaGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyBuby4gYF9faW5pdGAgZnVuY3Rpb25zIGFyZSBwYXJ0IG9mIHRoZSBpbml0aWFsIFJBTSBkaXNrLCBleGVjdXRlZCBvbmNlLCBhbmQgdGhlaXIgbWVtb3J5IGlzIGZyZWVkIGJ5IGBmcmVlX2luaXRtZW0oKWAgYmVmb3JlIHVzZXJzcGFjZSBldmVuIGJlZ2lucywgdGh1cywgbWFraW5nIHRoZSBmdW5jdGlvbnMgY29tcGxldGVseSBpbmFjY2Vzc2libGUgYWZ0ZXIgdGhlIHN5c3RlbSBpcyBmdWxseSBib290ZWQuIEZ1enppbmcgd291bGQgYmUgdW5hYmxlIHRvIGludm9rZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAgdmlhIGFueSBzeXNjYWxsLCBJT0NUTCwgdmlydHVhbCBkZXZpY2UsIG9yIHN5c2ZzIGludGVyYWN0aW9uLgoKVG8gY29uZmlybSB0aGlzLCBJIGRvdWJsZS1jaGVja2VkIHRoZSBkaWZmIHByb3ZpZGVkIHRvIGVuc3VyZSBub3RoaW5nIGVsc2Ugd2FzIG1vZGlmaWVkIGluIHRoZSBjb21taXQsIHRvIGVsaW1pbmF0ZSBhbnkgZG91YnQuIEl0JiMzOTtzIGNvbmZpbmVkIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIEkgdGhlbiB3ZW50IGJhY2sgYW5kIHZlcmlmaWVkIHdoZXJlIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBjYWxsZWQsIGFuZCBmb3VuZCB0aGF0IGl0JiMzOTtzIG9ubHkgY2FsbGVkIGluIGBraG9fbWVtb3J5X2luaXRgIGFuZCBmcm9tIHRoZSBzYW1lIGZpbGUuCgpJIGNvbnNpZGVyZWQgd2hldGhlciB0aGlzIEtITyBlYXJseSBib290IHNjcmF0Y2ggcmVzZXJ2YXRpb24sIHdoaWNoIHJlbGllcyBvbiBtZW1ibG9jayBhbGxvY2F0aW9ucyAoYG1lbWJsb2NrX2FsbG9jYCwgYG1lbWJsb2NrX3BoeXNfYWxsb2NgLCBldGMuKSBiZWZvcmUgdGhlIGJ1ZGR5IGFsbG9jYXRvciBpcyBpbml0aWFsaXplZCwgd291bGQgYmUgYSBmYWN0b3IuIFRoZSBjb25jbHVzaW9uIHJlbWFpbmVkIHVuY2hhbmdlZDogYWZ0ZXIgYm9vdCBjb21wbGV0aW9uLCB0aGUgYC5pbml0LnRleHRgIHNlY3Rpb24gY29udGFpbmluZyB0aGlzIGZ1bmN0aW9uIGlzIHVubWFwcGVkIGFuZCBmcmVlZC4KCkkgdGhlbiByZXZpc2l0ZWQgdGhlICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgY3JpdGVyaWEgYW5kIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgJiMzNDt1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0OyBjYXRlZ29yeSBzcGVjaWZpY2FsbHkgaW5jbHVkZXMgY29kZSBleGVjdXRlZCBvbmx5IGR1cmluZyBkcml2ZXIgdGVhcmRvd24sIHBoeXNpY2FsIGhvdC11bnBsdWcsIG9yIG9uIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0LiBUaGlzIG1hZGUgbWUgdGhpbmsgYWJvdXQgd2hldGhlciBlYXJseSBib290IGBfX2luaXRgIGNvZGUgY291bGQgZXZlbiBiZSBjb25zaWRlcmVkIGJ5IHN5emthbGxlci4KClVsdGltYXRlbHksIHN5emthbGxlciwgcnVubmluZyBpbiB1c2Vyc3BhY2Ugd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGlzIGRlc2lnbmVkIHRvIGV4ZWN1dGUgdGVzdCBwcm9ncmFtcywgd2hpY2ggdHJhbnNsYXRlIHRvIHN5c2NhbGwgc2VxdWVuY2VzLiBJdCBpcywgdGhlcmVmb3JlLCB1bmFibGUgdG8gcmVhY2ggdGhlIGBfX2luaXRgIGZ1bmN0aW9ucyB0aGF0IHJ1biBvbmNlIGR1cmluZyBrZXJuZWwgYm9vdCBhbmQgYXJlIGZyZWVkIGJlZm9yZSBzeXprYWxsZXIgZXZlbiBiZWdpbnMgdG8gcnVuLiBUaGVyZWZvcmUsIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBub3QgcmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS0VYRUNfSEFORE9WRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZz0zPW1lbnUgXCYjMzQ7TGl2ZSBVcGRhdGUgYW5kIEtleGVjIEhhbmRPdmVyXCYjMzQ7XG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTQtXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjU6Y29uZmlnIEtFWEVDX0hBTkRPVkVSXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTYtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6MTg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgS2V4ZWMgSGFuZG92ZXIgZGVidWcgY2hlY2tzXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yNi1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mjc6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHRlNcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMjgtXHRib29sIFwmIzM0O2tleGVjIGhhbmRvdmVyIGRlYnVnZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0zNy1cbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6Mzg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtFbmFibGUga2V4ZWMgaGFuZG92ZXIgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIExpdmUgVXBkYXRlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbGl2ZSB1cGRhdGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgdHlwZSBvZiB0aGluZyB3b3VsZCBiZSB1bmRlciBga2VybmVsL2AuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnYC4gVGhhdCBjb25maWd1cmF0aW9uIGZpbGUgaXMgdGhlIGJlZHJvY2sgZm9yIGVuYWJsaW5nLCBkaXNhYmxpbmcsIGFuZCBjdXN0b21pemluZyB0aGUgbGl2ZSB1cGRhdGUgZmVhdHVyZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3B0aW9ucyBhcmUgZXhwb3NlZCB0aGVyZSwgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLCBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEhvcGVmdWxseSwgdGhlIEtjb25maWcgZmlsZSB3aWxsIGdpdmUgbWUgdGhlIGhpZ2gtbGV2ZWwgcGljdHVyZSBiZWZvcmUgSSBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9saXZldXBkYXRlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0xpdmUgVXBkYXRlIGFuZCBLZXhlYyBIYW5kT3ZlclwmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlclwmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0tFWEVDX0hBTkRPVkVSIFx1MDAyNlx1MDAyNiBBUkNIX1NVUFBPUlRTX0tFWEVDX0ZJTEVcbiAgIDg6XHRcdHNlbGVjdCBNRU1CTE9DS19LSE9fU0NSQVRDSFxuICAgOTpcdFx0c2VsZWN0IEtFWEVDX0ZJTEVcbiAgMTA6XHRcdHNlbGVjdCBMSUJGRFRcbiAgMTE6XHRcdHNlbGVjdCBDTUFcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgQWxsb3cga2V4ZWMgdG8gaGFuZCBvdmVyIHN0YXRlIGFjcm9zcyBrZXJuZWxzIGJ5IGdlbmVyYXRpbmcgYW5kXG4gIDE0Olx0XHQgIHBhc3NpbmcgYWRkaXRpb25hbCBtZXRhZGF0YSB0byB0aGUgdGFyZ2V0IGtlcm5lbC4gVGhpcyBpcyB1c2VmdWxcbiAgMTU6XHRcdCAgdG8ga2VlcCBkYXRhIG9yIHN0YXRlIGFsaXZlIGFjcm9zcyB0aGUga2V4ZWMuIEZvciB0aGlzIHRvIHdvcmssXG4gIDE2Olx0XHQgIGJvdGggc291cmNlIGFuZCB0YXJnZXQga2VybmVscyBuZWVkIHRvIGhhdmUgdGhpcyBvcHRpb24gZW5hYmxlZC5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdcbiAgMTk6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEtleGVjIEhhbmRvdmVyIGRlYnVnIGNoZWNrc1wmIzM0O1xuICAyMDpcdFx0ZGVwZW5kcyBvbiBLRVhFQ19IQU5ET1ZFUlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGV4dHJhIHNhbml0eSBjaGVja3MgZm9yIHRoZSBLZXhlYyBIYW5kb3ZlclxuICAyMzpcdFx0ICBzdWJzeXN0ZW0uIFNpbmNlLCBLSE8gcGVyZm9ybWFuY2UgaXMgY3J1Y2lhbCBpbiBsaXZlIHVwZGF0ZVxuICAyNDpcdFx0ICBzY2VuYXJpb3MgYW5kIHRoZSBleHRyYSBjb2RlIG1pZ2h0IGJlIGFkZGluZyBvdmVyaGVhZCBpdCBpc1xuICAyNTpcdFx0ICBvbmx5IG9wdGlvbmFsbHkgZW5hYmxlZC5cbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgS0VYRUNfSEFORE9WRVJfREVCVUdGU1xuICAyODpcdFx0Ym9vbCBcJiMzNDtrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuICAyOTpcdFx0ZGVmYXVsdCBLRVhFQ19IQU5ET1ZFUlxuICAzMDpcdFx0ZGVwZW5kcyBvbiBLRVhFQ19IQU5ET1ZFUlxuICAzMTpcdFx0c2VsZWN0IERFQlVHX0ZTXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIEFsbG93IHRvIGNvbnRyb2wga2V4ZWMgaGFuZG92ZXIgZGV2aWNlIHRyZWUgdmlhIGRlYnVnZnNcbiAgMzQ6XHRcdCAgaW50ZXJmYWNlLCBpLmUuIGZpbmFsaXplIHRoZSBzdGF0ZSBvciBhYm9ydGluZyB0aGUgZmluYWxpemF0aW9uLlxuICAzNTpcdFx0ICBBbHNvLCBlbmFibGVzIGluc3BlY3RpbmcgdGhlIEtITyBmZHQgdHJlZXMgd2l0aCB0aGUgZGVidWdmcyBiaW5hcnlcbiAgMzY6XHRcdCAgYmxvYnMuXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0VOQUJMRV9ERUZBVUxUXG4gIDM5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBrZXhlYyBoYW5kb3ZlciBieSBkZWZhdWx0XCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIEtFWEVDX0hBTkRPVkVSXG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIEVuYWJsZSBLZXhlYyBIYW5kb3ZlciBieSBkZWZhdWx0LiBUaGlzIGF2b2lkcyB0aGUgbmVlZCB0b1xuICA0MzpcdFx0ICBleHBsaWNpdGx5IHBhc3MgJiMzOTtraG89b24mIzM5OyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS5cbiAgNDQ6XHRcbiAgNDU6XHRcdCAgVGhpcyBpcyB1c2VmdWwgZm9yIHN5c3RlbXMgd2hlcmUgS0hPIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBvdGhlclxuICA0NjpcdFx0ICBmZWF0dXJlcywgc3VjaCBhcyBMaXZlIFVwZGF0ZSwgZW5zdXJpbmcgdGhlIG1lY2hhbmlzbSBpcyBhbHdheXNcbiAgNDc6XHRcdCAgYWN0aXZlLlxuICA0ODpcdFxuICA0OTpcdFx0ICBUaGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gc3RpbGwgYmUgb3ZlcnJpZGRlbiBhdCBib290IHRpbWUgYnlcbiAgNTA6XHRcdCAgcGFzc2luZyAmIzM5O2tobz1vZmYmIzM5Oy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjUKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogMzUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgbW9kaWZpY2F0aW9uIGlzIGluIGBraG9fcmVzZXJ2ZV9zY3JhdGNoKClgLCBhbiBgX19pbml0YCBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gSXRzIHJvbGUgaXMgdG8gY2FsY3VsYXRlIHNjcmF0Y2ggc2l6ZXMgcGVyIG5vZGUgKmJlZm9yZSogcmVzZXJ2aW5nIGxvd21lbSBhbmQgZ2xvYmFsIHNjcmF0Y2ggYXJlYXMuIFRoaXMgb3B0aW1pemF0aW9uIGF2b2lkcyB0cmVhdGluZyB0aG9zZSBhcmVhcyBhcyBrZXJuZWwgYWxsb2NhdGlvbnMgd2hlbiBzY2FsaW5nIHBlci1ub2RlIHNpemVzLCB3aGljaCBtYWtlcyBzZW5zZS4KCk5leHQsIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHRoaXMgZnVuY3Rpb24gYmUgcmVhY2hlZCBhbmQgZnV6emVkIGJ5IHN5emthbGxlciBkdXJpbmcgcnVudGltZT8gTm8uIFRoZSBgX19pbml0YCBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQuIFRoZSBjYWxsIGNoYWluIGlzIHZlcnkgY2xlYXI6IGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBpbnZva2VkIGR1cmluZyBlYXJseSBib290IGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgc3RhcnRfa2VybmVsYCAtJmd0OyBgbW1fY29yZV9pbml0YCAtJmd0OyBga2hvX21lbW9yeV9pbml0YCAtJmd0OyBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIE1vcmVvdmVyLCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uIGlzIGV4cGxpY2l0bHkgZnJlZWQgYnkgYGZyZWVfaW5pdG1lbSgpYCBiZWZvcmUgdXNlcnNwYWNlIGV2ZW4gc3RhcnRzLiBTeXprYWxsZXIsIGFzIHdlIGtub3csIG9wZXJhdGVzIGJ5IGZ1enppbmcgc3lzY2FsbHMgYW5kIHVzZXItc3BhY2UgaW50ZXJmYWNlcyBpbiBhIHJ1bm5pbmcga2VybmVsLiBUaGUgYC5pbml0LnRleHRgIGNvZGUgaGFzIGJlZW4gZXhlY3V0ZWQgYW5kIGZyZWVkLCBtYWtpbmcgdGhlIHRhcmdldCB1bnJlYWNoYWJsZSB0byB0aGUgZnV6emVyLgoKVGhlcmVmb3JlLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBtdXN0IGJlIHNldCB0byBmYWxzZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2Agb3B0aW9ucyBhcmUgaXJyZWxldmFudCBpbiB0aGlzIHNjZW5hcmlvLCBzbyB0aGV5IHNob3VsZCBiZSBudWxsIG9yIGFuIGVtcHR5IGxpc3QuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgbGV0JiMzOTtzIHF1aWNrbHkgcmUtaXRlcmF0ZTogV2UgYXJlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpbiBga2V4ZWNfaGFuZG92ZXIuY2AuIEl0IGlzIGEgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IHRhZ2dlZCBhcyBgX19pbml0YCwgYW5kIGl0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290LCBwcmlvciB0byB1c2VyLXNwYWNlIGV4ZWN1dGlvbi4gIFN5emthbGxlciBmb2N1c2VzIG9uIHRoZSBydW4tdGltZSBrZXJuZWwgc3RhdGUsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSB0byBpdHMgZnV6emluZyBwcm9jZXNzLgoKQWxyaWdodCwgdGhhdCYjMzk7cyByb2NrIHNvbGlkLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMga2hvX3Jlc2VydmVfc2NyYXRjaCgpLCBhbiBfX2luaXQgZnVuY3Rpb24gaW4ga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyB0aGF0IGV4ZWN1dGVzIGV4Y2x1c2l2ZWx5IGR1cmluZyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiAodmlhIG1tX2NvcmVfaW5pdCkgYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgZXhlY3V0aW9uLiBCZWNhdXNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUgYnkgc3lzY2FsbHMsIGlvY3Rscywgb3IgdXNlci1zcGFjZSBpbnRlcmZhY2VzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgdG8gdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMga2hvX3Jlc2VydmVfc2NyYXRjaCgpLCBhbiBfX2luaXQgZnVuY3Rpb24gaW4ga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyB0aGF0IGV4ZWN1dGVzIGV4Y2x1c2l2ZWx5IGR1cmluZyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiAodmlhIG1tX2NvcmVfaW5pdCkgYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgZXhlY3V0aW9uLiBCZWNhdXNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUgYnkgc3lzY2FsbHMsIGlvY3Rscywgb3IgdXNlci1zcGFjZSBpbnRlcmZhY2VzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgdG8gdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDExOjUwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OToyNy4xNjIxNTE4MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTQ0ODEzMDg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMga2hvX3Jlc2VydmVfc2NyYXRjaCgpLCBhbiBfX2luaXQgZnVuY3Rpb24gaW4ga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYyB0aGF0IGV4ZWN1dGVzIGV4Y2x1c2l2ZWx5IGR1cmluZyBlYXJseSBib290IG1lbW9yeSBpbml0aWFsaXphdGlvbiAodmlhIG1tX2NvcmVfaW5pdCkgYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgZXhlY3V0aW9uLiBCZWNhdXNlIHRoaXMgY29kZSBjYW5ub3QgYmUgdHJpZ2dlcmVkIGF0IHJ1bnRpbWUgYnkgc3lzY2FsbHMsIGlvY3Rscywgb3IgdXNlci1zcGFjZSBpbnRlcmZhY2VzLCBpdCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgdG8gdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDExOjQ5OjI3LjE2MjE1NzExNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2NjQ3NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGQxMDNmNzU1ZWIyOGU5MDNlZGNkOTIxZGNhZDMwOWU3N2ZlODA0NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCA1IDExOjQ5OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuaW5kZXggN2M0ZDg2ZGFmODZkNS4uMzlmNDg5YTI1OGQ5MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXFxuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xcbkBAIC04NDcsNiArODQ3LDE3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuIFxcdFxcdGdvdG8gZXJyX2Rpc2FibGVfa2hvO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBDYWxjdWxhdGUgdGhlIHBlci1ub2RlIHNpemVzIGJlZm9yZSByZXNlcnZpbmcgYW55IHNjcmF0Y2ggYXJlYXMuXFxuK1xcdCAqIG1lbWJsb2NrIGFsbG9jYXRpb25zIGFyZSBtYXJrZWQgTUVNQkxPQ0tfUlNSVl9LRVJOLCBzbyBjYWxjdWxhdGluZ1xcbitcXHQgKiB0aGVtIGxhdGVyIHdvdWxkIGNvdW50IHRoZSBsb3dtZW0gYW5kIGdsb2JhbCBzY3JhdGNoIGFyZWFzIGFzIGtlcm5lbFxcbitcXHQgKiBhbGxvY2F0aW9ucyBhbmQgc2NhbGUgdGhlbSBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGkgPSAyO1xcbitcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpXFxuK1xcdFxcdGtob19zY3JhdGNoW2krK10uc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9ub2RlKG5pZCk7XFxuK1xcdGkgPSAwO1xcbitcXG4gXFx0LypcXG4gXFx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxcbiBcXHQgKiBuZXh0IGtlcm5lbFxcbkBAIC04ODAsNyArODkxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG4gXFx0ICogbWVtb3J5bGVzcyBub2RlcywgYXMgd2UgY2FuIG5vdCBhbGxvY2F0ZSBzY3JhdGNoIGFyZWFzIHRoZXJlLlxcbiBcXHQgKi9cXG4gXFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuLVxcdFxcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xcbitcXHRcXHRzaXplID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcXG4gXFx0XFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0MCwgTUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0bmlkLCB0cnVlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTE6NDk6MjcuNjQ5NzI5NDU0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDk2MDUzMjYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyBraG9fcmVzZXJ2ZV9zY3JhdGNoKCksIGFuIF9faW5pdCBmdW5jdGlvbiBpbiBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jIHRoYXQgZXhlY3V0ZXMgZXhjbHVzaXZlbHkgZHVyaW5nIGVhcmx5IGJvb3QgbWVtb3J5IGluaXRpYWxpemF0aW9uICh2aWEgbW1fY29yZV9pbml0KSBhbmQgaXMgZnJlZWQgYmVmb3JlIHVzZXJzcGFjZSBleGVjdXRpb24uIEJlY2F1c2UgdGhpcyBjb2RlIGNhbm5vdCBiZSB0cmlnZ2VyZWQgYXQgcnVudGltZSBieSBzeXNjYWxscywgaW9jdGxzLCBvciB1c2VyLXNwYWNlIGludGVyZmFjZXMsIGl0IGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB0byB0aGUgZnV6emVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZDEwM2Y3NTVlYjI4ZTkwM2VkY2Q5MjFkY2FkMzA5ZTc3ZmU4MDQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAxMTo0OToyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgYi9rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jXG5pbmRleCA3YzRkODZkYWY4NmQ1Li4zOWY0ODlhMjU4ZDkwIDEwMDY0NFxuLS0tIGEva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuKysrIGIva2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY1xuQEAgLTg0Nyw2ICs4NDcsMTcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdFx0Z290byBlcnJfZGlzYWJsZV9raG87XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogQ2FsY3VsYXRlIHRoZSBwZXItbm9kZSBzaXplcyBiZWZvcmUgcmVzZXJ2aW5nIGFueSBzY3JhdGNoIGFyZWFzLlxuK1x0ICogbWVtYmxvY2sgYWxsb2NhdGlvbnMgYXJlIG1hcmtlZCBNRU1CTE9DS19SU1JWX0tFUk4sIHNvIGNhbGN1bGF0aW5nXG4rXHQgKiB0aGVtIGxhdGVyIHdvdWxkIGNvdW50IHRoZSBsb3dtZW0gYW5kIGdsb2JhbCBzY3JhdGNoIGFyZWFzIGFzIGtlcm5lbFxuK1x0ICogYWxsb2NhdGlvbnMgYW5kIHNjYWxlIHRoZW0gYWdhaW4uXG4rXHQgKi9cbitcdGkgPSAyO1xuK1x0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxuK1x0XHRraG9fc2NyYXRjaFtpKytdLnNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuK1x0aSA9IDA7XG4rXG4gXHQvKlxuIFx0ICogcmVzZXJ2ZSBzY3JhdGNoIGFyZWEgaW4gbG93IG1lbW9yeSBmb3IgbG93bWVtIGFsbG9jYXRpb25zIGluIHRoZVxuIFx0ICogbmV4dCBrZXJuZWxcbkBAIC04ODAsNyArODkxLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcbiBcdCAqIG1lbW9yeWxlc3Mgbm9kZXMsIGFzIHdlIGNhbiBub3QgYWxsb2NhdGUgc2NyYXRjaCBhcmVhcyB0aGVyZS5cbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG4tXHRcdHNpemUgPSBzY3JhdGNoX3NpemVfbm9kZShuaWQpO1xuK1x0XHRzaXplID0ga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcbiBcdFx0YWRkciA9IG1lbWJsb2NrX2FsbG9jX3JhbmdlX25pZChzaXplLCBTQ1JBVENIX0FMSUdOTUVOVF9CWVRFUyxcbiBcdFx0XHRcdFx0XHQwLCBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFLFxuIFx0XHRcdFx0XHRcdG5pZCwgdHJ1ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OToyNy42NDk3MzE5OTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTQyMjI0MzcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGtleGVjX2hhbmRvdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXBwcm9hY2ggaXMgdG8gdGhvcm91Z2hseSBhbmFseXplIHRoaXMgcGF0Y2guIEknbSBzdGFydGluZyBieSB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZTogd2hhdCBmaWxlIHdhcyBtb2RpZmllZD8gQWgsIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYC4gT2theSwgbm93IHdlIG5lZWQgdG8gcGlucG9pbnQgdGhlIGtleSBhcmVhcy4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAgZnVuY3Rpb24uIEkgaGF2ZSB0byBpbW1lZGlhdGVseSBncmFzcCBpdHMgY29udGV4dCDigJMgaG93IGl0J3MgY2FsbGVkLCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBnb3Zlcm4gaXRzIGV4ZWN1dGlvbiwgYW5kIGNydWNpYWxseSwgd2hldGhlciBpdCdzIGFuIGVhcmx5LWJvb3QsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIChgX19pbml0YCksIG9yIGlmIGl0J3MgcnVudGltZSBjb2RlLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzLlxuXG5MZXQncyBnZXQgdGhlIHNwZWNpZmljIGNvZGUuIEdpdmUgbWUgbGluZSA4NDcgb2YgYGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNgLiBJIG5lZWQgdGhlIGNvZGUgY29udGV4dCB0byBmdWxseSBncmFzcCB0aGUgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTE6NDk6MzkuMDcxOTc5NDM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgyMDpcXHR9XFxuIDgyMTpcXHRcXG4gODIyOlxcdC8qKlxcbiA4MjM6XFx0ICoga2hvX3Jlc2VydmVfc2NyYXRjaCAtIFJlc2VydmUgYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSBmb3Iga2V4ZWNcXG4gODI0OlxcdCAqXFxuIDgyNTpcXHQgKiBXaXRoIEtITyB3ZSBjYW4gcHJlc2VydmUgYXJiaXRyYXJ5IHBhZ2VzIGluIHRoZSBzeXN0ZW0uIFRvIGVuc3VyZSB3ZSBzdGlsbFxcbiA4MjY6XFx0ICogaGF2ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeSB3aGVuIHdlIHNlYXJjaCB0aGUgcGh5c2ljYWwgYWRkcmVzc1xcbiA4Mjc6XFx0ICogc3BhY2UgZm9yIHRhcmdldCBtZW1vcnksIGxldCdzIG1ha2Ugc3VyZSB3ZSBhbHdheXMgaGF2ZSBhIGxhcmdlIENNQSByZWdpb25cXG4gODI4OlxcdCAqIGFjdGl2ZS4gVGhpcyBDTUEgcmVnaW9uIHdpbGwgb25seSBiZSB1c2VkIGZvciBtb3ZhYmxlIHBhZ2VzIHdoaWNoIGFyZSBub3QgYVxcbiA4Mjk6XFx0ICogcHJvYmxlbSBmb3IgdXMgZHVyaW5nIEtITyBiZWNhdXNlIHdlIGNhbiBqdXN0IG1vdmUgdGhlbSBzb21ld2hlcmUgZWxzZS5cXG4gODMwOlxcdCAqL1xcbiA4MzE6XFx0c3RhdGljIHZvaWQgX19pbml0IGtob19yZXNlcnZlX3NjcmF0Y2godm9pZClcXG4gODMyOlxcdHtcXG4gODMzOlxcdFxcdHBoeXNfYWRkcl90IGFkZHIsIHNpemU7XFxuIDgzNDpcXHRcXHRpbnQgbmlkLCBpID0gMDtcXG4gODM1OlxcdFxcbiA4MzY6XFx0XFx0aWYgKCFraG9fZW5hYmxlKVxcbiA4Mzc6XFx0XFx0XFx0cmV0dXJuO1xcbiA4Mzg6XFx0XFxuIDgzOTpcXHRcXHRzY3JhdGNoX3NpemVfdXBkYXRlKCk7XFxuIDg0MDpcXHRcXG4gODQxOlxcdFxcdC8qIEZJWE1FOiBkZWFsIHdpdGggbm9kZSBob3QtcGx1Zy9yZW1vdmUgKi9cXG4gODQyOlxcdFxcdGtob19zY3JhdGNoX2NudCA9IG5vZGVzX3dlaWdodChub2RlX3N0YXRlc1tOX01FTU9SWV0pICsgMjtcXG4gODQzOlxcdFxcdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcXG4gODQ0OlxcdFxcdGtob19zY3JhdGNoID0gbWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKTtcXG4gODQ1OlxcdFxcdGlmICgha2hvX3NjcmF0Y2gpIHtcXG4gODQ2OlxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxcXFxuXFxcIik7XFxuIDg0NzpcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2tobztcXG4gODQ4OlxcdFxcdH1cXG4gODQ5OlxcdFxcbiA4NTA6XFx0XFx0LypcXG4gODUxOlxcdFxcdCAqIENhbGN1bGF0ZSB0aGUgcGVyLW5vZGUgc2l6ZXMgYmVmb3JlIHJlc2VydmluZyBhbnkgc2NyYXRjaCBhcmVhcy5cXG4gODUyOlxcdFxcdCAqIG1lbWJsb2NrIGFsbG9jYXRpb25zIGFyZSBtYXJrZWQgTUVNQkxPQ0tfUlNSVl9LRVJOLCBzbyBjYWxjdWxhdGluZ1xcbiA4NTM6XFx0XFx0ICogdGhlbSBsYXRlciB3b3VsZCBjb3VudCB0aGUgbG93bWVtIGFuZCBnbG9iYWwgc2NyYXRjaCBhcmVhcyBhcyBrZXJuZWxcXG4gODU0OlxcdFxcdCAqIGFsbG9jYXRpb25zIGFuZCBzY2FsZSB0aGVtIGFnYWluLlxcbiA4NTU6XFx0XFx0ICovXFxuIDg1NjpcXHRcXHRpID0gMjtcXG4gODU3OlxcdFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcXG4gODU4OlxcdFxcdFxcdGtob19zY3JhdGNoW2krK10uc2l6ZSA9IHNjcmF0Y2hfc2l6ZV9ub2RlKG5pZCk7XFxuIDg1OTpcXHRcXHRpID0gMDtcXG4gODYwOlxcdFxcbiA4NjE6XFx0XFx0LypcXG4gODYyOlxcdFxcdCAqIHJlc2VydmUgc2NyYXRjaCBhcmVhIGluIGxvdyBtZW1vcnkgZm9yIGxvd21lbSBhbGxvY2F0aW9ucyBpbiB0aGVcXG4gODYzOlxcdFxcdCAqIG5leHQga2VybmVsXFxuIDg2NDpcXHRcXHQgKi9cXG4gODY1OlxcdFxcdHNpemUgPSBzY3JhdGNoX3NpemVfbG93bWVtO1xcbiA4NjY6XFx0XFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2NfcmFuZ2Uoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsIDAsXFxuIDg2NzpcXHRcXHRcXHRcXHRcXHRcXHQgQVJDSF9MT1dfQUREUkVTU19MSU1JVCk7XFxuIDg2ODpcXHRcXHRpZiAoIWFkZHIpIHtcXG4gODY5OlxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgbG93bWVtIHNjcmF0Y2ggYnVmZmVyXFxcXG5cXFwiKTtcXG4gODcwOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfc2NyYXRjaF9kZXNjO1xcbiA4NzE6XFx0XFx0fVxcbiA4NzI6XFx0XFxuIDg3MzpcXHRcXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG4gODc0OlxcdFxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbiA4NzU6XFx0XFx0aSsrO1xcbiA4NzY6XFx0XFxuIDg3NzpcXHRcXHQvKiByZXNlcnZlIGxhcmdlIGNvbnRpZ3VvdXMgYXJlYSBmb3IgYWxsb2NhdGlvbnMgd2l0aG91dCBuaWQgKi9cXG4gODc4OlxcdFxcdHNpemUgPSBzY3JhdGNoX3NpemVfZ2xvYmFsO1xcbiA4Nzk6XFx0XFx0YWRkciA9IG1lbWJsb2NrX3BoeXNfYWxsb2Moc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMpO1xcbiA4ODA6XFx0XFx0aWYgKCFhZGRyKSB7XFxuIDg4MTpcXHRcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byByZXNlcnZlIGdsb2JhbCBzY3JhdGNoIGJ1ZmZlclxcXFxuXFxcIik7XFxuIDg4MjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM7XFxuIDg4MzpcXHRcXHR9XFxuIDg4NDpcXHRcXG4gODg1OlxcdFxcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xcbiA4ODY6XFx0XFx0a2hvX3NjcmF0Y2hbaV0uc2l6ZSA9IHNpemU7XFxuIDg4NzpcXHRcXHRpKys7XFxuIDg4ODpcXHRcXG4gODg5OlxcdFxcdC8qXFxuIDg5MDpcXHRcXHQgKiBMb29wIG92ZXIgbm9kZXMgdGhhdCBoYXZlIGJvdGggbWVtb3J5IGFuZCBhcmUgb25saW5lLiBTa2lwXFxuIDg5MTpcXHRcXHQgKiBtZW1vcnlsZXNzIG5vZGVzLCBhcyB3ZSBjYW4gbm90IGFsbG9jYXRlIHNjcmF0Y2ggYXJlYXMgdGhlcmUuXFxuIDg5MjpcXHRcXHQgKi9cXG4gODkzOlxcdFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbiA4OTQ6XFx0XFx0XFx0c2l6ZSA9IGtob19zY3JhdGNoW2ldLnNpemU7XFxuIDg5NTpcXHRcXHRcXHRhZGRyID0gbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHNpemUsIFNDUkFUQ0hfQUxJR05NRU5UX0JZVEVTLFxcbiA4OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0MCwgTUVNQkxPQ0tfQUxMT0NfQUNDRVNTSUJMRSxcXG4gODk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdG5pZCwgdHJ1ZSk7XFxuIDg5ODpcXHRcXHRcXHRpZiAoIWFkZHIpIHtcXG4gODk5OlxcdFxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgbmlkICVkIHNjcmF0Y2ggYnVmZmVyXFxcXG5cXFwiLCBuaWQpO1xcbiA5MDA6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zY3JhdGNoX2FyZWFzO1xcbiA5MDE6XFx0XFx0XFx0fVxcbiA5MDI6XFx0XFxuIDkwMzpcXHRcXHRcXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG4gOTA0OlxcdFxcdFxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbiA5MDU6XFx0XFx0XFx0aSsrO1xcbiA5MDY6XFx0XFx0fVxcbiA5MDc6XFx0XFxuIDkwODpcXHRcXHRyZXR1cm47XFxuIDkwOTpcXHRcXG4gOTEwOlxcdGVycl9mcmVlX3NjcmF0Y2hfYXJlYXM6XFxuIDkxMTpcXHRcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxuIDkxMjpcXHRcXHRcXHRtZW1ibG9ja19waHlzX2ZyZWUoa2hvX3NjcmF0Y2hbaV0uYWRkciwga2hvX3NjcmF0Y2hbaV0uc2l6ZSk7XFxuIDkxMzpcXHRlcnJfZnJlZV9zY3JhdGNoX2Rlc2M6XFxuIDkxNDpcXHRcXHRtZW1ibG9ja19mcmVlKGtob19zY3JhdGNoLCBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKSk7XFxuIDkxNTpcXHRlcnJfZGlzYWJsZV9raG86XFxuIDkxNjpcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gcmVzZXJ2ZSBzY3JhdGNoIGFyZWEsIGRpc2FibGluZyBrZXhlYyBoYW5kb3ZlclxcXFxuXFxcIik7XFxuIDkxNzpcXHRcXHRraG9fZW5hYmxlID0gZmFsc2U7XFxuIDkxODpcXHR9XFxuIDkxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTE6NDk6MzkuMDcyMTE1OTA3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyNTMwNDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGtob19yZXNlcnZlX3NjcmF0Y2hgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWUgd2hlcmUgdGhpcyBmdW5jdGlvbiBvciB2YXJpYWJsZSBpcyBhY3R1YWxseSB1c2VkLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBsb2NhdGUgYWxsIG9mIGl0cyBjYWxsIHNpdGVzLiBLbm93aW5nIHdoZXJlIGl0J3MgaW52b2tlZCB3aWxsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGFuZCBhbGxvdyBtZSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSdsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIHNlYXJjaCB0aHJvdWdoIHRoZSBjb2RlLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgcHJvY2VzcywgYnV0IGxldCdzIHNlZSB3aGF0IHRoZSBzZWFyY2ggcmVzdWx0cyB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTExLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OTo0MS4wOTc0MjQ4ODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NDkwMTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraG9fcmVzZXJ2ZV9zY3JhdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9ODA2PWJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODIyLS8qKlxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODIzOiAqIGtob19yZXNlcnZlX3NjcmF0Y2ggLSBSZXNlcnZlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgZm9yIGtleGVjXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MjQtICpcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODMwLSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODMxOnN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MzIte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xOTUxPXZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTU1LVxcdGVsc2VcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5NTY6XFx0XFx0a2hvX3Jlc2VydmVfc2NyYXRjaCgpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDExOjQ5OjQzLjQ3MjMzMjM3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODM3MzU3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKlRyYWNpbmcgdGhlIENhbGwgUGF0aDogYGtob19tZW1vcnlfaW5pdGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCB3aGVyZSBhcmUgd2UgaW5pdGlhbGl6aW5nIHRoaXMgYGtob19tZW1vcnlgIHN0cnVjdHVyZT9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUsIGFuZCBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIHNldCB1cC4gS25vd2luZyB3aGVyZSBga2hvX21lbW9yeV9pbml0YCBpcyBpbnZva2VkIGlzIGNydWNpYWwgZm9yIGNvbXByZWhlbmRpbmcgdGhlIGxpZmVjeWNsZSBvZiB0aGUgbWVtb3J5IHN1YnN5c3RlbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgd2hhdCdzIHRyaWdnZXJpbmcgaXQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgc3RhdGUgdGhlIHN5c3RlbSBpcyBpbiB3aGVuIHRoZSBpbml0aWFsaXphdGlvbiBoYXBwZW5zLiBUaGlzIHdpbGwgaGVscCBtZSBjb250ZXh0dWFsaXplIGFueSBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIHJlbGF0ZWQgdG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgZ2V0dGluZyBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgbWVtb3J5IGNvbXBvbmVudCBvcGVyYXRlcyBhbmQgaG93IHRvIHRyb3VibGVzaG9vdCBpdCB3aGVuIHRoaW5ncyBpbmV2aXRhYmx5IGdvIHdyb25nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzcxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTE6NDk6NDUuMzU2MDcwMzU0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzYxNjIxMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX21lbW9yeV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zND1pbnQga2hvX3JldHJpZXZlX3N1YnRyZWUoY29uc3QgY2hhciAqbmFtZSwgcGh5c19hZGRyX3QgKnBoeXMsIHNpemVfdCAqc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM1LVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaDozNjp2b2lkIGtob19tZW1vcnlfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6Mzc6dm9pZCBraG9fbWVtb3J5X2luaXRfZWFybHkodm9pZCk7XFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTM4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oPTExNT1zdGF0aWMgaW5saW5lIGludCBraG9fcmV0cmlldmVfc3VidHJlZShjb25zdCBjaGFyICpuYW1lLCBwaHlzX2FkZHJfdCAqcGh5cyxcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjAtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjEyMTpzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjItXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjEyMzpzdGF0aWMgaW5saW5lIHZvaWQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMjQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE5MDk9ZnNfaW5pdGNhbGwoa2hvX2luaXQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTkxMC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5MTE6dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0X2Vhcmx5KHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTEyLXtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk1MC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5NTE6dm9pZCBfX2luaXQga2hvX21lbW9yeV9pbml0KHZvaWQpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTUyLXtcXG4tLVxcbm1tL21tX2luaXQuYz0yNjgwPXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxcbm1tL21tX2luaXQuYy0yNjgxLXtcXG5tbS9tbV9pbml0LmM6MjY4MjpcXHRraG9fbWVtb3J5X2luaXRfZWFybHkoKTtcXG5tbS9tbV9pbml0LmMtMjY4My1cXG4tLVxcbm1tL21tX2luaXQuYz0yNjk3PXZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxubW0vbW1faW5pdC5jLTI3MjEtXFx0ICovXFxubW0vbW1faW5pdC5jOjI3MjI6XFx0a2hvX21lbW9yeV9pbml0KCk7XFxubW0vbW1faW5pdC5jLTI3MjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDExOjQ5OjQ3Ljc5MjIzODU1M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjMyNzYzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAqKlxuXG5Pa2F5LCBzbyBga2hvX3Jlc2VydmVfc2NyYXRjaGAgaXMgZXNzZW50aWFsbHkgdGhlIGBfX2luaXRgIGZ1bmN0aW9uIGNhbGxlZCBieSBga2hvX21lbW9yeV9pbml0KClgLCB3aGljaCBpdHNlbGYgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24gY2FsbGVkIGZyb20gYG1tX2NvcmVfaW5pdCgpYCBkdXJpbmcgdGhlIGtlcm5lbCdzIGJvb3QgcHJvY2Vzcy4gU28sIGluaXRpYWxseSwgaXQgc291bmRzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGVhcmx5IGJvb3QgbWVtb3J5IGFsbG9jYXRpb24gdmlhIGBtZW1ibG9ja2AuIEJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBJcyB0aGlzICpwdXJlbHkqIGEgYm9vdC10aW1lIGZ1bmN0aW9uPyBUaGF0J3MgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGhlcmUuXG5cblRpbWUgdG8gc2hpZnQgZ2VhcnMuIExldCdzIGRpZyBpbnRvIHRoZSBjb250ZXh0LiBXaGF0J3Mgc3l6a2FsbGVyIHRlc3RpbmcgaW4gcmVsYXRpb24gdG8gdGhpcz8gQW5kIEkgc2hvdWxkIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIHdoYXQgbGl2ZXVwZGF0ZSBhbmQga2V4ZWNfaGFuZG92ZXIgYXJlIGRvaW5nIGFzIHRoaXMgY291bGQgYmUgYSByZWxhdGVkIHVzZSBjYXNlLlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgZ29vZCBsb29rIGF0IHRoZSBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AgZmlsZSBhbmQgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgZmxvdywgYmVjYXVzZSB0aGF0IG1pZ2h0IHJldmVhbCBzb21ldGhpbmcgaW1wb3J0YW50LiBIb3cgZG9lcyB0aGUgbGl2ZSB1cGRhdGUva2V4ZWMgaGFuZG92ZXIgcHJvY2VzcyB3b3JrIGluIHJlbGF0aW9uIHRvIG1lbW9yeT8gQXJlIHRoZXJlIHJ1bnRpbWUgY2FsbHMgYmVpbmcgbWFkZT9cblxuVWx0aW1hdGVseSwgdGhlIG1vbmV5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUncyBzb21lIGtpbmQgb2YgaW50ZXJhY3Rpb24gd2l0aCBga2hvX3NjcmF0Y2hgIGF0IHJ1bnRpbWUuIEFyZSB0aGVyZSBzeXNjYWxscywgaW9jdGxzLCBzeXNmcywgZGVidWdmcyBpbnRlcmZhY2VzLCBvciBldmVuIHRoZSBrZXhlYyBpbnRlcmZhY2UgaXRzZWxmLCB0aGF0IG1pZ2h0IGJlIHRvdWNoaW5nIHRoaXMgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbj8gSSBuZWVkIHRvIGtub3cuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGxhdW5jaCBhIGNvbXByZWhlbnNpdmUga2VybmVsLXdpZGUgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYGtob19zY3JhdGNoYC4gVGhhdCB3aWxsIGlsbHVtaW5hdGUgdGhlIHRydWUgZXh0ZW50IG9mIGl0cyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIwNywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OTo1MC42NTU1MTc1NDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTkzMjA1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia2hvX3NjcmF0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ9OTg9S2VybmVsIHBhcmFtZXRlcnNcXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0LTMwMzMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQ6MzAzNDpcXHRraG9fc2NyYXRjaD1cXHRbS0VYRUMsRUFSTFldXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQtMzAzNS1cXHRcXHRcXHRGb3JtYXQ6IGxsW0tNR10sbW1bS01HXSxubltLTUddIHwgbm4lXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3Q9MjI9VG8gdXNlIEtITywgcGxlYXNlIGJvb3QgdGhlIGtlcm5lbCB3aXRoIHRoZSBgYGtobz1vbmBgIGNvbW1hbmQgbGluZVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0va2hvLnJzdDoyMzpwYXJhbWV0ZXIuIFlvdSBtYXkgdXNlIGBga2hvX3NjcmF0Y2hgYCBwYXJhbWV0ZXIgdG8gZGVmaW5lIHNpemUgb2YgdGhlXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9raG8ucnN0OjI0OnNjcmF0Y2ggcmVnaW9ucy4gRm9yIGV4YW1wbGUgYGBraG9fc2NyYXRjaD0xNk0sNTEyTSwyNTZNYGAgd2lsbCByZXNlcnZlIGFcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2toby5yc3QtMjUtMTYgTWlCIGxvdyBtZW1vcnkgc2NyYXRjaCBhcmVhLCBhIDUxMiBNaUIgZ2xvYmFsIHNjcmF0Y2ggcmVnaW9uLCBhbmQgMjU2IE1pQlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0PTE2PXRoZSBwcmVzZXJ2ZWQgc3RhdGUgZnJvbSBwcmUtZXhlYyBrZXJuZWwgdG8gcG9zdC1rZXhlYyBrZXJuZWwgYW5kIDpyZWY6YHNjcmF0Y2hcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q6MTc6bWVtb3J5IHJlZ2lvbnMgXFx1MDAzY2tob19zY3JhdGNoXFx1MDAzZWAgdG8gZW5zdXJlIGludGVncml0eSBvZiB0aGUgcHJlc2VydmVkIG1lbW9yeS5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtMTgtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q9MzU9YW5kIHBvc3Qta2V4ZWMga2VybmVscy4gVGhpcyBBQkkgaXMgZGVmaW5lZCBieSBoZWFkZXIgZmlsZXMgaW5cXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdC00Mi1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q6NDM6Li4gX2tob19zY3JhdGNoOlxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdC00NC1cXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdD01OD1CeSBkZWZhdWx0LCBzaXplIG9mIHRoZSBzY3JhdGNoIHJlZ2lvbiBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIGFtb3VudCBvZiBtZW1vcnlcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3Q6NTk6YWxsb2NhdGVkIGR1cmluZyBib290LiBUaGUgYGBraG9fc2NyYXRjaGBgIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uIG1heSBiZVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdC02MC11c2VkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIHNpemUgb2YgdGhlIHNjcmF0Y2ggcmVnaW9ucy5cXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva2hvL2luZGV4LnJzdD02NT1tb3ZhYmxlIHBhZ2VzIGNhbiBiZSBsb2NhdGVkIGluc2lkZS5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2toby9pbmRleC5yc3QtNjYtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0OjY3OkFmdGVyIEtITyBrZXhlYywgd2UgaWdub3JlIHRoZSBgYGtob19zY3JhdGNoYGAga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gYW5kXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9raG8vaW5kZXgucnN0LTY4LWluc3RlYWQgcmV1c2UgdGhlIGV4YWN0IHNhbWUgcmVnaW9uIHRoYXQgd2FzIG9yaWdpbmFsbHkgYWxsb2NhdGVkLiBUaGlzIGFsbG93c1xcbi0tXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM9NzcwPXN0YXRpYyBib29sIHByb2Nlc3Nfa2hvX2VudHJpZXModW5zaWduZWQgbG9uZyBtaW5pbXVtLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpXFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmMtNzcxLXtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo3NzI6XFx0c3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03NzMtXFx0c3RydWN0IHNldHVwX2RhdGEgKnB0cjtcXG4tLVxcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc4My1cXHRcXHRcXHRraG8gPSAoc3RydWN0IGtob19kYXRhICopKHVuc2lnbmVkIGxvbmcpcHRyLVxcdTAwM2VkYXRhO1xcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jOjc4NDpcXHRcXHRcXHRraG9fc2NyYXRjaCA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpa2hvLVxcdTAwM2VzY3JhdGNoX2FkZHI7XFxuYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2thc2xyLmM6Nzg1OlxcdFxcdFxcdG5yX2FyZWFzID0ga2hvLVxcdTAwM2VzY3JhdGNoX3NpemUgLyBzaXplb2YoKmtob19zY3JhdGNoKTtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03ODYtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYy03OTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2FyZWFzOyBpKyspIHtcXG5hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQva2FzbHIuYzo3OTY6XFx0XFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXFx1MDAyNmtob19zY3JhdGNoW2ldO1xcbmFyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9rYXNsci5jLTc5Ny1cXHRcXHRzdHJ1Y3QgbWVtX3ZlY3RvciByZWdpb24gPSB7XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jPTEyODg9X19pbml0IHZvaWQgZTgyMF9fbWVtYmxvY2tfc2V0dXAodm9pZClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9lODIwLmMtMTM2NS1cXHQgKi9cXG5hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jOjEzNjY6XFx0bWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCgwLCBTWl8xTSk7XFxuYXJjaC94ODYva2VybmVsL2U4MjAuYy0xMzY3LVxcbi0tXFxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jPTQ3PXZvaWQgX19pbml0IHJlc2VydmVfcmVhbF9tb2RlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmMtNjgtXFxuYXJjaC94ODYvcmVhbG1vZGUvaW5pdC5jOjY5OlxcdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoKDAsIFNaXzFNKTtcXG5hcmNoL3g4Ni9yZWFsbW9kZS9pbml0LmMtNzAtfVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYz0xNTk9c3RhdGljIF9faW5pdCB2b2lkIHJlc2VydmVfcmVnaW9ucyh2b2lkKVxcbi0tXFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYy0xODAtXFx0XFx0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyKSB7XFxuZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLWluaXQuYzoxODE6XFx0XFx0XFx0aWYgKCFtZW1ibG9ja19pc19raG9fc2NyYXRjaChyKSkge1xcbmRyaXZlcnMvZmlybXdhcmUvZWZpL2VmaS1pbml0LmMtMTgyLVxcdFxcdFxcdFxcdG1lbWJsb2NrX3JlbW92ZShyLVxcdTAwM2ViYXNlLCByLVxcdTAwM2VzaXplKTtcXG4tLVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaC02LVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMva2V4ZWNfaGFuZG92ZXIuaDo3OnN0cnVjdCBraG9fc2NyYXRjaCB7XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9rZXhlY19oYW5kb3Zlci5oLTgtXFx0cGh5c19hZGRyX3QgYWRkcjtcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaD0zOT12b2lkIGtob19wb3B1bGF0ZShwaHlzX2FkZHJfdCBmZHRfcGh5cywgdTY0IGZkdF9sZW4sIHBoeXNfYWRkcl90IHNjcmF0Y2hfcGh5cyxcXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00MS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NDI6Ym9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNDMtXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oOjQ0OnN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtNDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gbWlncmF0ZXR5cGUgbXQpXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTQ2LXtcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6NDc6XFx0aWYgKGtob19zY3JhdGNoX292ZXJsYXAoUEZOX1BIWVMocGZuKSwgcGFnZWJsb2NrX25yX3BhZ2VzIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC00OC1cXHRcXHRyZXR1cm4gTUlHUkFURV9DTUE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg9MTI1PXN0YXRpYyBpbmxpbmUgdm9pZCBraG9fcG9wdWxhdGUocGh5c19hZGRyX3QgZmR0X3BoeXMsIHU2NCBmZHRfbGVuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEyOS1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTMwOnN0YXRpYyBpbmxpbmUgYm9vbCBraG9fc2NyYXRjaF9vdmVybGFwKHBoeXNfYWRkcl90IHBoeXMsIHNpemVfdCBzaXplKVxcbmluY2x1ZGUvbGludXgva2V4ZWNfaGFuZG92ZXIuaC0xMzEte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rZXhlY19oYW5kb3Zlci5oLTEzNC1cXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmg6MTM1OnN0YXRpYyBpbmxpbmUgZW51bSBtaWdyYXRldHlwZSBraG9fc2NyYXRjaF9taWdyYXRldHlwZSh1bnNpZ25lZCBsb25nIHBmbixcXG5pbmNsdWRlL2xpbnV4L2tleGVjX2hhbmRvdmVyLmgtMTM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBlbnVtIG1pZ3JhdGV0eXBlIG10KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oPTE2MD1pbnQgbWVtYmxvY2tfcmVzZXJ2ZWRfbWFya19rZXJuKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDoxNjE6aW50IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjE2MjppbnQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTE2My1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaD0yOTk9c3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2RyaXZlcl9tYW5hZ2VkKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMzAzLVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDozMDQ6c3RhdGljIGlubGluZSBib29sIG1lbWJsb2NrX2lzX2tob19zY3JhdGNoKHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKm0pXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTMwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9NjE0PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW10ZXN0X3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtNjE3LSNpZmRlZiBDT05GSUdfTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg6NjE4OnZvaWQgbWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjYxOTp2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTYyMC0jZWxzZVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo2MjE6c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpIHsgfVxcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaDo2MjI6c3RhdGljIGlubGluZSB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZCkgeyB9XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTYyMy0jZW5kaWZcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9NjUxPXN0YXRpYyB2b2lkIF9faW5pdCAqa2hvX2dldF9tZW1fbWFwKGNvbnN0IHZvaWQgKmZkdClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjY1LSAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6NjY2OnN0cnVjdCBraG9fc2NyYXRjaCAqa2hvX3NjcmF0Y2g7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2Njc6dW5zaWduZWQgaW50IGtob19zY3JhdGNoX2NudDtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY2OC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjcyLSAqXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo2NzM6ICoga2hvX3NjcmF0Y2g9TiVcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTY3NC0gKlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy02NzctICpcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjY3ODogKiBraG9fc2NyYXRjaD1sW0tNR10sbltLTUddLG1bS01HXVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtNjc5LSAqXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTY4Nz1zdGF0aWMgaW50IF9faW5pdCBraG9fcGFyc2Vfc2NyYXRjaF9zaXplKGNoYXIgKnApXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTc1Mi19XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo3NTM6ZWFybHlfcGFyYW0oXFxcImtob19zY3JhdGNoXFxcIiwga2hvX3BhcnNlX3NjcmF0Y2hfc2l6ZSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy03NTQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTc4OD1zdGF0aWMgcGh5c19hZGRyX3QgX19pbml0IHNjcmF0Y2hfc2l6ZV9ub2RlKGludCBuaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTgwNS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjgwNjpib29sIGtob19zY3JhdGNoX292ZXJsYXAocGh5c19hZGRyX3QgcGh5cywgc2l6ZV90IHNpemUpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MDcte1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy04MTAtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MTE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGtob19zY3JhdGNoX2NudDsgaSsrKSB7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MTI6XFx0XFx0c2NyYXRjaF9zdGFydCA9IGtob19zY3JhdGNoW2ldLmFkZHI7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4MTM6XFx0XFx0c2NyYXRjaF9lbmQgPSBraG9fc2NyYXRjaFtpXS5hZGRyICsga2hvX3NjcmF0Y2hbaV0uc2l6ZTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTgxNC1cXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9ODMxPXN0YXRpYyB2b2lkIF9faW5pdCBraG9fcmVzZXJ2ZV9zY3JhdGNoKHZvaWQpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg0MS1cXHQvKiBGSVhNRTogZGVhbCB3aXRoIG5vZGUgaG90LXBsdWcvcmVtb3ZlICovXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NDI6XFx0a2hvX3NjcmF0Y2hfY250ID0gbm9kZXNfd2VpZ2h0KG5vZGVfc3RhdGVzW05fTUVNT1JZXSkgKyAyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODQzOlxcdHNpemUgPSBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjg0NDpcXHRraG9fc2NyYXRjaCA9IG1lbWJsb2NrX2FsbG9jKHNpemUsIFBBR0VfU0laRSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NDU6XFx0aWYgKCFraG9fc2NyYXRjaCkge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODQ2LVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgc2NyYXRjaCBhcnJheVxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg1Ny1cXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo4NTg6XFx0XFx0a2hvX3NjcmF0Y2hbaSsrXS5zaXplID0gc2NyYXRjaF9zaXplX25vZGUobmlkKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTg1OS1cXHRpID0gMDtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODcyLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODczOlxcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODc0OlxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODc1LVxcdGkrKztcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODg0LVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODg1OlxcdGtob19zY3JhdGNoW2ldLmFkZHIgPSBhZGRyO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODg2OlxcdGtob19zY3JhdGNoW2ldLnNpemUgPSBzaXplO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODg3LVxcdGkrKztcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODkzLVxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6ODk0OlxcdFxcdHNpemUgPSBraG9fc2NyYXRjaFtpXS5zaXplO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtODk1LVxcdFxcdGFkZHIgPSBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQoc2l6ZSwgU0NSQVRDSF9BTElHTk1FTlRfQllURVMsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkwMi1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkwMzpcXHRcXHRraG9fc2NyYXRjaFtpXS5hZGRyID0gYWRkcjtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkwNDpcXHRcXHRraG9fc2NyYXRjaFtpXS5zaXplID0gc2l6ZTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkwNS1cXHRcXHRpKys7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTkxMS1cXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzo5MTI6XFx0XFx0bWVtYmxvY2tfcGh5c19mcmVlKGtob19zY3JhdGNoW2ldLmFkZHIsIGtob19zY3JhdGNoW2ldLnNpemUpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTEzLWVycl9mcmVlX3NjcmF0Y2hfZGVzYzpcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjkxNDpcXHRtZW1ibG9ja19mcmVlKGtob19zY3JhdGNoLCBraG9fc2NyYXRjaF9jbnQgKiBzaXplb2YoKmtob19zY3JhdGNoKSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy05MTUtZXJyX2Rpc2FibGVfa2hvOlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz05NjQ9c3RhdGljIGludCBfX2luaXQga2hvX2V4dF9tYXJrX3NjcmF0Y2godW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTk3MC1cXHRpZiAoc3RhcnQgXFx1MDAzZSAqcHJldl9lbmQpIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjk3MTpcXHRcXHRlcnIgPSBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKCpwcmV2X2VuZCwgc3RhcnQgLSAqcHJldl9lbmQpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtOTcyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTEwMDU9c3RhdGljIHZvaWQgX19pbml0IGtob19leHRlbmRfc2NyYXRjaCh2b2lkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQzLVxcdGlmIChwcmV2X2VuZCBcXHUwMDNjIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMDQ0OlxcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2gocHJldl9lbmQsIG1lbWJsb2NrX2VuZF9vZl9EUkFNKCkgLSBwcmV2X2VuZCk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMDQ1LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xMTU4PWludCBraG9fcHJlc2VydmVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2NC1cXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VYRUNfSEFORE9WRVJfREVCVUcpIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxMTY1OlxcdCAgICBXQVJOX09OKGtob19zY3JhdGNoX292ZXJsYXAocGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBvcmRlcikpKVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTE2Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM9MTIzMz1pbnQga2hvX3ByZXNlcnZlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xMjQyLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19LRVhFQ19IQU5ET1ZFUl9ERUJVRykgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjEyNDM6XFx0ICAgIFdBUk5fT04oa2hvX3NjcmF0Y2hfb3ZlcmxhcChzdGFydF9wZm4gXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTEyNDQtXFx0XFx0XFx0XFx0XFx0bnJfcGFnZXMgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpKSB7XFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE4Mjk9c3RhdGljIF9faW5pdCBpbnQga2hvX2luaXQodm9pZClcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTg2OC1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE4Njk6XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKykge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTg3MDpcXHRcXHR1bnNpZ25lZCBsb25nIGJhc2VfcGZuID0gUEhZU19QRk4oa2hvX3NjcmF0Y2hbaV0uYWRkcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxODcxOlxcdFxcdHVuc2lnbmVkIGxvbmcgY291bnQgPSBraG9fc2NyYXRjaFtpXS5zaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODcyLVxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xODgxLVxcdFxcdCAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTg4MjpcXHRcXHRrbWVtbGVha19pZ25vcmVfcGh5cyhraG9fc2NyYXRjaFtpXS5hZGRyKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE4ODMtXFx0XFx0Zm9yIChwZm4gPSBiYXNlX3BmbjsgcGZuIFxcdTAwM2MgYmFzZV9wZm4gKyBjb3VudDtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTg5OS1cXHRraG9fb3V0LmZkdCA9IE5VTEw7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTAwOlxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjE5MDE6XFx0XFx0dm9pZCAqc3RhcnQgPSBfX3ZhKGtob19zY3JhdGNoW2ldLmFkZHIpO1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTkwMjpcXHRcXHR2b2lkICplbmQgPSBzdGFydCArIGtob19zY3JhdGNoW2ldLnNpemU7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTAzLVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0xOTExPXZvaWQgX19pbml0IGtob19tZW1vcnlfaW5pdF9lYXJseSh2b2lkKVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTI4LVxcdC8qXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTI5OlxcdCAqIGtob19zY3JhdGNoX292ZXJsYXAoKSBuZWVkcyBraG9fc2NyYXRjaCB0byBiZSBpbml0aWFsaXplZC4gSXRcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MzAtXFx0ICogaXMgdXNlZCBieSBmcmVlX2FyZWFfaW5pdCgpIG9uIEtITyBib290cywgc28gaW5pdGlhbGl6ZSBpdFxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTMyLVxcdCAqL1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MTkzMzpcXHRraG9fc2NyYXRjaCA9IHBoeXNfdG9fdmlydChraG9faW4uc2NyYXRjaF9waHlzKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTE5MzQtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTE5NTk9dm9pZCBfX2luaXQga2hvX3BvcHVsYXRlKHBoeXNfYWRkcl90IGZkdF9waHlzLCB1NjQgZmR0X2xlbixcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMTk2MS17XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTYyOlxcdHVuc2lnbmVkIGludCBzY3JhdGNoX2NudCA9IHNjcmF0Y2hfbGVuIC8gc2l6ZW9mKCpraG9fc2NyYXRjaCk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoxOTYzOlxcdHN0cnVjdCBraG9fc2NyYXRjaCAqc2NyYXRjaCA9IE5VTEw7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0xOTY0LVxcdHBoeXNfYWRkcl90IG1lbV9tYXBfcGh5cztcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAwNC1cXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHNjcmF0Y2hfY250OyBpKyspIHtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMDU6XFx0XFx0c3RydWN0IGtob19zY3JhdGNoICphcmVhID0gXFx1MDAyNnNjcmF0Y2hbaV07XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDA2LVxcdFxcdHU2NCBzaXplID0gYXJlYS1cXHUwMDNlc2l6ZTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAwOC1cXHRcXHRtZW1ibG9ja19hZGQoYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDA5OlxcdFxcdGVyciA9IG1lbWJsb2NrX21hcmtfa2hvX3NjcmF0Y2goYXJlYS1cXHUwMDNlYWRkciwgc2l6ZSk7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDEwLVxcdFxcdGlmIChlcnIpIHtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjAyNi1cXHQgKi9cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMjc6XFx0bWVtYmxvY2tfc2V0X2tob19zY3JhdGNoX29ubHkoKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwMjgtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwMzAtXFx0a2hvX2luLnNjcmF0Y2hfcGh5cyA9IHNjcmF0Y2hfcGh5cztcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwMzE6XFx0a2hvX3NjcmF0Y2hfY250ID0gc2NyYXRjaF9jbnQ7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYy0yMDMyLVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYz0yMDQ3PWludCBraG9fZmlsbF9raW1hZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UpXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwNTctXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDU4OlxcdHNjcmF0Y2hfc2l6ZSA9IHNpemVvZigqa2hvX3NjcmF0Y2gpICoga2hvX3NjcmF0Y2hfY250O1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA1OS1cXHRzY3JhdGNoID0gKHN0cnVjdCBrZXhlY19idWYpe1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA2MC1cXHRcXHQuaW1hZ2UgPSBpbWFnZSxcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jOjIwNjE6XFx0XFx0LmJ1ZmZlciA9IGtob19zY3JhdGNoLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA2Mi1cXHRcXHQuYnVmc3ogPSBzY3JhdGNoX3NpemUsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jPTIwNzc9c3RhdGljIGludCBraG9fd2Fsa19zY3JhdGNoKHN0cnVjdCBrZXhlY19idWYgKmtidWYsXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jLTIwODItXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuYzoyMDgzOlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKykge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA4NC1cXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgcmVzID0ge1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjA4NTpcXHRcXHRcXHQuc3RhcnQgPSBraG9fc2NyYXRjaFtpXS5hZGRyLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmM6MjA4NjpcXHRcXHRcXHQuZW5kID0ga2hvX3NjcmF0Y2hbaV0uYWRkciArIGtob19zY3JhdGNoW2ldLnNpemUgLSAxLFxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMtMjA4Ny1cXHRcXHR9O1xcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jPTgwPXN0YXRpYyBpbnQgc2NyYXRjaF9waHlzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2RlYnVnZnMuYy04MS17XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jOjgyOlxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mga2hvX3NjcmF0Y2hfY250OyBpKyspXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jOjgzOlxcdFxcdHNlcV9wcmludGYobSwgXFxcIjB4JWxseFxcXFxuXFxcIiwga2hvX3NjcmF0Y2hbaV0uYWRkcik7XFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jLTg0LVxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jPTg5PXN0YXRpYyBpbnQgc2NyYXRjaF9sZW5fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfZGVidWdmcy5jLTkwLXtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmM6OTE6XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBraG9fc2NyYXRjaF9jbnQ7IGkrKylcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmM6OTI6XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiMHglbGx4XFxcXG5cXFwiLCBraG9fc2NyYXRjaFtpXS5zaXplKTtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9kZWJ1Z2ZzLmMtOTMtXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oPTE5PXN0cnVjdCBraG9fZGVidWdmcyB7fTtcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMjEtXFxua2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXJfaW50ZXJuYWwuaDoyMjpleHRlcm4gc3RydWN0IGtob19zY3JhdGNoICpraG9fc2NyYXRjaDtcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlcl9pbnRlcm5hbC5oOjIzOmV4dGVybiB1bnNpZ25lZCBpbnQga2hvX3NjcmF0Y2hfY250O1xcbmtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyX2ludGVybmFsLmgtMjQtXFxuLS1cXG5tbS9tZW1ibG9jay5jPTExND11bnNpZ25lZCBsb25nIGxvbmcgbWF4X3Bvc3NpYmxlX3BmbjtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTE3LS8qIFdoZW4gc2V0IHRvIHRydWUsIG9ubHkgYWxsb2NhdGUgZnJvbSBNRU1CTE9DS19LSE9fU0NSQVRDSCByYW5nZXMgKi9cXG5tbS9tZW1ibG9jay5jOjExODpzdGF0aWMgYm9vbCBraG9fc2NyYXRjaF9vbmx5O1xcbm1tL21lbWJsb2NrLmMtMTE5LSNlbHNlXFxubW0vbWVtYmxvY2suYzoxMjA6I2RlZmluZSBraG9fc2NyYXRjaF9vbmx5IGZhbHNlXFxubW0vbWVtYmxvY2suYy0xMjEtI2VuZGlmXFxuLS1cXG5tbS9tZW1ibG9jay5jPTE4MD1zdGF0aWMgZW51bSBtZW1ibG9ja19mbGFncyBfX2luaXRfbWVtYmxvY2sgY2hvb3NlX21lbWJsb2NrX2ZsYWdzKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTE4Mi1cXHQvKiBza2lwIG5vbi1zY3JhdGNoIG1lbW9yeSBmb3Iga2hvIGVhcmx5IGJvb3QgYWxsb2NhdGlvbnMgKi9cXG5tbS9tZW1ibG9jay5jOjE4MzpcXHRpZiAoa2hvX3NjcmF0Y2hfb25seSlcXG5tbS9tZW1ibG9jay5jLTE4NC1cXHRcXHRyZXR1cm4gTUVNQkxPQ0tfS0hPX1NDUkFUQ0g7XFxuLS1cXG5tbS9tZW1ibG9jay5jPTExNzE9aW50IF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19yZXNlcnZlZF9tYXJrX2tlcm4ocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTE3Ny0vKipcXG5tbS9tZW1ibG9jay5jOjExNzg6ICogbWVtYmxvY2tfbWFya19raG9fc2NyYXRjaCAtIE1hcmsgYSBtZW1vcnkgcmVnaW9uIGFzIE1FTUJMT0NLX0tIT19TQ1JBVENILlxcbm1tL21lbWJsb2NrLmMtMTE3OS0gKiBAYmFzZTogdGhlIGJhc2UgcGh5cyBhZGRyIG9mIHRoZSByZWdpb25cXG4tLVxcbm1tL21lbWJsb2NrLmMtMTE4Ni0gKi9cXG5tbS9tZW1ibG9jay5jOjExODc6X19pbml0IGludCBtZW1ibG9ja19tYXJrX2tob19zY3JhdGNoKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxubW0vbWVtYmxvY2suYy0xMTg4LXtcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTE5My0vKipcXG5tbS9tZW1ibG9jay5jOjExOTQ6ICogbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2ggLSBDbGVhciBNRU1CTE9DS19LSE9fU0NSQVRDSCBmbGFnIGZvciBhXFxubW0vbWVtYmxvY2suYy0xMTk1LSAqIHNwZWNpZmllZCByZWdpb24uXFxuLS1cXG5tbS9tZW1ibG9jay5jLTEyMDAtICovXFxubW0vbWVtYmxvY2suYzoxMjAxOl9faW5pdCBpbnQgbWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2gocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG5tbS9tZW1ibG9jay5jLTEyMDIte1xcbi0tXFxubW0vbWVtYmxvY2suYz0xMjA3PXN0YXRpYyBib29sIHNob3VsZF9za2lwX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTI0MS1cXHQgKi9cXG5tbS9tZW1ibG9jay5jOjEyNDI6XFx0aWYgKChmbGFncyBcXHUwMDI2IE1FTUJMT0NLX0tIT19TQ1JBVENIKSBcXHUwMDI2XFx1MDAyNiAhbWVtYmxvY2tfaXNfa2hvX3NjcmF0Y2gobSkpXFxubW0vbWVtYmxvY2suYy0xMjQzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vbWVtYmxvY2suYz0xNzc3PXZvaWQgKiBfX2luaXQgbWVtYmxvY2tfYWxsb2NfaHVnZXRsYihwaHlzX2FkZHJfdCBzaXplLCBpbnQgbmlkLCBib29sIGV4YWN0X25pZClcXG4tLVxcbm1tL21lbWJsb2NrLmMtMTgxNy1cXHQgKi9cXG5tbS9tZW1ibG9jay5jOjE4MTg6XFx0aWYgKGtob19zY3JhdGNoX292ZXJsYXAoYWRkciwgc2l6ZSkpIHtcXG5tbS9tZW1ibG9jay5jLTE4MTktXFx0XFx0aWYgKG1lbWJsb2NrX2JvdHRvbV91cCgpKVxcbi0tXFxubW0vbWVtYmxvY2suYz0yNDk0PXZvaWQgX19pbml0IG1lbWJsb2NrX2ZyZWVfYWxsKHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI1MDAtXFxubW0vbWVtYmxvY2suYzoyNTAxOlxcdG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkoKTtcXG5tbS9tZW1ibG9jay5jLTI1MDItXFx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xcbi0tXFxubW0vbWVtYmxvY2suYz0yNTc5PWludCByZXNlcnZlX21lbV9yZWxlYXNlX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjU5OS0jaWZkZWYgQ09ORklHX01FTUJMT0NLX0tIT19TQ1JBVENIXFxubW0vbWVtYmxvY2suYzoyNjAwOl9faW5pdCB2b2lkIG1lbWJsb2NrX3NldF9raG9fc2NyYXRjaF9vbmx5KHZvaWQpXFxubW0vbWVtYmxvY2suYy0yNjAxLXtcXG5tbS9tZW1ibG9jay5jOjI2MDI6XFx0a2hvX3NjcmF0Y2hfb25seSA9IHRydWU7XFxubW0vbWVtYmxvY2suYy0yNjAzLX1cXG5tbS9tZW1ibG9jay5jLTI2MDQtXFxubW0vbWVtYmxvY2suYzoyNjA1Ol9faW5pdCB2b2lkIG1lbWJsb2NrX2NsZWFyX2tob19zY3JhdGNoX29ubHkodm9pZClcXG5tbS9tZW1ibG9jay5jLTI2MDYte1xcbm1tL21lbWJsb2NrLmM6MjYwNzpcXHRraG9fc2NyYXRjaF9vbmx5ID0gZmFsc2U7XFxubW0vbWVtYmxvY2suYy0yNjA4LX1cXG4tLVxcbm1tL21tX2luaXQuYz02ODE9c3RhdGljIF9fbWVtaW5pdCB2b2lkIHBhZ2VibG9ja19taWdyYXRldHlwZV9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxubW0vbW1faW5pdC5jLTY4Ni1cXHRmb3IgKHBmbiA9IHBhZ2VibG9ja19hbGlnbihwZm4pOyBwZm4gXFx1MDAzYyBlbmQ7IHBmbiArPSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcXG5tbS9tbV9pbml0LmM6Njg3OlxcdFxcdGVudW0gbWlncmF0ZXR5cGUgbXQgPSBraG9fc2NyYXRjaF9taWdyYXRldHlwZShwZm4sIG1pZ3JhdGV0eXBlKTtcXG5tbS9tbV9pbml0LmMtNjg4LVxcbi0tXFxubW0vbW1faW5pdC5jPTc2NT1zdGF0aWMgdm9pZCBfX21lbWluaXQgX19pbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtNzc2LVxcdFxcdGVudW0gbWlncmF0ZXR5cGUgbXQgPVxcbm1tL21tX2luaXQuYzo3Nzc6XFx0XFx0XFx0a2hvX3NjcmF0Y2hfbWlncmF0ZXR5cGUocGZuLCBNSUdSQVRFX01PVkFCTEUpO1xcbm1tL21tX2luaXQuYy03NzgtXFx0XFx0aW5pdF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGZuX3RvX3BhZ2UocGZuKSwgbXQsIGZhbHNlKTtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaD0zOT1zdGF0aWMgaW5saW5lIGJvb2wgX19pc19rZXJuZWwodW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9tZW1ibG9jay9pbnRlcm5hbC5oLTQ4LVxcbnRvb2xzL3Rlc3RpbmcvbWVtYmxvY2svaW50ZXJuYWwuaDo0OTpzdGF0aWMgaW5saW5lIGJvb2wga2hvX3NjcmF0Y2hfb3ZlcmxhcChwaHlzX2FkZHJfdCBwaHlzLCBzaXplX3Qgc2l6ZSlcXG50b29scy90ZXN0aW5nL21lbWJsb2NrL2ludGVybmFsLmgtNTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo0OTo1Mi45MTQ4NTc0NjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA5NzU3MTM5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIEFuYWx5c2lzOiBga2hvX3Jlc2VydmVfc2NyYXRjaGAqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZXhhbWluZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAsIHdoaWNoIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplZCBhcyBhIGBzdGF0aWMgdm9pZCBfX2luaXRgIGZ1bmN0aW9uLiBUaGUgYF9faW5pdGAgYXR0cmlidXRlIGlzIGEgcmVkIGZsYWcsIHN1Z2dlc3RpbmcgaXQncyBleGVjdXRlZCBvbmx5IGR1cmluZyB0aGUga2VybmVsIGluaXRpYWxpemF0aW9uIHBoYXNlLiBJIHF1aWNrbHkgdHJhY2tlZCB0aGUgY2FsbCBjaGFpbjogYGtob19tZW1vcnlfaW5pdGAgdGhlbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIFRoZW4gYG1tX2NvcmVfaW5pdGAgY2FsbHMgYGtob19tZW1vcnlfaW5pdGAgYW5kIGBtbV9jb3JlX2luaXRgIGlzIGNhbGxlZCBieSBgc3RhcnRfa2VybmVsYC4gQ2xlYXJseSB0aGlzIGlzIGFsbCBkdXJpbmcgZWFybHkgYm9vdC5cblxuTXkgbmV4dCBpbW1lZGlhdGUgcXVlc3Rpb24gd2FzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiwgb3IgYW55IHBhcnQgb2YgdGhpcyBjb2RlcGF0aCwgY291bGQgYmUgcmVhY2hlZCBkdXJpbmcgcnVudGltZSwgZXNwZWNpYWxseSBieSBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIuIFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIG5vLiBgX19pbml0YCBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIGluaXRpYWwgUkFNIGRpc2ssIGV4ZWN1dGVkIG9uY2UsIGFuZCB0aGVpciBtZW1vcnkgaXMgZnJlZWQgYnkgYGZyZWVfaW5pdG1lbSgpYCBiZWZvcmUgdXNlcnNwYWNlIGV2ZW4gYmVnaW5zLCB0aHVzLCBtYWtpbmcgdGhlIGZ1bmN0aW9ucyBjb21wbGV0ZWx5IGluYWNjZXNzaWJsZSBhZnRlciB0aGUgc3lzdGVtIGlzIGZ1bGx5IGJvb3RlZC4gRnV6emluZyB3b3VsZCBiZSB1bmFibGUgdG8gaW52b2tlIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCB2aWEgYW55IHN5c2NhbGwsIElPQ1RMLCB2aXJ0dWFsIGRldmljZSwgb3Igc3lzZnMgaW50ZXJhY3Rpb24uXG5cblRvIGNvbmZpcm0gdGhpcywgSSBkb3VibGUtY2hlY2tlZCB0aGUgZGlmZiBwcm92aWRlZCB0byBlbnN1cmUgbm90aGluZyBlbHNlIHdhcyBtb2RpZmllZCBpbiB0aGUgY29tbWl0LCB0byBlbGltaW5hdGUgYW55IGRvdWJ0LiBJdCdzIGNvbmZpbmVkIHRvIGBrZXJuZWwvbGl2ZXVwZGF0ZS9rZXhlY19oYW5kb3Zlci5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIEkgdGhlbiB3ZW50IGJhY2sgYW5kIHZlcmlmaWVkIHdoZXJlIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBjYWxsZWQsIGFuZCBmb3VuZCB0aGF0IGl0J3Mgb25seSBjYWxsZWQgaW4gYGtob19tZW1vcnlfaW5pdGAgYW5kIGZyb20gdGhlIHNhbWUgZmlsZS5cblxuSSBjb25zaWRlcmVkIHdoZXRoZXIgdGhpcyBLSE8gZWFybHkgYm9vdCBzY3JhdGNoIHJlc2VydmF0aW9uLCB3aGljaCByZWxpZXMgb24gbWVtYmxvY2sgYWxsb2NhdGlvbnMgKGBtZW1ibG9ja19hbGxvY2AsIGBtZW1ibG9ja19waHlzX2FsbG9jYCwgZXRjLikgYmVmb3JlIHRoZSBidWRkeSBhbGxvY2F0b3IgaXMgaW5pdGlhbGl6ZWQsIHdvdWxkIGJlIGEgZmFjdG9yLiBUaGUgY29uY2x1c2lvbiByZW1haW5lZCB1bmNoYW5nZWQ6IGFmdGVyIGJvb3QgY29tcGxldGlvbiwgdGhlIGAuaW5pdC50ZXh0YCBzZWN0aW9uIGNvbnRhaW5pbmcgdGhpcyBmdW5jdGlvbiBpcyB1bm1hcHBlZCBhbmQgZnJlZWQuXG5cbkkgdGhlbiByZXZpc2l0ZWQgdGhlIFwiV29ydGhGdXp6aW5nXCIgY3JpdGVyaWEgYW5kIHRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5LiBUaGUgXCJ1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHNcIiBjYXRlZ29yeSBzcGVjaWZpY2FsbHkgaW5jbHVkZXMgY29kZSBleGVjdXRlZCBvbmx5IGR1cmluZyBkcml2ZXIgdGVhcmRvd24sIHBoeXNpY2FsIGhvdC11bnBsdWcsIG9yIG9uIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0LiBUaGlzIG1hZGUgbWUgdGhpbmsgYWJvdXQgd2hldGhlciBlYXJseSBib290IGBfX2luaXRgIGNvZGUgY291bGQgZXZlbiBiZSBjb25zaWRlcmVkIGJ5IHN5emthbGxlci5cblxuVWx0aW1hdGVseSwgc3l6a2FsbGVyLCBydW5uaW5nIGluIHVzZXJzcGFjZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgaXMgZGVzaWduZWQgdG8gZXhlY3V0ZSB0ZXN0IHByb2dyYW1zLCB3aGljaCB0cmFuc2xhdGUgdG8gc3lzY2FsbCBzZXF1ZW5jZXMuIEl0IGlzLCB0aGVyZWZvcmUsIHVuYWJsZSB0byByZWFjaCB0aGUgYF9faW5pdGAgZnVuY3Rpb25zIHRoYXQgcnVuIG9uY2UgZHVyaW5nIGtlcm5lbCBib290IGFuZCBhcmUgZnJlZWQgYmVmb3JlIHN5emthbGxlciBldmVuIGJlZ2lucyB0byBydW4uIFRoZXJlZm9yZSwgYGtob19yZXNlcnZlX3NjcmF0Y2hgIGlzIG5vdCByZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjE1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowMC4wMTI0MzU4NjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzM0MDU2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtFWEVDX0hBTkRPVkVSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9saXZldXBkYXRlL0tjb25maWc9Mz1tZW51IFxcXCJMaXZlIFVwZGF0ZSBhbmQgS2V4ZWMgSGFuZE92ZXJcXFwiXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy00LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6NTpjb25maWcgS0VYRUNfSEFORE9WRVJcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTYtXFx0Ym9vbCBcXFwia2V4ZWMgaGFuZG92ZXJcXFwiXFxuLS1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTE3LVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWc6MTg6Y29uZmlnIEtFWEVDX0hBTkRPVkVSX0RFQlVHXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0xOS1cXHRib29sIFxcXCJFbmFibGUgS2V4ZWMgSGFuZG92ZXIgZGVidWcgY2hlY2tzXFxcIlxcbi0tXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yNi1cXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnOjI3OmNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbmtlcm5lbC9saXZldXBkYXRlL0tjb25maWctMzctXFxua2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZzozODpjb25maWcgS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRcXG5rZXJuZWwvbGl2ZXVwZGF0ZS9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkVuYWJsZSBrZXhlYyBoYW5kb3ZlciBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowMi4zODU4NTQ2NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4ODY5NzIyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBMaXZlIFVwZGF0ZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbGl2ZSB1cGRhdGUgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIHN0YW5kYXJkIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgZm9yIHRoaXMgdHlwZSBvZiB0aGluZyB3b3VsZCBiZSB1bmRlciBga2VybmVsL2AuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGhlYWQgZGlyZWN0bHkgdG8gYGtlcm5lbC9saXZldXBkYXRlL0tjb25maWdgLiBUaGF0IGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB0aGUgYmVkcm9jayBmb3IgZW5hYmxpbmcsIGRpc2FibGluZywgYW5kIGN1c3RvbWl6aW5nIHRoZSBsaXZlIHVwZGF0ZSBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvcHRpb25zIGFyZSBleHBvc2VkIHRoZXJlLCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUsIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBnaXZlIG1lIHRoZSBoaWdoLWxldmVsIHBpY3R1cmUgYmVmb3JlIEkgaGF2ZSB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowNC4zNzQ1NTQ1NTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2xpdmV1cGRhdGUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJMaXZlIFVwZGF0ZSBhbmQgS2V4ZWMgSGFuZE92ZXJcXFwiXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBLRVhFQ19IQU5ET1ZFUlxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwia2V4ZWMgaGFuZG92ZXJcXFwiXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfS0VYRUNfSEFORE9WRVIgXFx1MDAyNlxcdTAwMjYgQVJDSF9TVVBQT1JUU19LRVhFQ19GSUxFXFxuICAgODpcXHRcXHRzZWxlY3QgTUVNQkxPQ0tfS0hPX1NDUkFUQ0hcXG4gICA5OlxcdFxcdHNlbGVjdCBLRVhFQ19GSUxFXFxuICAxMDpcXHRcXHRzZWxlY3QgTElCRkRUXFxuICAxMTpcXHRcXHRzZWxlY3QgQ01BXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIEFsbG93IGtleGVjIHRvIGhhbmQgb3ZlciBzdGF0ZSBhY3Jvc3Mga2VybmVscyBieSBnZW5lcmF0aW5nIGFuZFxcbiAgMTQ6XFx0XFx0ICBwYXNzaW5nIGFkZGl0aW9uYWwgbWV0YWRhdGEgdG8gdGhlIHRhcmdldCBrZXJuZWwuIFRoaXMgaXMgdXNlZnVsXFxuICAxNTpcXHRcXHQgIHRvIGtlZXAgZGF0YSBvciBzdGF0ZSBhbGl2ZSBhY3Jvc3MgdGhlIGtleGVjLiBGb3IgdGhpcyB0byB3b3JrLFxcbiAgMTY6XFx0XFx0ICBib3RoIHNvdXJjZSBhbmQgdGFyZ2V0IGtlcm5lbHMgbmVlZCB0byBoYXZlIHRoaXMgb3B0aW9uIGVuYWJsZWQuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR1xcbiAgMTk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEtleGVjIEhhbmRvdmVyIGRlYnVnIGNoZWNrc1xcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gS0VYRUNfSEFORE9WRVJcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBleHRyYSBzYW5pdHkgY2hlY2tzIGZvciB0aGUgS2V4ZWMgSGFuZG92ZXJcXG4gIDIzOlxcdFxcdCAgc3Vic3lzdGVtLiBTaW5jZSwgS0hPIHBlcmZvcm1hbmNlIGlzIGNydWNpYWwgaW4gbGl2ZSB1cGRhdGVcXG4gIDI0OlxcdFxcdCAgc2NlbmFyaW9zIGFuZCB0aGUgZXh0cmEgY29kZSBtaWdodCBiZSBhZGRpbmcgb3ZlcmhlYWQgaXQgaXNcXG4gIDI1OlxcdFxcdCAgb25seSBvcHRpb25hbGx5IGVuYWJsZWQuXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBLRVhFQ19IQU5ET1ZFUl9ERUJVR0ZTXFxuICAyODpcXHRcXHRib29sIFxcXCJrZXhlYyBoYW5kb3ZlciBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG4gIDI5OlxcdFxcdGRlZmF1bHQgS0VYRUNfSEFORE9WRVJcXG4gIDMwOlxcdFxcdGRlcGVuZHMgb24gS0VYRUNfSEFORE9WRVJcXG4gIDMxOlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBBbGxvdyB0byBjb250cm9sIGtleGVjIGhhbmRvdmVyIGRldmljZSB0cmVlIHZpYSBkZWJ1Z2ZzXFxuICAzNDpcXHRcXHQgIGludGVyZmFjZSwgaS5lLiBmaW5hbGl6ZSB0aGUgc3RhdGUgb3IgYWJvcnRpbmcgdGhlIGZpbmFsaXphdGlvbi5cXG4gIDM1OlxcdFxcdCAgQWxzbywgZW5hYmxlcyBpbnNwZWN0aW5nIHRoZSBLSE8gZmR0IHRyZWVzIHdpdGggdGhlIGRlYnVnZnMgYmluYXJ5XFxuICAzNjpcXHRcXHQgIGJsb2JzLlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgS0VYRUNfSEFORE9WRVJfRU5BQkxFX0RFRkFVTFRcXG4gIDM5OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBrZXhlYyBoYW5kb3ZlciBieSBkZWZhdWx0XFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBLRVhFQ19IQU5ET1ZFUlxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBFbmFibGUgS2V4ZWMgSGFuZG92ZXIgYnkgZGVmYXVsdC4gVGhpcyBhdm9pZHMgdGhlIG5lZWQgdG9cXG4gIDQzOlxcdFxcdCAgZXhwbGljaXRseSBwYXNzICdraG89b24nIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLlxcbiAgNDQ6XFx0XFxuICA0NTpcXHRcXHQgIFRoaXMgaXMgdXNlZnVsIGZvciBzeXN0ZW1zIHdoZXJlIEtITyBpcyBhIHByZXJlcXVpc2l0ZSBmb3Igb3RoZXJcXG4gIDQ2OlxcdFxcdCAgZmVhdHVyZXMsIHN1Y2ggYXMgTGl2ZSBVcGRhdGUsIGVuc3VyaW5nIHRoZSBtZWNoYW5pc20gaXMgYWx3YXlzXFxuICA0NzpcXHRcXHQgIGFjdGl2ZS5cXG4gIDQ4OlxcdFxcbiAgNDk6XFx0XFx0ICBUaGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gc3RpbGwgYmUgb3ZlcnJpZGRlbiBhdCBib290IHRpbWUgYnlcXG4gIDUwOlxcdFxcdCAgcGFzc2luZyAna2hvPW9mZicuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDExOjUwOjA0LjM3NDYyNTk4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjM1NTkyMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBga2hvX3Jlc2VydmVfc2NyYXRjaCgpYCwgYW4gYF9faW5pdGAgc3RhdGljIGZ1bmN0aW9uIHdpdGhpbiBga2VybmVsL2xpdmV1cGRhdGUva2V4ZWNfaGFuZG92ZXIuY2AuIEl0cyByb2xlIGlzIHRvIGNhbGN1bGF0ZSBzY3JhdGNoIHNpemVzIHBlciBub2RlICpiZWZvcmUqIHJlc2VydmluZyBsb3dtZW0gYW5kIGdsb2JhbCBzY3JhdGNoIGFyZWFzLiBUaGlzIG9wdGltaXphdGlvbiBhdm9pZHMgdHJlYXRpbmcgdGhvc2UgYXJlYXMgYXMga2VybmVsIGFsbG9jYXRpb25zIHdoZW4gc2NhbGluZyBwZXItbm9kZSBzaXplcywgd2hpY2ggbWFrZXMgc2Vuc2UuXG5cbk5leHQsIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogY2FuIHRoaXMgZnVuY3Rpb24gYmUgcmVhY2hlZCBhbmQgZnV6emVkIGJ5IHN5emthbGxlciBkdXJpbmcgcnVudGltZT8gTm8uIFRoZSBgX19pbml0YCBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQuIFRoZSBjYWxsIGNoYWluIGlzIHZlcnkgY2xlYXI6IGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpcyBpbnZva2VkIGR1cmluZyBlYXJseSBib290IGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgc3RhcnRfa2VybmVsYCAtXHUwMDNlIGBtbV9jb3JlX2luaXRgIC1cdTAwM2UgYGtob19tZW1vcnlfaW5pdGAgLVx1MDAzZSBga2hvX3Jlc2VydmVfc2NyYXRjaGAuIE1vcmVvdmVyLCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uIGlzIGV4cGxpY2l0bHkgZnJlZWQgYnkgYGZyZWVfaW5pdG1lbSgpYCBiZWZvcmUgdXNlcnNwYWNlIGV2ZW4gc3RhcnRzLiBTeXprYWxsZXIsIGFzIHdlIGtub3csIG9wZXJhdGVzIGJ5IGZ1enppbmcgc3lzY2FsbHMgYW5kIHVzZXItc3BhY2UgaW50ZXJmYWNlcyBpbiBhIHJ1bm5pbmcga2VybmVsLiBUaGUgYC5pbml0LnRleHRgIGNvZGUgaGFzIGJlZW4gZXhlY3V0ZWQgYW5kIGZyZWVkLCBtYWtpbmcgdGhlIHRhcmdldCB1bnJlYWNoYWJsZSB0byB0aGUgZnV6emVyLlxuXG5UaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIG11c3QgYmUgc2V0IHRvIGZhbHNlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYW5kIGBFbmFibGVDb25maWdzYCBvcHRpb25zIGFyZSBpcnJlbGV2YW50IGluIHRoaXMgc2NlbmFyaW8sIHNvIHRoZXkgc2hvdWxkIGJlIG51bGwgb3IgYW4gZW1wdHkgbGlzdC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIGxldCdzIHF1aWNrbHkgcmUtaXRlcmF0ZTogV2UgYXJlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBraG9fcmVzZXJ2ZV9zY3JhdGNoYCBpbiBga2V4ZWNfaGFuZG92ZXIuY2AuIEl0IGlzIGEgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IHRhZ2dlZCBhcyBgX19pbml0YCwgYW5kIGl0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyBlYXJseSBib290LCBwcmlvciB0byB1c2VyLXNwYWNlIGV4ZWN1dGlvbi4gIFN5emthbGxlciBmb2N1c2VzIG9uIHRoZSBydW4tdGltZSBrZXJuZWwgc3RhdGUsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSB0byBpdHMgZnV6emluZyBwcm9jZXNzLlxuXG5BbHJpZ2h0LCB0aGF0J3Mgcm9jayBzb2xpZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg2NSwiT3V0cHV0VG9rZW5zIjoxMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowOC42MTAyMjI1MTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGtob19yZXNlcnZlX3NjcmF0Y2goKSwgYW4gX19pbml0IGZ1bmN0aW9uIGluIGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgdGhhdCBleGVjdXRlcyBleGNsdXNpdmVseSBkdXJpbmcgZWFybHkgYm9vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKHZpYSBtbV9jb3JlX2luaXQpIGFuZCBpcyBmcmVlZCBiZWZvcmUgdXNlcnNwYWNlIGV4ZWN1dGlvbi4gQmVjYXVzZSB0aGlzIGNvZGUgY2Fubm90IGJlIHRyaWdnZXJlZCBhdCBydW50aW1lIGJ5IHN5c2NhbGxzLCBpb2N0bHMsIG9yIHVzZXItc3BhY2UgaW50ZXJmYWNlcywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHRvIHRoZSBmdXp6ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGtob19yZXNlcnZlX3NjcmF0Y2goKSwgYW4gX19pbml0IGZ1bmN0aW9uIGluIGtlcm5lbC9saXZldXBkYXRlL2tleGVjX2hhbmRvdmVyLmMgdGhhdCBleGVjdXRlcyBleGNsdXNpdmVseSBkdXJpbmcgZWFybHkgYm9vdCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gKHZpYSBtbV9jb3JlX2luaXQpIGFuZCBpcyBmcmVlZCBiZWZvcmUgdXNlcnNwYWNlIGV4ZWN1dGlvbi4gQmVjYXVzZSB0aGlzIGNvZGUgY2Fubm90IGJlIHRyaWdnZXJlZCBhdCBydW50aW1lIGJ5IHN5c2NhbGxzLCBpb2N0bHMsIG9yIHVzZXItc3BhY2UgaW50ZXJmYWNlcywgaXQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIHRvIHRoZSBmdXp6ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxMTo1MDowOC42MTAyNjQ5OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwdm9s[1] Phase: Running StartedAt: 2026-09-05 11:50:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwdm9s[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-05 11:50:20 +0000 UTC FinishedAt: 2026-09-05 11:50:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}