Name: series-workflowlpcdr Phase: Succeeded StartedAt: 2026-06-30 13:43:29 +0000 UTC FinishedAt: 2026-06-30 18:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[0] Phase: Succeeded StartedAt: 2026-06-30 13:43:29 +0000 UTC FinishedAt: 2026-06-30 14:03:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 13:43:29 +0000 UTC FinishedAt: 2026-06-30 14:03:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "3faee628-df9a-4ed4-85ce-3d9a0966f158" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_arena_free_pages", "bpf_arena_free_pages_non_sleepable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBhcmVuYV9mcmVlX3BhZ2VzYCB0byBwcmV2ZW50IGZyZWVpbmcgcGFnZXMgYmVsb3cgYGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBhcmVuYSBzdWJzeXN0ZW0uIFRoZSByZWxldmFudCBrZnVuY3MgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMgYXJlIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE3NWY1ODRkNjE1N2FiNmNhOGE5ZGFiODE4NGQwMjA0NzhmNmUyMzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAxMzo1NzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDQ5YThmN2IxYmVlZjU5Li5lMjhlODNiZWQ4YzUxMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNjkzLDYgJiM0Mzs2OTMsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0dWFkZHIgXHUwMDI2PSBQQUdFX01BU0s7XG4gXHRrYWRkciA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSkgJiM0MzsgdWFkZHI7XG4gXHRmdWxsX3VhZGRyID0gY2xlYXJfbG8zMihhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KSAmIzQzOyB1YWRkcjtcbiYjNDM7XHRpZiAoZnVsbF91YWRkciBcdTAwM2MgYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbiYjNDM7XHRcdHJldHVybjtcbiBcdHVhZGRyX2VuZCA9IG1pbihhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCwgZnVsbF91YWRkciAmIzQzOyAocGFnZV9jbnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiBcdGlmIChmdWxsX3VhZGRyIFx1MDAzZT0gdWFkZHJfZW5kKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuaW5kZXggNjJlMjgyZjQ0NDhhYWEuLmI0YmQxMzQ2NDY2MDdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5AQCAtMTIsMTUgJiM0MzsxMiwxNyBAQFxuIFxuICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCYjMzQ7LmJzcy5cJiMzNDsgI25hbWUpIF9faGlkZGVuIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKVxuIFxuJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiM0MzsjZGVmaW5lIEFSRU5BX1ZNX1NUQVJUICgoMXVsbCBcdTAwM2NcdTAwM2MgMzIpIHwgKH4wdSAtIF9fUEFHRV9TSVpFICogMiAmIzQzOyAxKSlcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBBUkVOQV9WTV9TVEFSVCAoKDF1bGwgXHUwMDNjXHUwMDNjIDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgJiM0MzsgMSkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4gXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpOyAvKiBhcmVuYSBvZiB0d28gcGFnZXMgY2xvc2UgdG8gMzItYml0IGJvdW5kYXJ5Ki9cbi0jaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuLSAgICAgICAgX191bG9uZyhtYXBfZXh0cmEsICgxdWxsIFx1MDAzY1x1MDAzYyAzMikgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICYjNDM7IDEpKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuLSNlbHNlXG4tICAgICAgICBfX3Vsb25nKG1hcF9leHRyYSwgKDF1bGwgXHUwMDNjXHUwMDNjIDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgJiM0MzsgMSkpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4tI2VuZGlmXG4mIzQzO1x0X191bG9uZyhtYXBfZXh0cmEsIEFSRU5BX1ZNX1NUQVJUKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuIH0gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiBcbiBTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuQEAgLTkzLDYgJiM0Mzs5NSwzNSBAQCBpbnQgYmFzaWNfYWxsb2MxKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgZnJlZV9zY2FsYXJfYmVsb3dfYXJlbmEodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICpwYWdlMSwgKnBhZ2UyLCAqcGFnZTM7XG4mIzQzO1x0X191NjQgYmFkX2FkZHIgPSBBUkVOQV9WTV9TVEFSVCAtIF9fUEFHRV9TSVpFO1xuJiM0MztcbiYjNDM7XHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXBhZ2UxKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHBhZ2UyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghcGFnZTIpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKHBhZ2UzKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDtcJiMzNDsgOiBcJiMzNDsmIzQzO3JcJiMzNDsoYmFkX2FkZHIpKTtcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKWJhZF9hZGRyLCAxKTtcbiYjNDM7XG4mIzQzO1x0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKHBhZ2UzKVxuJiM0MztcdFx0cmV0dXJuIDQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGJhc2ljX2FsbG9jMl9ub3NsZWVwKHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBgYXJlbmFfZnJlZV9wYWdlc2AgdG8gcHJldmVudCBmcmVlaW5nIHBhZ2VzIGJlbG93IGBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgYXJlbmEgc3Vic3lzdGVtLiBUaGUgcmVsZXZhbnQga2Z1bmNzIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zIGFyZSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3NWY1ODRkNjE1N2FiNmNhOGE5ZGFiODE4NGQwMjA0NzhmNmUyMzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAxMzo1NzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA0OWE4ZjdiMWJlZWY1OS4uZTI4ZTgzYmVkOGM1MTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FyZW5hLmMKQEAgLTY5Myw2ICYjNDM7NjkzLDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwKIAl1YWRkciAmYW1wOz0gUEFHRV9NQVNLOwogCWthZGRyID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKSAmIzQzOyB1YWRkcjsKIAlmdWxsX3VhZGRyID0gY2xlYXJfbG8zMihhcmVuYS0mZ3Q7dXNlcl92bV9zdGFydCkgJiM0MzsgdWFkZHI7CiYjNDM7CWlmIChmdWxsX3VhZGRyICZsdDsgYXJlbmEtJmd0O3VzZXJfdm1fc3RhcnQpCiYjNDM7CQlyZXR1cm47CiAJdWFkZHJfZW5kID0gbWluKGFyZW5hLSZndDt1c2VyX3ZtX2VuZCwgZnVsbF91YWRkciAmIzQzOyAocGFnZV9jbnQgJmx0OyZsdDsgUEFHRV9TSElGVCkpOwogCWlmIChmdWxsX3VhZGRyICZndDs9IHVhZGRyX2VuZCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwppbmRleCA2MmUyODJmNDQ0OGFhYS4uYjRiZDEzNDY0NjYwN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jCkBAIC0xMiwxNSAmIzQzOzEyLDE3IEBACiAKICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoJiMzNDsuYnNzLiYjMzQ7ICNuYW1lKSBfX2hpZGRlbiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKIAomIzQzOyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0CiYjNDM7I2RlZmluZSBBUkVOQV9WTV9TVEFSVCAoKDF1bGwgJmx0OyZsdDsgMzIpIHwgKH4wdSAtIF9fUEFHRV9TSVpFICogMiAmIzQzOyAxKSkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgQVJFTkFfVk1fU1RBUlQgKCgxdWxsICZsdDsmbHQ7IDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgJiM0MzsgMSkpCiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwogCV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKIAlfX3VpbnQobWF4X2VudHJpZXMsIDIpOyAvKiBhcmVuYSBvZiB0d28gcGFnZXMgY2xvc2UgdG8gMzItYml0IGJvdW5kYXJ5Ki8KLSNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0Ci0gICAgICAgIF9fdWxvbmcobWFwX2V4dHJhLCAoMXVsbCAmbHQ7Jmx0OyAzMikgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICYjNDM7IDEpKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwotI2Vsc2UKLSAgICAgICAgX191bG9uZyhtYXBfZXh0cmEsICgxdWxsICZsdDsmbHQ7IDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgJiM0MzsgMSkpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovCi0jZW5kaWYKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIEFSRU5BX1ZNX1NUQVJUKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwogfSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAogU0VDKCYjMzQ7c29ja2V0JiMzNDspCkBAIC05Myw2ICYjNDM7OTUsMzUgQEAgaW50IGJhc2ljX2FsbG9jMSh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGZyZWVfc2NhbGFyX2JlbG93X2FyZW5hKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXZvaWQgX19hcmVuYSAqcGFnZTEsICpwYWdlMiwgKnBhZ2UzOwomIzQzOwlfX3U2NCBiYWRfYWRkciA9IEFSRU5BX1ZNX1NUQVJUIC0gX19QQUdFX1NJWkU7CiYjNDM7CiYjNDM7CXBhZ2UxID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghcGFnZTEpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJcGFnZTIgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCFwYWdlMikKJiM0MzsJCXJldHVybiAyOwomIzQzOwomIzQzOwlwYWdlMyA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAocGFnZTMpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7JiMzNDsgOiAmIzM0OyYjNDM7ciYjMzQ7KGJhZF9hZGRyKSk7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKiliYWRfYWRkciwgMSk7CiYjNDM7CiYjNDM7CXBhZ2UzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmIChwYWdlMykKJiM0MzsJCXJldHVybiA0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtzb2NrZXQmIzM0OykKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGJhc2ljX2FsbG9jMl9ub3NsZWVwKHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgZ290IG1vZGlmaWNhdGlvbnMgdG8gYm90aCB0aGUga2VybmVsIEJQRiBhcmVuYSBjb2RlIChga2VybmVsL2JwZi9hcmVuYS5jYCkgYW5kIHRoZSBzZWxmLXRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNgKS4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGNvcmUgY2hhbmdlIGluIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGZpcnN0LiBTcGVjaWZpY2FsbHksIHRoZSBlZGl0IHRvIHRoZSBgYXJlbmFfZnJlZV9wYWdlc2AgZnVuY3Rpb24uCgpJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY3JpdGljYWwgYm91bmRzIGNoZWNrIGhlcmUuIExldCBtZSBxdW90ZToKYGBgYwogCXVhZGRyICZhbXA7PSBQQUdFX01BU0s7CiAJa2FkZHIgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpICYjNDM7IHVhZGRyOwogCWZ1bGxfdWFkZHIgPSBjbGVhcl9sbzMyKGFyZW5hLSZndDt1c2VyX3ZtX3N0YXJ0KSAmIzQzOyB1YWRkcjsKJiM0MzsJaWYgKGZ1bGxfdWFkZHIgJmx0OyBhcmVuYS0mZ3Q7dXNlcl92bV9zdGFydCkKJiM0MzsJCXJldHVybjsKIAl1YWRkcl9lbmQgPSBtaW4oYXJlbmEtJmd0O3VzZXJfdm1fZW5kLCBmdWxsX3VhZGRyICYjNDM7IChwYWdlX2NudCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiAJaWYgKGZ1bGxfdWFkZHIgJmd0Oz0gdWFkZHJfZW5kKQogCQlyZXR1cm47CmBgYAoKUmlnaHQsIHRoZXkmIzM5O3JlIHByZXZlbnRpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgKmJlbG93KiB0aGUgYGFyZW5hLSZndDt1c2VyX3ZtX3N0YXJ0YCBhZGRyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc2FmZWd1YXJkLCB0byBlbnN1cmUgd2UgZG9uJiMzOTt0IGFjY2lkZW50YWxseSBjb3JydXB0IG9yIGZyZWUgbWVtb3J5IG91dHNpZGUgdGhlIGFsbG9jYXRlZCBCUEYgYXJlbmEgcmVnaW9uLiBJIHNlZSB0aGUgcG90ZW50aWFsIGZvciBhIHN1YnRsZSBidWcgYmVpbmcgYWRkcmVzc2VkLiBOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgYGFyZW5hX2ZyZWVfcGFnZXNgIGluIHRoZSBzb3VyY2UsIGJ1dCBJJiMzOTttIGNlcnRhaW4gdGhhdCB0aGUgbG9naWMgYmVpbmcgY2hhbmdlZCBpcyB0aGlzIHNwZWNpZmljIGNhc2UuIEkgdGhpbmsgYSBxdWljayBgZ3JlcHBlcmAgY2FsbCBzaG91bGQgY29uZmlybSBteSBhc3N1bXB0aW9ucywgaW4gY2FzZSB0aGVyZSBhcmUgc2ltaWxhciBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBvdGhlciBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9Njc4PXZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuaW5jbHVkZS9saW51eC9icGYuaC02NzktXHRcdFx0XHRcdCAgdTY0IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6NjgwOnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpO1xuaW5jbHVkZS9saW51eC9icGYuaC02ODEtI2Vsc2VcbmluY2x1ZGUvbGludXgvYnBmLmg9NjgyPXN0YXRpYyBpbmxpbmUgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY4Ny1cbmluY2x1ZGUvbGludXgvYnBmLmg6Njg4OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmluY2x1ZGUvbGludXgvYnBmLmgtNjg5LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDk6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUwLVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz01NDk9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NTItXHRcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCAmIzQzOyB1YWRkcjMyLCBtYXBwZWQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xua2VybmVsL2JwZi9hcmVuYS5jOjY1MzpcdFx0YXJlbmFfZnJlZV9wYWdlcyhhcmVuYSwgdWFkZHIzMiwgbWFwcGVkLCBzbGVlcGFibGUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTY1NC1cdH1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY5PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc4LVxua2VybmVsL2JwZi9hcmVuYS5jOjY3OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcbmtlcm5lbC9icGYvYXJlbmEuYy02ODAte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04ODc9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtODk3LX1cbmtlcm5lbC9icGYvYXJlbmEuYzo4OTg6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODk5LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTA0LVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA1Olx0YXJlbmFfZnJlZV9wYWdlcyhhcmVuYSwgKGxvbmcpcHRyX19pZ24sIHBhZ2VfY250LCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy05MDYtfVxua2VybmVsL2JwZi9hcmVuYS5jLTkwNy1cbmtlcm5lbC9icGYvYXJlbmEuYzo5MDg6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy05MDkte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05MTQtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvYXJlbmEuYzo5MTU6XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIGZhbHNlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy05MTYtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz05MzQ9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcywgS0ZfQVJFTkFfUkVUIHwgS0ZfQVJFTkFfQVJHMilcbmtlcm5lbC9icGYvYXJlbmEuYzo5MzU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jLTkzNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExODgtXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExODk6XHRLRl9icGZfYXJlbmFfZnJlZV9wYWdlcyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5MC1cdEtGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Nj1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjc3OkJURl9JRChmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI3OC1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNzY3PXN0YXRpYyBib29sIGlzX2JwZl9hcmVuYV9rZnVuYyh1MzIgYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc2OS1cdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTc3MDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzcxLVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXNdO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTcxMT1zdGF0aWMgaW50IHNwZWNpYWxpemVfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjLCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzUxLVx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc1MjpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTMtXHRcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc1NDpcdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc1NS1cdH1cbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaD04Mz12b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqYWRkciwgX191MzIgcGFnZV9jbnQsXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04NC1cdFx0XHRcdCAgICBpbnQgbm9kZV9pZCwgX191NjQgZmxhZ3MpIF9fa3N5bSBfX3dlYWs7XG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaDo4NTp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uYnBmLmgtODYtaW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xuLS1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmg9MjY9c3RhdGljIGlubGluZSB2b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxuLS1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzAtfVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaDozMTpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg9NTU9c3RhdGljIGlubGluZSB2b2lkIGJwZl9mcmVlKHZvaWQgX19hcmVuYSAqYWRkcilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjEtXHRpZiAoLS0oKm9ial9jbnQpID09IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XHRcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaC02My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD00OT1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaDo1MDp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaC01MS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oPTY2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2FyZW5hKiBicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqbWFwLCB2b2lkICphZGRyLCBfX3UzMiBwYWdlX2NudCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcwLX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmg6NzE6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaC03Mi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYz0yMTg9aW50IHVhZihjb25zdCB2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjgtXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjk6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgcGFnZSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIzMC1cdHVhZl9yZWNvdmVyeV9mYWlscyA9IDI0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTMwPWludCBiYXNpY19hbGxvYzFfbm9zbGVlcCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDktXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NTA6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTUxLVx0aWYgKCpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTYxPWludCBiYXNpY19hbGxvYzEodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTgwLVx0XHRyZXR1cm4gNTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjgxOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy04Mi1cdGlmICgqcGFnZTEgIT0gMSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0xMDA9aW50IGZyZWVfc2NhbGFyX2JlbG93X2FyZW5hKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMTctXHRhc20gdm9sYXRpbGUoXCYjMzQ7XCYjMzQ7IDogXCYjMzQ7JiM0MztyXCYjMzQ7KGJhZF9hZGRyKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxMTg6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKWJhZF9hZGRyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTExOS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0xMjk9aW50IGJhc2ljX2FsbG9jMl9ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTEtXHRcdHJldHVybiA0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTUyOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTMtXHRpZiAoKnBhZ2UxICE9IDAgXHUwMDI2XHUwMDI2ICpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTE2Nz1pbnQgYmFzaWNfYWxsb2MyKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xODktXHRcdHJldHVybiA0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTkwOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xOTEtXHRpZiAoKnBhZ2UxICE9IDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NDgwPWludCBhcmVuYV9rZnVuY3NfdW5kZXJfYnBmX2xvY2sodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQ5NjpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy01MDMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo1MDQ6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgcGFnZSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy01MDUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjI9aW50IGJpZ19hbGxvYzEodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTU3LVx0XHRyZXR1cm4gNTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjU4Olx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy01OS1cdGlmICgqcGFnZTIgIT0gMilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYz0xNDg9aW50IGZyZWVfcmVzZXJ2ZWQodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE2Ny1cdCAqIFJlc2VydmVkIGFuZCBhbGxvY2F0ZWQgcGFnZXMgc2hvdWxkIGJlIGludGVyY2hhbmdlYWJsZSBmb3JcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjE2ODpcdCAqIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkuIEZyZWUgYSByZXNlcnZlZCBhbmQgYW4gYWxsb2NhdGVkXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNjktXHQgKiBwYWdlIHdpdGggYSBzaW5nbGUgY2FsbC5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE3MC1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MTcxOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIGFkZHIgJiM0MzsgX19QQUdFX1NJWkUgLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE3Mi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYz0yMjA9aW50IGJpZ19hbGxvYzIodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTIyNy1cdFx0cmV0dXJuIDE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzoyMjg6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKWJhc2UsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjI5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTIzOC1cdFx0XHRyZXR1cm4gMztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjIzOTpcdFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0yNDAtXHRcdHBhZ2VbaV0gPSBOVUxMO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTI1My1cdFx0XHRyZXR1cm4gNTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjI1NDpcdFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0yNTUtXHRcdHBhZ2VbaV0gPSBOVUxMO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTI4OT1pbnQgYmlnX2FsbG9jMyh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMzEwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MzExOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIHBhZ2VzLCAyMDUxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTMxMi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDUzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgQXJlbmEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGBhcmVuYV9mcmVlX3BhZ2VzYCB3aXRoaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCB1c2VkIGJ5IHNldmVyYWwgQlBGIGtmdW5jcywgc3BlY2lmaWNhbGx5IGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYC4gSXQmIzM5O3MgYWxzbyBjYWxsZWQgYnkgYHphcF9wYWdlc2AgYW5kIGluIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGEgY3JpdGljYWwgcGllY2UuCgpUaGUgZ2lzdCBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYSBzYWZlZ3VhcmQ6IGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgdGhhdCBmYWxsIGJlbG93IGBhcmVuYS0mZ3Q7dXNlcl92bV9zdGFydGAuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBsb2dpYyBlcnJvciB0aGF0IHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSB0aWdodGVuaW5nIHVwIHRoZSBib3VuZHMgY2hlY2tpbmcgb3IgcHJldmVudGluZyBhIGRvdWJsZS1mcmVlIHNpdHVhdGlvbiB3aXRoaW4gdGhlIEJQRiBhcmVuYSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgcmVsaWFiaWxpdHkgb3Igc2VjdXJpdHkgb2YgdGhlIEJQRiBhcmVuYSBtZWNoYW5pc20uCgpOb3csIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGNoZWNrIHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIEJQRiBhcmVuYSB0byBmdW5jdGlvbiBwcm9wZXJseS4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0IGFuZCBpZGVudGlmeSB3aGljaCBzeXN0ZW1zIGFuZCB1c2UgY2FzZXMgYXJlIGltcGFjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqQlBGIEFyZW5hIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgQlBGIGFyZW5hLCBhbmQgYSBxdWVzdGlvbiBrZWVwcyBjaXJjbGluZzogKmlzKiB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3IgdGhlIEJQRiBhcmVuYT8gSSBrbm93IHRoZSBnZW5lcmFsIGNvbmNlcHRzLCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MsIGFuZCBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLi4uIGJ1dCBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgaWYgdGhlcmUmIzM5O3MgYSBkZWRpY2F0ZWQga25vYiB0byBmaW5lLXR1bmUgaXQuIEkmIzM5O20gbm90IGp1c3QgdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBzeXN0ZW0td2lkZSBtZW1vcnkgbWFuYWdlbWVudCBwYXJhbWV0ZXJzLCBidXQgc29tZXRoaW5nIHRhcmdldGVkIHNwZWNpZmljYWxseSBhdCB0aGUgYXJlbmEmIzM5O3MgYmVoYXZpb3Igd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBQZXJoYXBzIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIG9yIG1heWJlIEkmIzM5O20gY29uZmxhdGluZyB0aGlzIHdpdGggdGhlIHR1bmluZyBvZiByZWxhdGVkIGVsZW1lbnRzIHRoYXQgdWx0aW1hdGVseSBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBmb3JnZXR0aW5nIGEga2V5IGRldGFpbCwgYSBzcGVjaWZpYyBjb21tYW5kLWxpbmUgYXJndW1lbnQsIG9yIHBlcmhhcHMgYW4gb2JzY3VyZSBrZXJuZWwgbW9kdWxlIG9wdGlvbiB0aGF0IHByb3ZpZGVzIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgaXRzIGludGVybmFsIHdvcmtpbmdzLiBHb3R0YSBkaWcgZGVlcGVyLi4uIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG1hbiBwYWdlcyBhbmQga2VybmVsIHNvdXJjZS4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCBvZiB0aGUgc3lzdGVtIHRvIGJlIGF3YXJlIG9mIGhvdyB0byBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9BUkVOQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipDaGVja2luZyB0aGUgQlBGIE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBCUEYgY29kZSB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBNYWtlZmlsZSBpcyB0aGUgY2VudHJhbCBwb2ludCB0byBpbnZlc3RpZ2F0ZSBob3cgQlBGIHByb2dyYW1zIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnVpbGQgdGFyZ2V0cywgcnVsZXMsIGFuZCB2YXJpYWJsZXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQlBGLCBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9ucyBvciBjaGFuZ2VzIGNvdWxkIGJlIGltcGxlbWVudGVkLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtb2RpZnlpbmcgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmEubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9idHQuYz0zOT1zdGF0aWMgaW50IGFyZW5hX3JlYWRfYnl0ZXMoc3RydWN0IGFyZW5hX2luZm8gKmFyZW5hLCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTQ0LVxuZHJpdmVycy9udmRpbW0vYnR0LmM6NDU6XHQvKiBhcmVuYSBvZmZzZXRzIG1heSBiZSBzaGlmdGVkIGZyb20gdGhlIGJhc2Ugb2YgdGhlIGRldmljZSAqL1xuZHJpdmVycy9udmRpbW0vYnR0LmMtNDYtXHRvZmZzZXQgPSBhZGp1c3RfaW5pdGlhbF9vZmZzZXQobmRfYnR0LCBvZmZzZXQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTUwPXN0YXRpYyBpbnQgYXJlbmFfd3JpdGVfYnl0ZXMoc3RydWN0IGFyZW5hX2luZm8gKmFyZW5hLCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTU1LVxuZHJpdmVycy9udmRpbW0vYnR0LmM6NTY6XHQvKiBhcmVuYSBvZmZzZXRzIG1heSBiZSBzaGlmdGVkIGZyb20gdGhlIGJhc2Ugb2YgdGhlIGRldmljZSAqL1xuZHJpdmVycy9udmRpbW0vYnR0LmMtNTctXHRvZmZzZXQgPSBhZGp1c3RfaW5pdGlhbF9vZmZzZXQobmRfYnR0LCBvZmZzZXQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTc0NT1zdGF0aWMgc3RydWN0IGFyZW5hX2luZm8gKmFsbG9jX2FyZW5hKHN0cnVjdCBidHQgKmJ0dCwgc2l6ZV90IHNpemUsXG5kcml2ZXJzL252ZGltbS9idHQuYzo3NDY6XHRcdFx0XHRzaXplX3Qgc3RhcnQsIHNpemVfdCBhcmVuYV9vZmYpXG5kcml2ZXJzL252ZGltbS9idHQuYy03NDcte1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc4OS1cdC8qICYjMzk7QWJzb2x1dGUmIzM5OyB2YWx1ZXMsIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHN0b3JhZ2Ugc3BhY2UgKi9cbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjc5MDpcdGFyZW5hLVx1MDAzZWluZm9vZmYgPSBhcmVuYV9vZmY7XG5kcml2ZXJzL252ZGltbS9idHQuYy03OTEtXHRhcmVuYS1cdTAwM2VkYXRhb2ZmID0gYXJlbmEtXHUwMDNlaW5mb29mZiAmIzQzOyBCVFRfUEdfU0laRTtcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYz04MjA9c3RhdGljIHZvaWQgcGFyc2VfYXJlbmFfbWV0YShzdHJ1Y3QgYXJlbmFfaW5mbyAqYXJlbmEsIHN0cnVjdCBidHRfc2IgKnN1cGVyLFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODIxOlx0XHRcdFx0dTY0IGFyZW5hX29mZilcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgyMi17XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtODMwLVxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODMxOlx0YXJlbmEtXHUwMDNlbmV4dG9mZiA9IChzdXBlci1cdTAwM2VuZXh0b2ZmID09IDApID8gMCA6IChhcmVuYV9vZmYgJiM0MztcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgzMi1cdFx0XHRsZTY0X3RvX2NwdShzdXBlci1cdTAwM2VuZXh0b2ZmKSk7XG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzM6XHRhcmVuYS1cdTAwM2VpbmZvb2ZmID0gYXJlbmFfb2ZmO1xuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM0Olx0YXJlbmEtXHUwMDNlZGF0YW9mZiA9IGFyZW5hX29mZiAmIzQzOyBsZTY0X3RvX2NwdShzdXBlci1cdTAwM2VkYXRhb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNTpcdGFyZW5hLVx1MDAzZW1hcG9mZiA9IGFyZW5hX29mZiAmIzQzOyBsZTY0X3RvX2NwdShzdXBlci1cdTAwM2VtYXBvZmYpO1xuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM2Olx0YXJlbmEtXHUwMDNlbG9nb2ZmID0gYXJlbmFfb2ZmICYjNDM7IGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZWxvZ29mZik7XG5kcml2ZXJzL252ZGltbS9idHQuYzo4Mzc6XHRhcmVuYS1cdTAwM2VpbmZvMm9mZiA9IGFyZW5hX29mZiAmIzQzOyBsZTY0X3RvX2NwdShzdXBlci1cdTAwM2VpbmZvMm9mZik7XG5kcml2ZXJzL252ZGltbS9idHQuYy04MzgtXG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmM9OTI3PXN0YXRpYyBpbnQgY3JlYXRlX2FyZW5hcyhzdHJ1Y3QgYnR0ICpidHQpXG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtOTYwLSAqIEl0IGlzIG9ubHkgY2FsbGVkIGZvciBhbiB1bmluaXRpYWxpemVkIGFyZW5hIHdoZW4gYSB3cml0ZVxuZHJpdmVycy9udmRpbW0vYnR0LmM6OTYxOiAqIHRvIHRoYXQgYXJlbmEgb2NjdXJzIGZvciB0aGUgZmlyc3QgdGltZS5cbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTk2Mi0gKi9cbi0tXG5kcml2ZXJzL252ZGltbS9idHQuaD0xMjQ9c3RydWN0IGFsaWduZWRfbG9jayB7XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmgtMTMyLSAqIHN0cnVjdCBhcmVuYV9pbmZvIC0gaGFuZGxlIGZvciBhbiBhcmVuYVxuZHJpdmVycy9udmRpbW0vYnR0Lmg6MTMzOiAqIEBzaXplOlx0XHRTaXplIGluIGJ5dGVzIHRoaXMgYXJlbmEgb2NjdXBpZXMgb24gdGhlIHJhdyBkZXZpY2UuXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzQtICpcdFx0XHRUaGlzIGluY2x1ZGVzIGFyZW5hIG1ldGFkYXRhLlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTMwMz1zdGF0aWMgaW50IGJ0Zl9jaGVja19mdW5jX2FyZ19tYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTM2NC1cdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX0FSRU5BIFx1MDAyNlx1MDAyNiByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MzY1Olx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O1IlZCBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhci5cXG5cJiMzNDssIHJlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MzY2LVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MjE9c3RydWN0IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMy1cdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI0Olx0X191aW50KG1heF9lbnRyaWVzLCAyKTsgLyogYXJlbmEgb2YgdHdvIHBhZ2VzIGNsb3NlIHRvIDMyLWJpdCBib3VuZGFyeSovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNS1cdF9fdWxvbmcobWFwX2V4dHJhLCBBUkVOQV9WTV9TVEFSVCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgRnJlZWluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXJlbmEub2Agb2JqZWN0IGZpbGUsIGFuZCBpdCBzZWVtcyB0byBnZXQgY29tcGlsZWQgb25seSB3aGVuIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAgY29uZmlndXJhdGlvbnMgYXJlIGFjdGl2ZS4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIGNvbnRleHQgYSBiaXQuIFRoZSBjb3JlIGxvZ2ljIGhlcmUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgZnJlZWluZyBwYWdlcyB3aXRoaW4gdGhlIEJQRiBhcmVuYS4gTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGZ1bmN0aW9uczogYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgLiBXYWl0Li4uIGBhcmVuYV9mcmVlX3BhZ2VzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGlzIGZpbGUuIFRoYXQgbWVhbnMgdGhlIHJlYWwgd29yayBpcyBoYXBwZW5pbmcgaW4gdGhlIHR3byBgYnBmX2FyZW5hXypgIHZlcnNpb25zLgoKVGhlIHBhdGNoIEkmIzM5O20gcmV2aWV3aW5nIGFsc28gdG91Y2hlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNgLiBJbnRlcmVzdGluZy4gVGhlIHNlbGZ0ZXN0IHNwZWNpZmljYWxseSBjYWxscyBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIHdpdGggYSBzdXNwaWNpb3VzIGFkZHJlc3M6IGBicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopYmFkX2FkZHIsIDEpO2Agd2hlcmUgYGJhZF9hZGRyYCBpcyBgQVJFTkFfVk1fU1RBUlQgLSBfX1BBR0VfU0laRWAuIFRoaXMgaW1tZWRpYXRlbHkgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gWWVzLCB0aGlzIGlzICpleGFjdGx5KiB3aGF0IHRoZSBwYXRjaCBjbGFpbXMgdG8gZml4IOKAkyBhbiBvZmYtYnktb25lIGVycm9yIGxlYWRpbmcgdG8gYW4gdW5kZXJmbG93LgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBrZXkgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWpvciBwbGF5ZXIgaGVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCBhcyB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCBgYXJlbmFfZnJlZV9wYWdlc2AgKmlzKiBpbmRlZWQgc3RhdGljLiBZdXAsIGNvbmZpcm1lZC4gU28sIEkgY2FuIGRpc3JlZ2FyZCB0aGUgc3RhdGljIGZ1bmN0aW9uIHNpbmNlIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYGFyZW5hLm9gIGNvbXBpbGF0aW9uIHVuaXQuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBhcmVuYV9mcmVlX3BhZ2VzYCB3aXRoaW4gdGhpcyBmaWxlLCB0byBiZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgYWxsIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX2ZyZWVfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD02Nzg9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY3OS1cdFx0XHRcdFx0ICB1NjQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaDo2ODA6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY4MS0jZWxzZVxuaW5jbHVkZS9saW51eC9icGYuaD02ODI9c3RhdGljIGlubGluZSB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNjg3LVxuaW5jbHVkZS9saW51eC9icGYuaDo2ODg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxuaW5jbHVkZS9saW51eC9icGYuaC02ODkte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAtXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTU0OT1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cdFx0Zmx1c2hfdm1hcF9jYWNoZShrZXJuX3ZtX3N0YXJ0ICYjNDM7IHVhZGRyMzIsIG1hcHBlZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUzOlx0XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjU0LVx0fVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02Njk9c3RhdGljIHZvaWQgemFwX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NzgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6Njc5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKVxua2VybmVsL2JwZi9hcmVuYS5jLTY4MC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTg4Nz12b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy04OTctfVxua2VybmVsL2JwZi9hcmVuYS5jOjg5ODpfX2JwZl9rZnVuYyB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy04OTkte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05MDQtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvYXJlbmEuYzo5MDU6XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIHRydWUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTkwNi19XG5rZXJuZWwvYnBmL2FyZW5hLmMtOTA3LVxua2VybmVsL2JwZi9hcmVuYS5jOjkwODp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxua2VybmVsL2JwZi9hcmVuYS5jLTkwOS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTkxNC1cdFx0cmV0dXJuO1xua2VybmVsL2JwZi9hcmVuYS5jOjkxNTpcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTkxNi19XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTkzND1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jOjkzNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTM2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcywgS0ZfQVJFTkFfQVJHMilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMjg9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE4OC1cdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE4OTpcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTkwLVx0S0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjc2PUJURl9JRChmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyNzc6QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjc4LUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3Njc9c3RhdGljIGJvb2wgaXNfYnBmX2FyZW5hX2tmdW5jKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzY5LVx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzcwOlx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3NzEtXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlc107XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzExPXN0YXRpYyBpbnQgc3BlY2lhbGl6ZV9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2MsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTEtXHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzUyOlx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc1My1cdFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzU0Olx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU1LVx0fVxuLS1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oPTgzPXZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTg0LVx0XHRcdFx0ICAgIGludCBub2RlX2lkLCBfX3U2NCBmbGFncykgX19rc3ltIF9fd2VhaztcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04Ni1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yNj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaC0zMC19XG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzIte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ZyZWUodm9pZCBfX2FyZW5hICphZGRyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaC02MS1cdGlmICgtLSgqb2JqX2NudCkgPT0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaDo2MjpcdFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIGFkZHIsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTYzLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oPTQ5PWludCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqYWRkciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oOjUwOnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTUxLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmg9NjY9c3RhdGljIGlubGluZSB2b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmgtNzAtfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaDo3MTpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jPTIxOD1pbnQgdWFmKGNvbnN0IHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIyOC1cdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jOjIyOTpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmMtMjMwLVx0dWFmX3JlY292ZXJ5X2ZhaWxzID0gMjQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MzA9aW50IGJhc2ljX2FsbG9jMV9ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OS1cdFx0cmV0dXJuIDU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo1MDpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopcGFnZTIsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTEtXHRpZiAoKnBhZ2UxICE9IDEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NjE9aW50IGJhc2ljX2FsbG9jMSh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODAtXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6ODE6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTgyLVx0aWYgKCpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTEwMD1pbnQgZnJlZV9zY2FsYXJfYmVsb3dfYXJlbmEodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTExNy1cdGFzbSB2b2xhdGlsZShcJiMzNDtcJiMzNDsgOiBcJiMzNDsmIzQzO3JcJiMzNDsoYmFkX2FkZHIpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjExODpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFkX2FkZHIsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTE5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTEyOT1pbnQgYmFzaWNfYWxsb2MyX25vc2xlZXAodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE1MS1cdFx0cmV0dXJuIDQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxNTI6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE1My1cdGlmICgqcGFnZTEgIT0gMCBcdTAwMjZcdTAwMjYgKnBhZ2UxICE9IDEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTY3PWludCBiYXNpY19hbGxvYzIodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE4OS1cdFx0cmV0dXJuIDQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxOTA6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE5MS1cdGlmICgqcGFnZTEgIT0gMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz00ODA9aW50IGFyZW5hX2tmdW5jc191bmRlcl9icGZfbG9jayh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDk1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NDk2Olx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIHBhZ2UsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDk3LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTUwMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjUwNDpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTUwNS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYz0yMj1pbnQgYmlnX2FsbG9jMSh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtNTctXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6NTg6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTU5LVx0aWYgKCpwYWdlMiAhPSAyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTE0OD1pbnQgZnJlZV9yZXNlcnZlZCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTY3LVx0ICogUmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCBwYWdlcyBzaG91bGQgYmUgaW50ZXJjaGFuZ2VhYmxlIGZvclxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MTY4Olx0ICogYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKS4gRnJlZSBhIHJlc2VydmVkIGFuZCBhbiBhbGxvY2F0ZWRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE2OS1cdCAqIHBhZ2Ugd2l0aCBhIHNpbmdsZSBjYWxsLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTcwLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzoxNzE6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgYWRkciAmIzQzOyBfX1BBR0VfU0laRSAsIDIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTcyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTIyMD1pbnQgYmlnX2FsbG9jMih2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjI3LVx0XHRyZXR1cm4gMTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjIyODpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFzZSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0yMjktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjM4LVx0XHRcdHJldHVybiAzO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MjM5Olx0XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBnLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTI0MC1cdFx0cGFnZVtpXSA9IE5VTEw7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjUzLVx0XHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MjU0Olx0XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBnLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTI1NS1cdFx0cGFnZVtpXSA9IE5VTEw7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9Mjg5PWludCBiaWdfYWxsb2MzKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0zMTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzozMTE6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgcGFnZXMsIDIwNTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMzEyLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgzMAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkOgoKKipGb2N1c2luZyBvbiBCUEYgQXJlbmEgRnJlZWluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgZnJlZWQgd2l0aGluIHRoZSBCUEYgYXJlbmEuIFNwZWNpZmljYWxseSwgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGF0IGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCBhcmUgdGhlIGNydWNpYWwga2Z1bmNzIOKAkyB0aGV5JiMzOTtyZSB0aGUgd3JhcHBlcnMgZm9yIHRoZSBgYXJlbmFfZnJlZV9wYWdlc2AgZnVuY3Rpb25hbGl0eSB0aGF0JiMzOTtzIHJlbGV2YW50IGhlcmUuCgpHaXZlbiB0aGF0LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkmIzM5O2xsIGNvbmZpZ3VyZSBgRm9jdXNTeW1ib2xzYCB0byBpbmNsdWRlIGJvdGggYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLiBUaGVzZSBhcmUgdGhlIHRhcmdldHMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGV4YW1pbmluZyBpbiBkZXRhaWwuIEFuZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29udGV4dCwgSSYjMzk7bGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGBCUEZfU1lTQ0FMTGAuCgpKdXN0IGEgc2FuaXR5IGNoZWNrIG5vdyAtIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBpcyBpbmRlZWQgdGhlIGtmdW5jIHRoYXQmIzM5O3MgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMuIEEgcXVpY2sgbG9va+KApiBZZXAsIHRoYXQgY2hlY2tzIG91dC4gSXQmIzM5O3MgdGhlIHJpZ2h0IGZ1bmN0aW9uLiBHb29kLgoKV2l0aCB0aGF0IGNvbmZpcm1hdGlvbiwgSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBhcmVuYV9mcmVlX3BhZ2VzYCB0byBwcmV2ZW50IGZyZWVpbmcgcGFnZXMgYmVsb3cgYGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBhcmVuYSBzdWJzeXN0ZW0uIFRoZSByZWxldmFudCBrZnVuY3MgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMgYXJlIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYGFyZW5hX2ZyZWVfcGFnZXNgIHRvIHByZXZlbnQgZnJlZWluZyBwYWdlcyBiZWxvdyBgYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGFyZW5hIHN1YnN5c3RlbS4gVGhlIHJlbGV2YW50IGtmdW5jcyBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcyBhcmUgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTc6MjkuMDgzOTQ1MjkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2NTE5MDYyMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBhcmVuYV9mcmVlX3BhZ2VzYCB0byBwcmV2ZW50IGZyZWVpbmcgcGFnZXMgYmVsb3cgYGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgYXJlbmEgc3Vic3lzdGVtLiBUaGUgcmVsZXZhbnQga2Z1bmNzIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zIGFyZSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjU3OjI5LjA4Mzk2Njk5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MjE5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTc1ZjU4NGQ2MTU3YWI2Y2E4YTlkYWI4MTg0ZDAyMDQ3OGY2ZTIzNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAxMzo1NzoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcXG5pbmRleCA0OWE4ZjdiMWJlZWY1OS4uZTI4ZTgzYmVkOGM1MTAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXFxuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXFxuQEAgLTY5Myw2ICs2OTMsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxcbiBcXHR1YWRkciBcXHUwMDI2PSBQQUdFX01BU0s7XFxuIFxcdGthZGRyID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKSArIHVhZGRyO1xcbiBcXHRmdWxsX3VhZGRyID0gY2xlYXJfbG8zMihhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCkgKyB1YWRkcjtcXG4rXFx0aWYgKGZ1bGxfdWFkZHIgXFx1MDAzYyBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydClcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR1YWRkcl9lbmQgPSBtaW4oYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kLCBmdWxsX3VhZGRyICsgKHBhZ2VfY250IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4gXFx0aWYgKGZ1bGxfdWFkZHIgXFx1MDAzZT0gdWFkZHJfZW5kKVxcbiBcXHRcXHRyZXR1cm47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG5pbmRleCA2MmUyODJmNDQ0OGFhYS4uYjRiZDEzNDY0NjYwN2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xcbkBAIC0xMiwxNSArMTIsMTcgQEBcXG4gXFxuICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXFxcIi5ic3MuXFxcIiAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpXFxuIFxcbisjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxcbisjZGVmaW5lIEFSRU5BX1ZNX1NUQVJUICgoMXVsbCBcXHUwMDNjXFx1MDAzYyAzMikgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICsgMSkpXFxuKyNlbHNlXFxuKyNkZWZpbmUgQVJFTkFfVk1fU1RBUlQgKCgxdWxsIFxcdTAwM2NcXHUwMDNjIDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgKyAxKSlcXG4rI2VuZGlmXFxuK1xcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4gXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbiBcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpOyAvKiBhcmVuYSBvZiB0d28gcGFnZXMgY2xvc2UgdG8gMzItYml0IGJvdW5kYXJ5Ki9cXG4tI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcXG4tICAgICAgICBfX3Vsb25nKG1hcF9leHRyYSwgKDF1bGwgXFx1MDAzY1xcdTAwM2MgMzIpIHwgKH4wdSAtIF9fUEFHRV9TSVpFICogMiArIDEpKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xcbi0jZWxzZVxcbi0gICAgICAgIF9fdWxvbmcobWFwX2V4dHJhLCAoMXVsbCBcXHUwMDNjXFx1MDAzYyA0NCkgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICsgMSkpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuLSNlbmRpZlxcbitcXHRfX3Vsb25nKG1hcF9leHRyYSwgQVJFTkFfVk1fU1RBUlQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuIH0gYXJlbmEgU0VDKFxcXCIubWFwc1xcXCIpO1xcbiBcXG4gU0VDKFxcXCJzb2NrZXRcXFwiKVxcbkBAIC05Myw2ICs5NSwzNSBAQCBpbnQgYmFzaWNfYWxsb2MxKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgZnJlZV9zY2FsYXJfYmVsb3dfYXJlbmEodm9pZCAqY3R4KVxcbit7XFxuK1xcdHZvaWQgX19hcmVuYSAqcGFnZTEsICpwYWdlMiwgKnBhZ2UzO1xcbitcXHRfX3U2NCBiYWRfYWRkciA9IEFSRU5BX1ZNX1NUQVJUIC0gX19QQUdFX1NJWkU7XFxuK1xcbitcXHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghcGFnZTEpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0cGFnZTIgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXBhZ2UyKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdHBhZ2UzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0aWYgKHBhZ2UzKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiXFxcIiA6IFxcXCIrclxcXCIoYmFkX2FkZHIpKTtcXG4rXFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFkX2FkZHIsIDEpO1xcbitcXG4rXFx0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAocGFnZTMpXFxuK1xcdFxcdHJldHVybiA0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwic29ja2V0XFxcIilcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIGludCBiYXNpY19hbGxvYzJfbm9zbGVlcCh2b2lkICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjU3OjI5LjYxMjgwNTM2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1OTkwMTkyNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBhcmVuYV9mcmVlX3BhZ2VzYCB0byBwcmV2ZW50IGZyZWVpbmcgcGFnZXMgYmVsb3cgYGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgYXJlbmEgc3Vic3lzdGVtLiBUaGUgcmVsZXZhbnQga2Z1bmNzIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zIGFyZSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTc1ZjU4NGQ2MTU3YWI2Y2E4YTlkYWI4MTg0ZDAyMDQ3OGY2ZTIzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDEzOjU3OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA0OWE4ZjdiMWJlZWY1OS4uZTI4ZTgzYmVkOGM1MTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTY5Myw2ICs2OTMsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0dWFkZHIgXHUwMDI2PSBQQUdFX01BU0s7XG4gXHRrYWRkciA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSkgKyB1YWRkcjtcbiBcdGZ1bGxfdWFkZHIgPSBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICsgdWFkZHI7XG4rXHRpZiAoZnVsbF91YWRkciBcdTAwM2MgYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbitcdFx0cmV0dXJuO1xuIFx0dWFkZHJfZW5kID0gbWluKGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kLCBmdWxsX3VhZGRyICsgKHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4gXHRpZiAoZnVsbF91YWRkciBcdTAwM2U9IHVhZGRyX2VuZClcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbmluZGV4IDYyZTI4MmY0NDQ4YWFhLi5iNGJkMTM0NjQ2NjA3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuQEAgLTEyLDE1ICsxMiwxNyBAQFxuIFxuICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCIuYnNzLlwiICNuYW1lKSBfX2hpZGRlbiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSlcbiBcbisjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuKyNkZWZpbmUgQVJFTkFfVk1fU1RBUlQgKCgxdWxsIFx1MDAzY1x1MDAzYyAzMikgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICsgMSkpXG4rI2Vsc2VcbisjZGVmaW5lIEFSRU5BX1ZNX1NUQVJUICgoMXVsbCBcdTAwM2NcdTAwM2MgNDQpIHwgKH4wdSAtIF9fUEFHRV9TSVpFICogMiArIDEpKVxuKyNlbmRpZlxuK1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiBcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbiBcdF9fdWludChtYXhfZW50cmllcywgMik7IC8qIGFyZW5hIG9mIHR3byBwYWdlcyBjbG9zZSB0byAzMi1iaXQgYm91bmRhcnkqL1xuLSNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XG4tICAgICAgICBfX3Vsb25nKG1hcF9leHRyYSwgKDF1bGwgXHUwMDNjXHUwMDNjIDMyKSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgKyAxKSk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbi0jZWxzZVxuLSAgICAgICAgX191bG9uZyhtYXBfZXh0cmEsICgxdWxsIFx1MDAzY1x1MDAzYyA0NCkgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICsgMSkpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4tI2VuZGlmXG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgQVJFTkFfVk1fU1RBUlQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4gfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbiBcbiBTRUMoXCJzb2NrZXRcIilcbkBAIC05Myw2ICs5NSwzNSBAQCBpbnQgYmFzaWNfYWxsb2MxKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGZyZWVfc2NhbGFyX2JlbG93X2FyZW5hKHZvaWQgKmN0eClcbit7XG4rXHR2b2lkIF9fYXJlbmEgKnBhZ2UxLCAqcGFnZTIsICpwYWdlMztcbitcdF9fdTY0IGJhZF9hZGRyID0gQVJFTkFfVk1fU1RBUlQgLSBfX1BBR0VfU0laRTtcbitcbitcdHBhZ2UxID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCFwYWdlMSlcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRwYWdlMiA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghcGFnZTIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAocGFnZTMpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0YXNtIHZvbGF0aWxlKFwiXCIgOiBcIityXCIoYmFkX2FkZHIpKTtcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFkX2FkZHIsIDEpO1xuK1xuK1x0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAocGFnZTMpXG4rXHRcdHJldHVybiA0O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcInNvY2tldFwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBiYXNpY19hbGxvYzJfbm9zbGVlcCh2b2lkICpjdHgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzo1NzoyOS42MTI4MDY0OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE3MzY3ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEFyZW5hIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSd2ZSBnb3QgbW9kaWZpY2F0aW9ucyB0byBib3RoIHRoZSBrZXJuZWwgQlBGIGFyZW5hIGNvZGUgKGBrZXJuZWwvYnBmL2FyZW5hLmNgKSBhbmQgdGhlIHNlbGYtdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY2ApLiBJJ2xsIGZvY3VzIG9uIHRoZSBjb3JlIGNoYW5nZSBpbiBga2VybmVsL2JwZi9hcmVuYS5jYCBmaXJzdC4gU3BlY2lmaWNhbGx5LCB0aGUgZWRpdCB0byB0aGUgYGFyZW5hX2ZyZWVfcGFnZXNgIGZ1bmN0aW9uLlxuXG5JdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjcml0aWNhbCBib3VuZHMgY2hlY2sgaGVyZS4gTGV0IG1lIHF1b3RlOlxuYGBgY1xuIFx0dWFkZHIgXHUwMDI2PSBQQUdFX01BU0s7XG4gXHRrYWRkciA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSkgKyB1YWRkcjtcbiBcdGZ1bGxfdWFkZHIgPSBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICsgdWFkZHI7XG4rXHRpZiAoZnVsbF91YWRkciBcdTAwM2MgYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbitcdFx0cmV0dXJuO1xuIFx0dWFkZHJfZW5kID0gbWluKGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kLCBmdWxsX3VhZGRyICsgKHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4gXHRpZiAoZnVsbF91YWRkciBcdTAwM2U9IHVhZGRyX2VuZClcbiBcdFx0cmV0dXJuO1xuYGBgXG5cblJpZ2h0LCB0aGV5J3JlIHByZXZlbnRpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgKmJlbG93KiB0aGUgYGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnRgIGFkZHJlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzYWZlZ3VhcmQsIHRvIGVuc3VyZSB3ZSBkb24ndCBhY2NpZGVudGFsbHkgY29ycnVwdCBvciBmcmVlIG1lbW9yeSBvdXRzaWRlIHRoZSBhbGxvY2F0ZWQgQlBGIGFyZW5hIHJlZ2lvbi4gSSBzZWUgdGhlIHBvdGVudGlhbCBmb3IgYSBzdWJ0bGUgYnVnIGJlaW5nIGFkZHJlc3NlZC4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGluc3RhbmNlIG9mIGBhcmVuYV9mcmVlX3BhZ2VzYCBpbiB0aGUgc291cmNlLCBidXQgSSdtIGNlcnRhaW4gdGhhdCB0aGUgbG9naWMgYmVpbmcgY2hhbmdlZCBpcyB0aGlzIHNwZWNpZmljIGNhc2UuIEkgdGhpbmsgYSBxdWljayBgZ3JlcHBlcmAgY2FsbCBzaG91bGQgY29uZmlybSBteSBhc3N1bXB0aW9ucywgaW4gY2FzZSB0aGVyZSBhcmUgc2ltaWxhciBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBvdGhlciBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjU3OjM1LjYzMDE3NjI5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA5MDg1NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX2ZyZWVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD02Nzg9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuaW5jbHVkZS9saW51eC9icGYuaC02NzktXFx0XFx0XFx0XFx0XFx0ICB1NjQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6NjgwOnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNjgxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9icGYuaD02ODI9c3RhdGljIGlubGluZSB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC02ODctXFxuaW5jbHVkZS9saW51eC9icGYuaDo2ODg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNjg5LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDk6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MC1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz01NDk9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MzpcXHRcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTY1NC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY5PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjY3OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjgwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04ODc9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04OTctfVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4OTg6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTg5OS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTA0LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA1OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTkwNi19XFxua2VybmVsL2JwZi9hcmVuYS5jLTkwNy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA4OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTkwOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTE0LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTE1OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy05MTYtfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTkzND1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo5MzU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy05MzYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE4OC1cXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTg5OlxcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5MC1cXHRLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Nj1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI3NzpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjc4LUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTc2Nz1zdGF0aWMgYm9vbCBpc19icGZfYXJlbmFfa2Z1bmModTMyIGJ0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc2OS1cXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzcwOlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc3MS1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlc107XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3MTE9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzUxLVxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTI6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTMtXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTQ6XFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU1LVxcdH1cXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oPTgzPXZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04NC1cXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uYnBmLmgtODYtaW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbi0tXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yNj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxuLS1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMwLX1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ZyZWUodm9pZCBfX2FyZW5hICphZGRyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTYxLVxcdGlmICgtLSgqb2JqX2NudCkgPT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XFx0XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD00OT1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmg6NTA6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudCkgX19rc3ltIF9fd2VhaztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTUxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD02Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcwLX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oOjcxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmM9MjE4PWludCB1YWYoY29uc3Qgdm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjgtXFx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjk6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIzMC1cXHR1YWZfcmVjb3ZlcnlfZmFpbHMgPSAyNDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTMwPWludCBiYXNpY19hbGxvYzFfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OS1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo1MDpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTEtXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NjE9aW50IGJhc2ljX2FsbG9jMSh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy04MC1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo4MTpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODItXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTAwPWludCBmcmVlX3NjYWxhcl9iZWxvd19hcmVuYSh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMTctXFx0YXNtIHZvbGF0aWxlKFxcXCJcXFwiIDogXFxcIityXFxcIihiYWRfYWRkcikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjExODpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKiliYWRfYWRkciwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTE5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTI5PWludCBiYXNpY19hbGxvYzJfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTEtXFx0XFx0cmV0dXJuIDQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTUyOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTMtXFx0aWYgKCpwYWdlMSAhPSAwIFxcdTAwMjZcXHUwMDI2ICpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTY3PWludCBiYXNpY19hbGxvYzIodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTg5LVxcdFxcdHJldHVybiA0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE5MDpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTkxLVxcdGlmICgqcGFnZTEgIT0gMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQ4MD1pbnQgYXJlbmFfa2Z1bmNzX3VuZGVyX2JwZl9sb2NrKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0OTY6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OTctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy01MDMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NTA0OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTA1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjI9aW50IGJpZ19hbGxvYzEodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtNTctXFx0XFx0cmV0dXJuIDU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6NTg6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopcGFnZTEsIDEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTU5LVxcdGlmICgqcGFnZTIgIT0gMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTE0OD1pbnQgZnJlZV9yZXNlcnZlZCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNjctXFx0ICogUmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCBwYWdlcyBzaG91bGQgYmUgaW50ZXJjaGFuZ2VhYmxlIGZvclxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjE2ODpcXHQgKiBicGZfYXJlbmFfZnJlZV9wYWdlcygpLiBGcmVlIGEgcmVzZXJ2ZWQgYW5kIGFuIGFsbG9jYXRlZFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE2OS1cXHQgKiBwYWdlIHdpdGggYSBzaW5nbGUgY2FsbC5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNzAtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MTcxOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgYWRkciArIF9fUEFHRV9TSVpFICwgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTcyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjIwPWludCBiaWdfYWxsb2MyKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTIyNy1cXHRcXHRyZXR1cm4gMTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzoyMjg6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFzZSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjI5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjM4LVxcdFxcdFxcdHJldHVybiAzO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjIzOTpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjQwLVxcdFxcdHBhZ2VbaV0gPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjUzLVxcdFxcdFxcdHJldHVybiA1O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjI1NDpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjU1LVxcdFxcdHBhZ2VbaV0gPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9Mjg5PWludCBiaWdfYWxsb2MzKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTMxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzozMTE6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlcywgMjA1MSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMzEyLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzo1NzozOC4wMzkyNjc4MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMzU2NDg5MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgQXJlbmEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBgYXJlbmFfZnJlZV9wYWdlc2Agd2l0aGluIGBrZXJuZWwvYnBmL2FyZW5hLmNgLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgdXNlZCBieSBzZXZlcmFsIEJQRiBrZnVuY3MsIHNwZWNpZmljYWxseSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuIEl0J3MgYWxzbyBjYWxsZWQgYnkgYHphcF9wYWdlc2AgYW5kIGluIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBzbyBpdCdzIGNsZWFybHkgYSBjcml0aWNhbCBwaWVjZS5cblxuVGhlIGdpc3Qgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGEgc2FmZWd1YXJkOiBpdCdzIHByZXZlbnRpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgdGhhdCBmYWxsIGJlbG93IGBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0YC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGxvZ2ljIGVycm9yIHRoYXQgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcuIEl0IHNlZW1zIGxpa2Ugd2UncmUgdGlnaHRlbmluZyB1cCB0aGUgYm91bmRzIGNoZWNraW5nIG9yIHByZXZlbnRpbmcgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24gd2l0aGluIHRoZSBCUEYgYXJlbmEncyBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgcmVsaWFiaWxpdHkgb3Igc2VjdXJpdHkgb2YgdGhlIEJQRiBhcmVuYSBtZWNoYW5pc20uXG5cbk5vdywgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgQlBGIGFyZW5hIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIGNvbnRleHQgYW5kIGlkZW50aWZ5IHdoaWNoIHN5c3RlbXMgYW5kIHVzZSBjYXNlcyBhcmUgaW1wYWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTk6MTAuMzk1NzU4OTMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzA0NzE0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTk6MTMuMjY2MjM1NzgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MTkzMTI0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBJJ20gYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkJQRiBBcmVuYSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBCUEYgYXJlbmEsIGFuZCBhIHF1ZXN0aW9uIGtlZXBzIGNpcmNsaW5nOiAqaXMqIHRoZXJlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGZvciB0aGUgQlBGIGFyZW5hPyBJIGtub3cgdGhlIGdlbmVyYWwgY29uY2VwdHMsIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcywgYW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuLi4gYnV0IEknbSB0cnlpbmcgdG8gcmVjYWxsIGlmIHRoZXJlJ3MgYSBkZWRpY2F0ZWQga25vYiB0byBmaW5lLXR1bmUgaXQuIEknbSBub3QganVzdCB0aGlua2luZyBhYm91dCByZWxhdGVkIHN5c3RlbS13aWRlIG1lbW9yeSBtYW5hZ2VtZW50IHBhcmFtZXRlcnMsIGJ1dCBzb21ldGhpbmcgdGFyZ2V0ZWQgc3BlY2lmaWNhbGx5IGF0IHRoZSBhcmVuYSdzIGJlaGF2aW9yIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gUGVyaGFwcyBJJ20gbWlzc2luZyBzb21ldGhpbmcsIG9yIG1heWJlIEknbSBjb25mbGF0aW5nIHRoaXMgd2l0aCB0aGUgdHVuaW5nIG9mIHJlbGF0ZWQgZWxlbWVudHMgdGhhdCB1bHRpbWF0ZWx5IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIEkgbmVlZCB0byBiZSBzdXJlIEknbSBub3QgZm9yZ2V0dGluZyBhIGtleSBkZXRhaWwsIGEgc3BlY2lmaWMgY29tbWFuZC1saW5lIGFyZ3VtZW50LCBvciBwZXJoYXBzIGFuIG9ic2N1cmUga2VybmVsIG1vZHVsZSBvcHRpb24gdGhhdCBwcm92aWRlcyBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gR290dGEgZGlnIGRlZXBlci4uLiB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtYW4gcGFnZXMgYW5kIGtlcm5lbCBzb3VyY2UuIEl0J3MgYSBrZXkgZWxlbWVudCBvZiB0aGUgc3lzdGVtIHRvIGJlIGF3YXJlIG9mIGhvdyB0byBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTI5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTk6MjUuMTg1NTUwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE0ODcyNjQ0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0FSRU5BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzo1OToyNy42MDA0MzIxOTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjQ0MzM0MjU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKkNoZWNraW5nIHRoZSBCUEYgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIGNyYWNrIG9wZW4gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQncyB3aGF0LlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIEJQRiBjb2RlIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIE1ha2VmaWxlIGlzIHRoZSBjZW50cmFsIHBvaW50IHRvIGludmVzdGlnYXRlIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUga2VybmVsIGltYWdlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCB0YXJnZXRzLCBydWxlcywgYW5kIHZhcmlhYmxlcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBCUEYsIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhcmVhcyB3aGVyZSBvcHRpbWl6YXRpb25zIG9yIGNoYW5nZXMgY291bGQgYmUgaW1wbGVtZW50ZWQuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYW5kIG1vZGlmeWluZyB0aGUgQlBGIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODE1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTk6NTAuMDQzNzc3MTM2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk1MTM1NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vYnR0LmM9Mzk9c3RhdGljIGludCBhcmVuYV9yZWFkX2J5dGVzKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTQ0LVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjQ1OlxcdC8qIGFyZW5hIG9mZnNldHMgbWF5IGJlIHNoaWZ0ZWQgZnJvbSB0aGUgYmFzZSBvZiB0aGUgZGV2aWNlICovXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNDYtXFx0b2Zmc2V0ID0gYWRqdXN0X2luaXRpYWxfb2Zmc2V0KG5kX2J0dCwgb2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTUwPXN0YXRpYyBpbnQgYXJlbmFfd3JpdGVfYnl0ZXMoc3RydWN0IGFyZW5hX2luZm8gKmFyZW5hLCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNTUtXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6NTY6XFx0LyogYXJlbmEgb2Zmc2V0cyBtYXkgYmUgc2hpZnRlZCBmcm9tIHRoZSBiYXNlIG9mIHRoZSBkZXZpY2UgKi9cXG5kcml2ZXJzL252ZGltbS9idHQuYy01Ny1cXHRvZmZzZXQgPSBhZGp1c3RfaW5pdGlhbF9vZmZzZXQobmRfYnR0LCBvZmZzZXQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9NzQ1PXN0YXRpYyBzdHJ1Y3QgYXJlbmFfaW5mbyAqYWxsb2NfYXJlbmEoc3RydWN0IGJ0dCAqYnR0LCBzaXplX3Qgc2l6ZSxcXG5kcml2ZXJzL252ZGltbS9idHQuYzo3NDY6XFx0XFx0XFx0XFx0c2l6ZV90IHN0YXJ0LCBzaXplX3QgYXJlbmFfb2ZmKVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc0Ny17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy03ODktXFx0LyogJ0Fic29sdXRlJyB2YWx1ZXMsIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHN0b3JhZ2Ugc3BhY2UgKi9cXG5kcml2ZXJzL252ZGltbS9idHQuYzo3OTA6XFx0YXJlbmEtXFx1MDAzZWluZm9vZmYgPSBhcmVuYV9vZmY7XFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNzkxLVxcdGFyZW5hLVxcdTAwM2VkYXRhb2ZmID0gYXJlbmEtXFx1MDAzZWluZm9vZmYgKyBCVFRfUEdfU0laRTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTgyMD1zdGF0aWMgdm9pZCBwYXJzZV9hcmVuYV9tZXRhKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgc3RydWN0IGJ0dF9zYiAqc3VwZXIsXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODIxOlxcdFxcdFxcdFxcdHU2NCBhcmVuYV9vZmYpXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODIyLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgzMC1cXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzE6XFx0YXJlbmEtXFx1MDAzZW5leHRvZmYgPSAoc3VwZXItXFx1MDAzZW5leHRvZmYgPT0gMCkgPyAwIDogKGFyZW5hX29mZiArXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODMyLVxcdFxcdFxcdGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VuZXh0b2ZmKSk7XFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODMzOlxcdGFyZW5hLVxcdTAwM2VpbmZvb2ZmID0gYXJlbmFfb2ZmO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNDpcXHRhcmVuYS1cXHUwMDNlZGF0YW9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VkYXRhb2ZmKTtcXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzU6XFx0YXJlbmEtXFx1MDAzZW1hcG9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VtYXBvZmYpO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNjpcXHRhcmVuYS1cXHUwMDNlbG9nb2ZmID0gYXJlbmFfb2ZmICsgbGU2NF90b19jcHUoc3VwZXItXFx1MDAzZWxvZ29mZik7XFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM3OlxcdGFyZW5hLVxcdTAwM2VpbmZvMm9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VpbmZvMm9mZik7XFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODM4LVxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9OTI3PXN0YXRpYyBpbnQgY3JlYXRlX2FyZW5hcyhzdHJ1Y3QgYnR0ICpidHQpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjAtICogSXQgaXMgb25seSBjYWxsZWQgZm9yIGFuIHVuaW5pdGlhbGl6ZWQgYXJlbmEgd2hlbiBhIHdyaXRlXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6OTYxOiAqIHRvIHRoYXQgYXJlbmEgb2NjdXJzIGZvciB0aGUgZmlyc3QgdGltZS5cXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjItICovXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuaD0xMjQ9c3RydWN0IGFsaWduZWRfbG9jayB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzItICogc3RydWN0IGFyZW5hX2luZm8gLSBoYW5kbGUgZm9yIGFuIGFyZW5hXFxuZHJpdmVycy9udmRpbW0vYnR0Lmg6MTMzOiAqIEBzaXplOlxcdFxcdFNpemUgaW4gYnl0ZXMgdGhpcyBhcmVuYSBvY2N1cGllcyBvbiB0aGUgcmF3IGRldmljZS5cXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzQtICpcXHRcXHRcXHRUaGlzIGluY2x1ZGVzIGFyZW5hIG1ldGFkYXRhLlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MzAzPXN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkzNjQtXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MzY1OlxcdFxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiUiVkIGlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyLlxcXFxuXFxcIiwgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MzY2LVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MjE9c3RydWN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIzLVxcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyNDpcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpOyAvKiBhcmVuYSBvZiB0d28gcGFnZXMgY2xvc2UgdG8gMzItYml0IGJvdW5kYXJ5Ki9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNS1cXHRfX3Vsb25nKG1hcF9leHRyYSwgQVJFTkFfVk1fU1RBUlQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjU5OjUyLjgzODk3MDg3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjM0NTA1MDU4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgRnJlZWluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGFyZW5hLm9gIG9iamVjdCBmaWxlLCBhbmQgaXQgc2VlbXMgdG8gZ2V0IGNvbXBpbGVkIG9ubHkgd2hlbiB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTU1VYCwgYW5kIGBDT05GSUdfNjRCSVRgIGNvbmZpZ3VyYXRpb25zIGFyZSBhY3RpdmUuIFRoYXQgbmFycm93cyBkb3duIHRoZSBjb250ZXh0IGEgYml0LiBUaGUgY29yZSBsb2dpYyBoZXJlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGZyZWVpbmcgcGFnZXMgd2l0aGluIHRoZSBCUEYgYXJlbmEuIE15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBmdW5jdGlvbnM6IGBicGZfYXJlbmFfZnJlZV9wYWdlc2AsIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCwgYW5kIGBhcmVuYV9mcmVlX3BhZ2VzYC4gV2FpdC4uLiBgYXJlbmFfZnJlZV9wYWdlc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGlzIGZpbGUuIFRoYXQgbWVhbnMgdGhlIHJlYWwgd29yayBpcyBoYXBwZW5pbmcgaW4gdGhlIHR3byBgYnBmX2FyZW5hXypgIHZlcnNpb25zLlxuXG5UaGUgcGF0Y2ggSSdtIHJldmlld2luZyBhbHNvIHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jYC4gSW50ZXJlc3RpbmcuIFRoZSBzZWxmdGVzdCBzcGVjaWZpY2FsbHkgY2FsbHMgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCB3aXRoIGEgc3VzcGljaW91cyBhZGRyZXNzOiBgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKiliYWRfYWRkciwgMSk7YCB3aGVyZSBgYmFkX2FkZHJgIGlzIGBBUkVOQV9WTV9TVEFSVCAtIF9fUEFHRV9TSVpFYC4gVGhpcyBpbW1lZGlhdGVseSBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBZZXMsIHRoaXMgaXMgKmV4YWN0bHkqIHdoYXQgdGhlIHBhdGNoIGNsYWltcyB0byBmaXgg4oCTIGFuIG9mZi1ieS1vbmUgZXJyb3IgbGVhZGluZyB0byBhbiB1bmRlcmZsb3cuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBrZXkgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWpvciBwbGF5ZXIgaGVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgIGFzIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGBhcmVuYV9mcmVlX3BhZ2VzYCAqaXMqIGluZGVlZCBzdGF0aWMuIFl1cCwgY29uZmlybWVkLiBTbywgSSBjYW4gZGlzcmVnYXJkIHRoZSBzdGF0aWMgZnVuY3Rpb24gc2luY2UgaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBgYXJlbmEub2AgY29tcGlsYXRpb24gdW5pdC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBhcmVuYV9mcmVlX3BhZ2VzYCB3aXRoaW4gdGhpcyBmaWxlLCB0byBiZSBzdXJlIEkndmUgaWRlbnRpZmllZCBhbGwgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTQ6MDI6MzYuMjg5NDc5MTM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk5NzcyNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX2ZyZWVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD02Nzg9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuaW5jbHVkZS9saW51eC9icGYuaC02NzktXFx0XFx0XFx0XFx0XFx0ICB1NjQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6NjgwOnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNjgxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9icGYuaD02ODI9c3RhdGljIGlubGluZSB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC02ODctXFxuaW5jbHVkZS9saW51eC9icGYuaDo2ODg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNjg5LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDk6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MC1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz01NDk9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MzpcXHRcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTY1NC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY5PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjY3OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjgwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04ODc9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04OTctfVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4OTg6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTg5OS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTA0LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA1OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTkwNi19XFxua2VybmVsL2JwZi9hcmVuYS5jLTkwNy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA4OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTkwOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTE0LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTE1OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy05MTYtfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTkzND1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo5MzU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy05MzYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE4OC1cXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTg5OlxcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5MC1cXHRLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Nj1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI3NzpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjc4LUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTc2Nz1zdGF0aWMgYm9vbCBpc19icGZfYXJlbmFfa2Z1bmModTMyIGJ0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc2OS1cXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzcwOlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc3MS1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlc107XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3MTE9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzUxLVxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTI6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTMtXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTQ6XFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU1LVxcdH1cXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oPTgzPXZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04NC1cXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uYnBmLmgtODYtaW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbi0tXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yNj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxuLS1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMwLX1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ZyZWUodm9pZCBfX2FyZW5hICphZGRyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTYxLVxcdGlmICgtLSgqb2JqX2NudCkgPT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XFx0XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD00OT1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmg6NTA6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudCkgX19rc3ltIF9fd2VhaztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTUxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD02Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcwLX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oOjcxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmM9MjE4PWludCB1YWYoY29uc3Qgdm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjgtXFx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjk6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIzMC1cXHR1YWZfcmVjb3ZlcnlfZmFpbHMgPSAyNDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTMwPWludCBiYXNpY19hbGxvYzFfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OS1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo1MDpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTEtXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NjE9aW50IGJhc2ljX2FsbG9jMSh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy04MC1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo4MTpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODItXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTAwPWludCBmcmVlX3NjYWxhcl9iZWxvd19hcmVuYSh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMTctXFx0YXNtIHZvbGF0aWxlKFxcXCJcXFwiIDogXFxcIityXFxcIihiYWRfYWRkcikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjExODpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKiliYWRfYWRkciwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTE5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTI5PWludCBiYXNpY19hbGxvYzJfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTEtXFx0XFx0cmV0dXJuIDQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTUyOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTMtXFx0aWYgKCpwYWdlMSAhPSAwIFxcdTAwMjZcXHUwMDI2ICpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTY3PWludCBiYXNpY19hbGxvYzIodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTg5LVxcdFxcdHJldHVybiA0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE5MDpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTkxLVxcdGlmICgqcGFnZTEgIT0gMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQ4MD1pbnQgYXJlbmFfa2Z1bmNzX3VuZGVyX2JwZl9sb2NrKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0OTY6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OTctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy01MDMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NTA0OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTA1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjI9aW50IGJpZ19hbGxvYzEodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtNTctXFx0XFx0cmV0dXJuIDU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6NTg6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopcGFnZTEsIDEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTU5LVxcdGlmICgqcGFnZTIgIT0gMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTE0OD1pbnQgZnJlZV9yZXNlcnZlZCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNjctXFx0ICogUmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCBwYWdlcyBzaG91bGQgYmUgaW50ZXJjaGFuZ2VhYmxlIGZvclxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjE2ODpcXHQgKiBicGZfYXJlbmFfZnJlZV9wYWdlcygpLiBGcmVlIGEgcmVzZXJ2ZWQgYW5kIGFuIGFsbG9jYXRlZFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE2OS1cXHQgKiBwYWdlIHdpdGggYSBzaW5nbGUgY2FsbC5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNzAtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MTcxOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgYWRkciArIF9fUEFHRV9TSVpFICwgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTcyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjIwPWludCBiaWdfYWxsb2MyKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTIyNy1cXHRcXHRyZXR1cm4gMTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzoyMjg6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFzZSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjI5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjM4LVxcdFxcdFxcdHJldHVybiAzO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjIzOTpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjQwLVxcdFxcdHBhZ2VbaV0gPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjUzLVxcdFxcdFxcdHJldHVybiA1O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjI1NDpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjU1LVxcdFxcdHBhZ2VbaV0gPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9Mjg5PWludCBiaWdfYWxsb2MzKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTMxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzozMTE6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlcywgMjA1MSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMzEyLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNDowMjozOS4wODkyNTk0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjM1Nzg5ODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZDpcblxuKipGb2N1c2luZyBvbiBCUEYgQXJlbmEgRnJlZWluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGZyZWVkIHdpdGhpbiB0aGUgQlBGIGFyZW5hLiBTcGVjaWZpY2FsbHksIEkndmUgaWRlbnRpZmllZCB0aGF0IGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCBhcmUgdGhlIGNydWNpYWwga2Z1bmNzIOKAkyB0aGV5J3JlIHRoZSB3cmFwcGVycyBmb3IgdGhlIGBhcmVuYV9mcmVlX3BhZ2VzYCBmdW5jdGlvbmFsaXR5IHRoYXQncyByZWxldmFudCBoZXJlLlxuXG5HaXZlbiB0aGF0LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbGwgY29uZmlndXJlIGBGb2N1c1N5bWJvbHNgIHRvIGluY2x1ZGUgYm90aCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuIFRoZXNlIGFyZSB0aGUgdGFyZ2V0cyBJJ20gaW50ZXJlc3RlZCBpbiBleGFtaW5pbmcgaW4gZGV0YWlsLiBBbmQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbnRleHQsIEknbGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGBCUEZfU1lTQ0FMTGAuXG5cbkp1c3QgYSBzYW5pdHkgY2hlY2sgbm93IC0gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGlzIGluZGVlZCB0aGUga2Z1bmMgdGhhdCdzIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLiBBIHF1aWNrIGxvb2vigKYgWWVwLCB0aGF0IGNoZWNrcyBvdXQuIEl0J3MgdGhlIHJpZ2h0IGZ1bmN0aW9uLiBHb29kLlxuXG5XaXRoIHRoYXQgY29uZmlybWF0aW9uLCBJJ20gcmVhZHkgdG8gcHJvY2VlZC4gSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MzAsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE0OjAyOjU1LjQ0NzE1OTU2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTgzMzU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYGFyZW5hX2ZyZWVfcGFnZXNgIHRvIHByZXZlbnQgZnJlZWluZyBwYWdlcyBiZWxvdyBgYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBhcmVuYSBzdWJzeXN0ZW0uIFRoZSByZWxldmFudCBrZnVuY3MgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMgYXJlIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBgYXJlbmFfZnJlZV9wYWdlc2AgdG8gcHJldmVudCBmcmVlaW5nIHBhZ2VzIGJlbG93IGBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGFyZW5hIHN1YnN5c3RlbS4gVGhlIHJlbGV2YW50IGtmdW5jcyBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcyBhcmUgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 13:43:29 +0000 UTC FinishedAt: 2026-06-30 14:02:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "3faee628-df9a-4ed4-85ce-3d9a0966f158" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_arena_free_pages", "bpf_arena_free_pages_non_sleepable" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBhcmVuYV9mcmVlX3BhZ2VzYCB0byBwcmV2ZW50IGZyZWVpbmcgcGFnZXMgYmVsb3cgYGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBhcmVuYSBzdWJzeXN0ZW0uIFRoZSByZWxldmFudCBrZnVuY3MgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMgYXJlIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzo1NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDE3NWY1ODRkNjE1N2FiNmNhOGE5ZGFiODE4NGQwMjA0NzhmNmUyMzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAxMzo1NzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcbmluZGV4IDQ5YThmN2IxYmVlZjU5Li5lMjhlODNiZWQ4YzUxMCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9hcmVuYS5jXG5AQCAtNjkzLDYgJiM0Mzs2OTMsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0dWFkZHIgXHUwMDI2PSBQQUdFX01BU0s7XG4gXHRrYWRkciA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSkgJiM0MzsgdWFkZHI7XG4gXHRmdWxsX3VhZGRyID0gY2xlYXJfbG8zMihhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KSAmIzQzOyB1YWRkcjtcbiYjNDM7XHRpZiAoZnVsbF91YWRkciBcdTAwM2MgYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbiYjNDM7XHRcdHJldHVybjtcbiBcdHVhZGRyX2VuZCA9IG1pbihhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCwgZnVsbF91YWRkciAmIzQzOyAocGFnZV9jbnQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpKTtcbiBcdGlmIChmdWxsX3VhZGRyIFx1MDAzZT0gdWFkZHJfZW5kKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuaW5kZXggNjJlMjgyZjQ0NDhhYWEuLmI0YmQxMzQ2NDY2MDdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5AQCAtMTIsMTUgJiM0MzsxMiwxNyBAQFxuIFxuICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCYjMzQ7LmJzcy5cJiMzNDsgI25hbWUpIF9faGlkZGVuIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKVxuIFxuJiM0MzsjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuJiM0MzsjZGVmaW5lIEFSRU5BX1ZNX1NUQVJUICgoMXVsbCBcdTAwM2NcdTAwM2MgMzIpIHwgKH4wdSAtIF9fUEFHRV9TSVpFICogMiAmIzQzOyAxKSlcbiYjNDM7I2Vsc2VcbiYjNDM7I2RlZmluZSBBUkVOQV9WTV9TVEFSVCAoKDF1bGwgXHUwMDNjXHUwMDNjIDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgJiM0MzsgMSkpXG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdHJ1Y3Qge1xuIFx0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUkVOQSk7XG4gXHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4gXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpOyAvKiBhcmVuYSBvZiB0d28gcGFnZXMgY2xvc2UgdG8gMzItYml0IGJvdW5kYXJ5Ki9cbi0jaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuLSAgICAgICAgX191bG9uZyhtYXBfZXh0cmEsICgxdWxsIFx1MDAzY1x1MDAzYyAzMikgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICYjNDM7IDEpKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuLSNlbHNlXG4tICAgICAgICBfX3Vsb25nKG1hcF9leHRyYSwgKDF1bGwgXHUwMDNjXHUwMDNjIDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgJiM0MzsgMSkpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4tI2VuZGlmXG4mIzQzO1x0X191bG9uZyhtYXBfZXh0cmEsIEFSRU5BX1ZNX1NUQVJUKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xuIH0gYXJlbmEgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiBcbiBTRUMoXCYjMzQ7c29ja2V0XCYjMzQ7KVxuQEAgLTkzLDYgJiM0Mzs5NSwzNSBAQCBpbnQgYmFzaWNfYWxsb2MxKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgZnJlZV9zY2FsYXJfYmVsb3dfYXJlbmEodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICpwYWdlMSwgKnBhZ2UyLCAqcGFnZTM7XG4mIzQzO1x0X191NjQgYmFkX2FkZHIgPSBBUkVOQV9WTV9TVEFSVCAtIF9fUEFHRV9TSVpFO1xuJiM0MztcbiYjNDM7XHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHRpZiAoIXBhZ2UxKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdHBhZ2UyID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdGlmICghcGFnZTIpXG4mIzQzO1x0XHRyZXR1cm4gMjtcbiYjNDM7XG4mIzQzO1x0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKHBhZ2UzKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1xuJiM0MztcdGFzbSB2b2xhdGlsZShcJiMzNDtcJiMzNDsgOiBcJiMzNDsmIzQzO3JcJiMzNDsoYmFkX2FkZHIpKTtcbiYjNDM7XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKWJhZF9hZGRyLCAxKTtcbiYjNDM7XG4mIzQzO1x0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4mIzQzO1x0aWYgKHBhZ2UzKVxuJiM0MztcdFx0cmV0dXJuIDQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIFNFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGJhc2ljX2FsbG9jMl9ub3NsZWVwKHZvaWQgKmN0eClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2JwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBgYXJlbmFfZnJlZV9wYWdlc2AgdG8gcHJldmVudCBmcmVlaW5nIHBhZ2VzIGJlbG93IGBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgYXJlbmEgc3Vic3lzdGVtLiBUaGUgcmVsZXZhbnQga2Z1bmNzIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zIGFyZSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE3NWY1ODRkNjE1N2FiNmNhOGE5ZGFiODE4NGQwMjA0NzhmNmUyMzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAxMzo1NzoyNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvYXJlbmEuYyBiL2tlcm5lbC9icGYvYXJlbmEuYwppbmRleCA0OWE4ZjdiMWJlZWY1OS4uZTI4ZTgzYmVkOGM1MTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2FyZW5hLmMKQEAgLTY5Myw2ICYjNDM7NjkzLDggQEAgc3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwKIAl1YWRkciAmYW1wOz0gUEFHRV9NQVNLOwogCWthZGRyID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKSAmIzQzOyB1YWRkcjsKIAlmdWxsX3VhZGRyID0gY2xlYXJfbG8zMihhcmVuYS0mZ3Q7dXNlcl92bV9zdGFydCkgJiM0MzsgdWFkZHI7CiYjNDM7CWlmIChmdWxsX3VhZGRyICZsdDsgYXJlbmEtJmd0O3VzZXJfdm1fc3RhcnQpCiYjNDM7CQlyZXR1cm47CiAJdWFkZHJfZW5kID0gbWluKGFyZW5hLSZndDt1c2VyX3ZtX2VuZCwgZnVsbF91YWRkciAmIzQzOyAocGFnZV9jbnQgJmx0OyZsdDsgUEFHRV9TSElGVCkpOwogCWlmIChmdWxsX3VhZGRyICZndDs9IHVhZGRyX2VuZCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwppbmRleCA2MmUyODJmNDQ0OGFhYS4uYjRiZDEzNDY0NjYwN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jCkBAIC0xMiwxNSAmIzQzOzEyLDE3IEBACiAKICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoJiMzNDsuYnNzLiYjMzQ7ICNuYW1lKSBfX2hpZGRlbiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKIAomIzQzOyNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0CiYjNDM7I2RlZmluZSBBUkVOQV9WTV9TVEFSVCAoKDF1bGwgJmx0OyZsdDsgMzIpIHwgKH4wdSAtIF9fUEFHRV9TSVpFICogMiAmIzQzOyAxKSkKJiM0MzsjZWxzZQomIzQzOyNkZWZpbmUgQVJFTkFfVk1fU1RBUlQgKCgxdWxsICZsdDsmbHQ7IDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgJiM0MzsgMSkpCiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgewogCV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwogCV9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTsKIAlfX3VpbnQobWF4X2VudHJpZXMsIDIpOyAvKiBhcmVuYSBvZiB0d28gcGFnZXMgY2xvc2UgdG8gMzItYml0IGJvdW5kYXJ5Ki8KLSNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0Ci0gICAgICAgIF9fdWxvbmcobWFwX2V4dHJhLCAoMXVsbCAmbHQ7Jmx0OyAzMikgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICYjNDM7IDEpKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwotI2Vsc2UKLSAgICAgICAgX191bG9uZyhtYXBfZXh0cmEsICgxdWxsICZsdDsmbHQ7IDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgJiM0MzsgMSkpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovCi0jZW5kaWYKJiM0MzsJX191bG9uZyhtYXBfZXh0cmEsIEFSRU5BX1ZNX1NUQVJUKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqLwogfSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKIAogU0VDKCYjMzQ7c29ja2V0JiMzNDspCkBAIC05Myw2ICYjNDM7OTUsMzUgQEAgaW50IGJhc2ljX2FsbG9jMSh2b2lkICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7aW50IGZyZWVfc2NhbGFyX2JlbG93X2FyZW5hKHZvaWQgKmN0eCkKJiM0Mzt7CiYjNDM7CXZvaWQgX19hcmVuYSAqcGFnZTEsICpwYWdlMiwgKnBhZ2UzOwomIzQzOwlfX3U2NCBiYWRfYWRkciA9IEFSRU5BX1ZNX1NUQVJUIC0gX19QQUdFX1NJWkU7CiYjNDM7CiYjNDM7CXBhZ2UxID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmICghcGFnZTEpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJcGFnZTIgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoJmFtcDthcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTsKJiM0MzsJaWYgKCFwYWdlMikKJiM0MzsJCXJldHVybiAyOwomIzQzOwomIzQzOwlwYWdlMyA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlpZiAocGFnZTMpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsKJiM0MzsJYXNtIHZvbGF0aWxlKCYjMzQ7JiMzNDsgOiAmIzM0OyYjNDM7ciYjMzQ7KGJhZF9hZGRyKSk7CiYjNDM7CWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKiliYWRfYWRkciwgMSk7CiYjNDM7CiYjNDM7CXBhZ2UzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKCZhbXA7YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7CiYjNDM7CWlmIChwYWdlMykKJiM0MzsJCXJldHVybiA0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDtzb2NrZXQmIzM0OykKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGJhc2ljX2FsbG9jMl9ub3NsZWVwKHZvaWQgKmN0eCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjczMQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBBcmVuYSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgZ290IG1vZGlmaWNhdGlvbnMgdG8gYm90aCB0aGUga2VybmVsIEJQRiBhcmVuYSBjb2RlIChga2VybmVsL2JwZi9hcmVuYS5jYCkgYW5kIHRoZSBzZWxmLXRlc3RzIChgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNgKS4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGNvcmUgY2hhbmdlIGluIGBrZXJuZWwvYnBmL2FyZW5hLmNgIGZpcnN0LiBTcGVjaWZpY2FsbHksIHRoZSBlZGl0IHRvIHRoZSBgYXJlbmFfZnJlZV9wYWdlc2AgZnVuY3Rpb24uCgpJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY3JpdGljYWwgYm91bmRzIGNoZWNrIGhlcmUuIExldCBtZSBxdW90ZToKYGBgYwogCXVhZGRyICZhbXA7PSBQQUdFX01BU0s7CiAJa2FkZHIgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpICYjNDM7IHVhZGRyOwogCWZ1bGxfdWFkZHIgPSBjbGVhcl9sbzMyKGFyZW5hLSZndDt1c2VyX3ZtX3N0YXJ0KSAmIzQzOyB1YWRkcjsKJiM0MzsJaWYgKGZ1bGxfdWFkZHIgJmx0OyBhcmVuYS0mZ3Q7dXNlcl92bV9zdGFydCkKJiM0MzsJCXJldHVybjsKIAl1YWRkcl9lbmQgPSBtaW4oYXJlbmEtJmd0O3VzZXJfdm1fZW5kLCBmdWxsX3VhZGRyICYjNDM7IChwYWdlX2NudCAmbHQ7Jmx0OyBQQUdFX1NISUZUKSk7CiAJaWYgKGZ1bGxfdWFkZHIgJmd0Oz0gdWFkZHJfZW5kKQogCQlyZXR1cm47CmBgYAoKUmlnaHQsIHRoZXkmIzM5O3JlIHByZXZlbnRpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgKmJlbG93KiB0aGUgYGFyZW5hLSZndDt1c2VyX3ZtX3N0YXJ0YCBhZGRyZXNzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc2FmZWd1YXJkLCB0byBlbnN1cmUgd2UgZG9uJiMzOTt0IGFjY2lkZW50YWxseSBjb3JydXB0IG9yIGZyZWUgbWVtb3J5IG91dHNpZGUgdGhlIGFsbG9jYXRlZCBCUEYgYXJlbmEgcmVnaW9uLiBJIHNlZSB0aGUgcG90ZW50aWFsIGZvciBhIHN1YnRsZSBidWcgYmVpbmcgYWRkcmVzc2VkLiBOb3csIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgYGFyZW5hX2ZyZWVfcGFnZXNgIGluIHRoZSBzb3VyY2UsIGJ1dCBJJiMzOTttIGNlcnRhaW4gdGhhdCB0aGUgbG9naWMgYmVpbmcgY2hhbmdlZCBpcyB0aGlzIHNwZWNpZmljIGNhc2UuIEkgdGhpbmsgYSBxdWljayBgZ3JlcHBlcmAgY2FsbCBzaG91bGQgY29uZmlybSBteSBhc3N1bXB0aW9ucywgaW4gY2FzZSB0aGVyZSBhcmUgc2ltaWxhciBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBvdGhlciBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYV9mcmVlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9Njc4PXZvaWQgKmJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqYWRkcl9faWduLCB1MzIgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuaW5jbHVkZS9saW51eC9icGYuaC02NzktXHRcdFx0XHRcdCAgdTY0IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6NjgwOnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpO1xuaW5jbHVkZS9saW51eC9icGYuaC02ODEtI2Vsc2VcbmluY2x1ZGUvbGludXgvYnBmLmg9NjgyPXN0YXRpYyBpbmxpbmUgdm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY4Ny1cbmluY2x1ZGUvbGludXgvYnBmLmg6Njg4OnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmluY2x1ZGUvbGludXgvYnBmLmgtNjg5LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDk6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUwLVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz01NDk9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NTItXHRcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCAmIzQzOyB1YWRkcjMyLCBtYXBwZWQgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQpO1xua2VybmVsL2JwZi9hcmVuYS5jOjY1MzpcdFx0YXJlbmFfZnJlZV9wYWdlcyhhcmVuYSwgdWFkZHIzMiwgbWFwcGVkLCBzbGVlcGFibGUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTY1NC1cdH1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY5PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc4LVxua2VybmVsL2JwZi9hcmVuYS5jOjY3OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcbmtlcm5lbC9icGYvYXJlbmEuYy02ODAte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz04ODc9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtODk3LX1cbmtlcm5lbC9icGYvYXJlbmEuYzo4OTg6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODk5LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTA0LVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA1Olx0YXJlbmFfZnJlZV9wYWdlcyhhcmVuYSwgKGxvbmcpcHRyX19pZ24sIHBhZ2VfY250LCB0cnVlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy05MDYtfVxua2VybmVsL2JwZi9hcmVuYS5jLTkwNy1cbmtlcm5lbC9icGYvYXJlbmEuYzo5MDg6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy05MDkte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05MTQtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvYXJlbmEuYzo5MTU6XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIGZhbHNlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy05MTYtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz05MzQ9QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9hbGxvY19wYWdlcywgS0ZfQVJFTkFfUkVUIHwgS0ZfQVJFTkFfQVJHMilcbmtlcm5lbC9icGYvYXJlbmEuYzo5MzU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jLTkzNi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExODgtXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExODk6XHRLRl9icGZfYXJlbmFfZnJlZV9wYWdlcyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5MC1cdEtGX2JwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Nj1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMjc3OkJURl9JRChmdW5jLCBicGZfYXJlbmFfZnJlZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTI3OC1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNzY3PXN0YXRpYyBib29sIGlzX2JwZl9hcmVuYV9rZnVuYyh1MzIgYnRmX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc2OS1cdHJldHVybiBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9hbGxvY19wYWdlc10gfHxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTc3MDpcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzcxLVx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXNdO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTcxMT1zdGF0aWMgaW50IHNwZWNpYWxpemVfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjLCBpbnQgaW5zbl9pZHgpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzUxLVx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc1MjpcdH0gZWxzZSBpZiAoZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTMtXHRcdGlmIChlbnYtXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTc1NDpcdFx0XHRhZGRyID0gKHVuc2lnbmVkIGxvbmcpYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc1NS1cdH1cbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaD04Mz12b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqYWRkciwgX191MzIgcGFnZV9jbnQsXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04NC1cdFx0XHRcdCAgICBpbnQgbm9kZV9pZCwgX191NjQgZmxhZ3MpIF9fa3N5bSBfX3dlYWs7XG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaDo4NTp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uYnBmLmgtODYtaW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xuLS1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmg9MjY9c3RhdGljIGlubGluZSB2b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxuLS1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzAtfVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaDozMTpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg9NTU9c3RhdGljIGlubGluZSB2b2lkIGJwZl9mcmVlKHZvaWQgX19hcmVuYSAqYWRkcilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjEtXHRpZiAoLS0oKm9ial9jbnQpID09IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XHRcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaC02My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD00OT1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaDo1MDp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaC01MS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oPTY2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX2FyZW5hKiBicGZfYXJlbmFfYWxsb2NfcGFnZXModm9pZCAqbWFwLCB2b2lkICphZGRyLCBfX3UzMiBwYWdlX2NudCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcwLX1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmg6NzE6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaC03Mi17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYz0yMTg9aW50IHVhZihjb25zdCB2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjgtXHRwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjk6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgcGFnZSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIzMC1cdHVhZl9yZWNvdmVyeV9mYWlscyA9IDI0O1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTMwPWludCBiYXNpY19hbGxvYzFfbm9zbGVlcCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDktXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NTA6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTUxLVx0aWYgKCpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTYxPWludCBiYXNpY19hbGxvYzEodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTgwLVx0XHRyZXR1cm4gNTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjgxOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy04Mi1cdGlmICgqcGFnZTEgIT0gMSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0xMDA9aW50IGZyZWVfc2NhbGFyX2JlbG93X2FyZW5hKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMTctXHRhc20gdm9sYXRpbGUoXCYjMzQ7XCYjMzQ7IDogXCYjMzQ7JiM0MztyXCYjMzQ7KGJhZF9hZGRyKSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxMTg6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKWJhZF9hZGRyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTExOS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz0xMjk9aW50IGJhc2ljX2FsbG9jMl9ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTEtXHRcdHJldHVybiA0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTUyOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTMtXHRpZiAoKnBhZ2UxICE9IDAgXHUwMDI2XHUwMDI2ICpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTE2Nz1pbnQgYmFzaWNfYWxsb2MyKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xODktXHRcdHJldHVybiA0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTkwOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xOTEtXHRpZiAoKnBhZ2UxICE9IDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NDgwPWludCBhcmVuYV9rZnVuY3NfdW5kZXJfYnBmX2xvY2sodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5NS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjQ5NjpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5Ny1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy01MDMtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo1MDQ6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgcGFnZSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy01MDUtXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjI9aW50IGJpZ19hbGxvYzEodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTU3LVx0XHRyZXR1cm4gNTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjU4Olx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy01OS1cdGlmICgqcGFnZTIgIT0gMilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYz0xNDg9aW50IGZyZWVfcmVzZXJ2ZWQodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE2Ny1cdCAqIFJlc2VydmVkIGFuZCBhbGxvY2F0ZWQgcGFnZXMgc2hvdWxkIGJlIGludGVyY2hhbmdlYWJsZSBmb3JcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjE2ODpcdCAqIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkuIEZyZWUgYSByZXNlcnZlZCBhbmQgYW4gYWxsb2NhdGVkXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNjktXHQgKiBwYWdlIHdpdGggYSBzaW5nbGUgY2FsbC5cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE3MC1cdCAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MTcxOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIGFkZHIgJiM0MzsgX19QQUdFX1NJWkUgLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE3Mi1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYz0yMjA9aW50IGJpZ19hbGxvYzIodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTIyNy1cdFx0cmV0dXJuIDE7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzoyMjg6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKWJhc2UsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjI5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTIzOC1cdFx0XHRyZXR1cm4gMztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjIzOTpcdFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0yNDAtXHRcdHBhZ2VbaV0gPSBOVUxMO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTI1My1cdFx0XHRyZXR1cm4gNTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjI1NDpcdFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0yNTUtXHRcdHBhZ2VbaV0gPSBOVUxMO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTI4OT1pbnQgYmlnX2FsbG9jMyh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMzEwLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MzExOlx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIHBhZ2VzLCAyMDUxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTMxMi0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxMzo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDUzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgQXJlbmEgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0YXJnZXRzIGBhcmVuYV9mcmVlX3BhZ2VzYCB3aXRoaW4gYGtlcm5lbC9icGYvYXJlbmEuY2AuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uLCB1c2VkIGJ5IHNldmVyYWwgQlBGIGtmdW5jcywgc3BlY2lmaWNhbGx5IGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYC4gSXQmIzM5O3MgYWxzbyBjYWxsZWQgYnkgYHphcF9wYWdlc2AgYW5kIGluIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGEgY3JpdGljYWwgcGllY2UuCgpUaGUgZ2lzdCBvZiB0aGUgY2hhbmdlIGFwcGVhcnMgdG8gYmUgYSBzYWZlZ3VhcmQ6IGl0JiMzOTtzIHByZXZlbnRpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgdGhhdCBmYWxsIGJlbG93IGBhcmVuYS0mZ3Q7dXNlcl92bV9zdGFydGAuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBsb2dpYyBlcnJvciB0aGF0IHRoZSBwYXRjaCBpcyBhZGRyZXNzaW5nLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSB0aWdodGVuaW5nIHVwIHRoZSBib3VuZHMgY2hlY2tpbmcgb3IgcHJldmVudGluZyBhIGRvdWJsZS1mcmVlIHNpdHVhdGlvbiB3aXRoaW4gdGhlIEJQRiBhcmVuYSYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgcmVsaWFiaWxpdHkgb3Igc2VjdXJpdHkgb2YgdGhlIEJQRiBhcmVuYSBtZWNoYW5pc20uCgpOb3csIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIGNoZWNrIHdoaWNoIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIEJQRiBhcmVuYSB0byBmdW5jdGlvbiBwcm9wZXJseS4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0IGFuZCBpZGVudGlmeSB3aGljaCBzeXN0ZW1zIGFuZCB1c2UgY2FzZXMgYXJlIGltcGFjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MjkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIGFuIGV4cGVydCBpbiBteSBmaWVsZDoKCioqQlBGIEFyZW5hIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgQlBGIGFyZW5hLCBhbmQgYSBxdWVzdGlvbiBrZWVwcyBjaXJjbGluZzogKmlzKiB0aGVyZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3IgdGhlIEJQRiBhcmVuYT8gSSBrbm93IHRoZSBnZW5lcmFsIGNvbmNlcHRzLCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MsIGFuZCBob3cgaXQgYWxsIGhhbmdzIHRvZ2V0aGVyLi4uIGJ1dCBJJiMzOTttIHRyeWluZyB0byByZWNhbGwgaWYgdGhlcmUmIzM5O3MgYSBkZWRpY2F0ZWQga25vYiB0byBmaW5lLXR1bmUgaXQuIEkmIzM5O20gbm90IGp1c3QgdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBzeXN0ZW0td2lkZSBtZW1vcnkgbWFuYWdlbWVudCBwYXJhbWV0ZXJzLCBidXQgc29tZXRoaW5nIHRhcmdldGVkIHNwZWNpZmljYWxseSBhdCB0aGUgYXJlbmEmIzM5O3MgYmVoYXZpb3Igd2l0aGluIHRoZSBCUEYgc3Vic3lzdGVtLiBQZXJoYXBzIEkmIzM5O20gbWlzc2luZyBzb21ldGhpbmcsIG9yIG1heWJlIEkmIzM5O20gY29uZmxhdGluZyB0aGlzIHdpdGggdGhlIHR1bmluZyBvZiByZWxhdGVkIGVsZW1lbnRzIHRoYXQgdWx0aW1hdGVseSBpbmZsdWVuY2UgaXRzIGJlaGF2aW9yLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBmb3JnZXR0aW5nIGEga2V5IGRldGFpbCwgYSBzcGVjaWZpYyBjb21tYW5kLWxpbmUgYXJndW1lbnQsIG9yIHBlcmhhcHMgYW4gb2JzY3VyZSBrZXJuZWwgbW9kdWxlIG9wdGlvbiB0aGF0IHByb3ZpZGVzIGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgaXRzIGludGVybmFsIHdvcmtpbmdzLiBHb3R0YSBkaWcgZGVlcGVyLi4uIHRpbWUgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIG1hbiBwYWdlcyBhbmQga2VybmVsIHNvdXJjZS4gSXQmIzM5O3MgYSBrZXkgZWxlbWVudCBvZiB0aGUgc3lzdGVtIHRvIGJlIGF3YXJlIG9mIGhvdyB0byBjb250cm9sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDEzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9BUkVOQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipDaGVja2luZyB0aGUgQlBGIE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7TGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgcHJvY2VzcyBhbmQgZGVwZW5kZW5jaWVzIGZvciBCUEYgY29kZSB3aXRoaW4gdGhlIGtlcm5lbC4gVGhpcyBNYWtlZmlsZSBpcyB0aGUgY2VudHJhbCBwb2ludCB0byBpbnZlc3RpZ2F0ZSBob3cgQlBGIHByb2dyYW1zIGFyZSBjb21waWxlZCwgbGlua2VkLCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnVpbGQgdGFyZ2V0cywgcnVsZXMsIGFuZCB2YXJpYWJsZXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQlBGLCBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9ucyBvciBjaGFuZ2VzIGNvdWxkIGJlIGltcGxlbWVudGVkLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGFuZCBtb2RpZnlpbmcgdGhlIEJQRiBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmEubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9idHQuYz0zOT1zdGF0aWMgaW50IGFyZW5hX3JlYWRfYnl0ZXMoc3RydWN0IGFyZW5hX2luZm8gKmFyZW5hLCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTQ0LVxuZHJpdmVycy9udmRpbW0vYnR0LmM6NDU6XHQvKiBhcmVuYSBvZmZzZXRzIG1heSBiZSBzaGlmdGVkIGZyb20gdGhlIGJhc2Ugb2YgdGhlIGRldmljZSAqL1xuZHJpdmVycy9udmRpbW0vYnR0LmMtNDYtXHRvZmZzZXQgPSBhZGp1c3RfaW5pdGlhbF9vZmZzZXQobmRfYnR0LCBvZmZzZXQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTUwPXN0YXRpYyBpbnQgYXJlbmFfd3JpdGVfYnl0ZXMoc3RydWN0IGFyZW5hX2luZm8gKmFyZW5hLCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTU1LVxuZHJpdmVycy9udmRpbW0vYnR0LmM6NTY6XHQvKiBhcmVuYSBvZmZzZXRzIG1heSBiZSBzaGlmdGVkIGZyb20gdGhlIGJhc2Ugb2YgdGhlIGRldmljZSAqL1xuZHJpdmVycy9udmRpbW0vYnR0LmMtNTctXHRvZmZzZXQgPSBhZGp1c3RfaW5pdGlhbF9vZmZzZXQobmRfYnR0LCBvZmZzZXQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTc0NT1zdGF0aWMgc3RydWN0IGFyZW5hX2luZm8gKmFsbG9jX2FyZW5hKHN0cnVjdCBidHQgKmJ0dCwgc2l6ZV90IHNpemUsXG5kcml2ZXJzL252ZGltbS9idHQuYzo3NDY6XHRcdFx0XHRzaXplX3Qgc3RhcnQsIHNpemVfdCBhcmVuYV9vZmYpXG5kcml2ZXJzL252ZGltbS9idHQuYy03NDcte1xuLS1cbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc4OS1cdC8qICYjMzk7QWJzb2x1dGUmIzM5OyB2YWx1ZXMsIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHN0b3JhZ2Ugc3BhY2UgKi9cbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjc5MDpcdGFyZW5hLVx1MDAzZWluZm9vZmYgPSBhcmVuYV9vZmY7XG5kcml2ZXJzL252ZGltbS9idHQuYy03OTEtXHRhcmVuYS1cdTAwM2VkYXRhb2ZmID0gYXJlbmEtXHUwMDNlaW5mb29mZiAmIzQzOyBCVFRfUEdfU0laRTtcbi0tXG5kcml2ZXJzL252ZGltbS9idHQuYz04MjA9c3RhdGljIHZvaWQgcGFyc2VfYXJlbmFfbWV0YShzdHJ1Y3QgYXJlbmFfaW5mbyAqYXJlbmEsIHN0cnVjdCBidHRfc2IgKnN1cGVyLFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODIxOlx0XHRcdFx0dTY0IGFyZW5hX29mZilcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgyMi17XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtODMwLVxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODMxOlx0YXJlbmEtXHUwMDNlbmV4dG9mZiA9IChzdXBlci1cdTAwM2VuZXh0b2ZmID09IDApID8gMCA6IChhcmVuYV9vZmYgJiM0MztcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgzMi1cdFx0XHRsZTY0X3RvX2NwdShzdXBlci1cdTAwM2VuZXh0b2ZmKSk7XG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzM6XHRhcmVuYS1cdTAwM2VpbmZvb2ZmID0gYXJlbmFfb2ZmO1xuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM0Olx0YXJlbmEtXHUwMDNlZGF0YW9mZiA9IGFyZW5hX29mZiAmIzQzOyBsZTY0X3RvX2NwdShzdXBlci1cdTAwM2VkYXRhb2ZmKTtcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNTpcdGFyZW5hLVx1MDAzZW1hcG9mZiA9IGFyZW5hX29mZiAmIzQzOyBsZTY0X3RvX2NwdShzdXBlci1cdTAwM2VtYXBvZmYpO1xuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM2Olx0YXJlbmEtXHUwMDNlbG9nb2ZmID0gYXJlbmFfb2ZmICYjNDM7IGxlNjRfdG9fY3B1KHN1cGVyLVx1MDAzZWxvZ29mZik7XG5kcml2ZXJzL252ZGltbS9idHQuYzo4Mzc6XHRhcmVuYS1cdTAwM2VpbmZvMm9mZiA9IGFyZW5hX29mZiAmIzQzOyBsZTY0X3RvX2NwdShzdXBlci1cdTAwM2VpbmZvMm9mZik7XG5kcml2ZXJzL252ZGltbS9idHQuYy04MzgtXG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmM9OTI3PXN0YXRpYyBpbnQgY3JlYXRlX2FyZW5hcyhzdHJ1Y3QgYnR0ICpidHQpXG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmMtOTYwLSAqIEl0IGlzIG9ubHkgY2FsbGVkIGZvciBhbiB1bmluaXRpYWxpemVkIGFyZW5hIHdoZW4gYSB3cml0ZVxuZHJpdmVycy9udmRpbW0vYnR0LmM6OTYxOiAqIHRvIHRoYXQgYXJlbmEgb2NjdXJzIGZvciB0aGUgZmlyc3QgdGltZS5cbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTk2Mi0gKi9cbi0tXG5kcml2ZXJzL252ZGltbS9idHQuaD0xMjQ9c3RydWN0IGFsaWduZWRfbG9jayB7XG4tLVxuZHJpdmVycy9udmRpbW0vYnR0LmgtMTMyLSAqIHN0cnVjdCBhcmVuYV9pbmZvIC0gaGFuZGxlIGZvciBhbiBhcmVuYVxuZHJpdmVycy9udmRpbW0vYnR0Lmg6MTMzOiAqIEBzaXplOlx0XHRTaXplIGluIGJ5dGVzIHRoaXMgYXJlbmEgb2NjdXBpZXMgb24gdGhlIHJhdyBkZXZpY2UuXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzQtICpcdFx0XHRUaGlzIGluY2x1ZGVzIGFyZW5hIG1ldGFkYXRhLlxuLS1cbmtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9OTMwMz1zdGF0aWMgaW50IGJ0Zl9jaGVja19mdW5jX2FyZ19tYXRjaChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtOTM2NC1cdFx0XHRpZiAocmVnLVx1MDAzZXR5cGUgIT0gUFRSX1RPX0FSRU5BIFx1MDAyNlx1MDAyNiByZWctXHUwMDNldHlwZSAhPSBTQ0FMQVJfVkFMVUUpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MzY1Olx0XHRcdFx0YnBmX2xvZyhsb2csIFwmIzM0O1IlZCBpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhci5cXG5cJiMzNDssIHJlZ25vKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MzY2LVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MjE9c3RydWN0IHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yMy1cdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjI0Olx0X191aW50KG1heF9lbnRyaWVzLCAyKTsgLyogYXJlbmEgb2YgdHdvIHBhZ2VzIGNsb3NlIHRvIDMyLWJpdCBib3VuZGFyeSovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNS1cdF9fdWxvbmcobWFwX2V4dHJhLCBBUkVOQV9WTV9TVEFSVCk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzNzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgRnJlZWluZyBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXJlbmEub2Agb2JqZWN0IGZpbGUsIGFuZCBpdCBzZWVtcyB0byBnZXQgY29tcGlsZWQgb25seSB3aGVuIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYENPTkZJR19NTVVgLCBhbmQgYENPTkZJR182NEJJVGAgY29uZmlndXJhdGlvbnMgYXJlIGFjdGl2ZS4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIGNvbnRleHQgYSBiaXQuIFRoZSBjb3JlIGxvZ2ljIGhlcmUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgZnJlZWluZyBwYWdlcyB3aXRoaW4gdGhlIEJQRiBhcmVuYS4gTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGZ1bmN0aW9uczogYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCwgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLCBhbmQgYGFyZW5hX2ZyZWVfcGFnZXNgLiBXYWl0Li4uIGBhcmVuYV9mcmVlX3BhZ2VzYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGlzIGZpbGUuIFRoYXQgbWVhbnMgdGhlIHJlYWwgd29yayBpcyBoYXBwZW5pbmcgaW4gdGhlIHR3byBgYnBmX2FyZW5hXypgIHZlcnNpb25zLgoKVGhlIHBhdGNoIEkmIzM5O20gcmV2aWV3aW5nIGFsc28gdG91Y2hlcyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNgLiBJbnRlcmVzdGluZy4gVGhlIHNlbGZ0ZXN0IHNwZWNpZmljYWxseSBjYWxscyBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIHdpdGggYSBzdXNwaWNpb3VzIGFkZHJlc3M6IGBicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopYmFkX2FkZHIsIDEpO2Agd2hlcmUgYGJhZF9hZGRyYCBpcyBgQVJFTkFfVk1fU1RBUlQgLSBfX1BBR0VfU0laRWAuIFRoaXMgaW1tZWRpYXRlbHkgbG9va3MgbGlrZSBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gWWVzLCB0aGlzIGlzICpleGFjdGx5KiB3aGF0IHRoZSBwYXRjaCBjbGFpbXMgdG8gZml4IOKAkyBhbiBvZmYtYnktb25lIGVycm9yIGxlYWRpbmcgdG8gYW4gdW5kZXJmbG93LgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBrZXkgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWpvciBwbGF5ZXIgaGVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCBhcyB0aGV5IGFyZSB0aGUgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBkb3VibGUgY2hlY2sgdGhhdCBgYXJlbmFfZnJlZV9wYWdlc2AgKmlzKiBpbmRlZWQgc3RhdGljLiBZdXAsIGNvbmZpcm1lZC4gU28sIEkgY2FuIGRpc3JlZ2FyZCB0aGUgc3RhdGljIGZ1bmN0aW9uIHNpbmNlIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYGFyZW5hLm9gIGNvbXBpbGF0aW9uIHVuaXQuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBhcmVuYV9mcmVlX3BhZ2VzYCB3aXRoaW4gdGhpcyBmaWxlLCB0byBiZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgYWxsIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hX2ZyZWVfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9icGYuaD02Nzg9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY3OS1cdFx0XHRcdFx0ICB1NjQgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9icGYuaDo2ODA6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudCk7XG5pbmNsdWRlL2xpbnV4L2JwZi5oLTY4MS0jZWxzZVxuaW5jbHVkZS9saW51eC9icGYuaD02ODI9c3RhdGljIGlubGluZSB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtNjg3LVxuaW5jbHVkZS9saW51eC9icGYuaDo2ODg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxuaW5jbHVkZS9saW51eC9icGYuaC02ODkte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAtXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTU0OT1zdGF0aWMgbG9uZyBhcmVuYV9hbGxvY19wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgaW50IG5vZGVfaWQsXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cdFx0Zmx1c2hfdm1hcF9jYWNoZShrZXJuX3ZtX3N0YXJ0ICYjNDM7IHVhZGRyMzIsIG1hcHBlZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUzOlx0XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjU0LVx0fVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02Njk9c3RhdGljIHZvaWQgemFwX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NzgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6Njc5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKVxua2VybmVsL2JwZi9hcmVuYS5jLTY4MC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTg4Nz12b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy04OTctfVxua2VybmVsL2JwZi9hcmVuYS5jOjg5ODpfX2JwZl9rZnVuYyB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKHZvaWQgKnBfX21hcCwgdm9pZCAqcHRyX19pZ24sIHUzMiBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy04OTkte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05MDQtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvYXJlbmEuYzo5MDU6XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCAobG9uZylwdHJfX2lnbiwgcGFnZV9jbnQsIHRydWUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTkwNi19XG5rZXJuZWwvYnBmL2FyZW5hLmMtOTA3LVxua2VybmVsL2JwZi9hcmVuYS5jOjkwODp2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxua2VybmVsL2JwZi9hcmVuYS5jLTkwOS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTkxNC1cdFx0cmV0dXJuO1xua2VybmVsL2JwZi9hcmVuYS5jOjkxNTpcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTkxNi19XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTkzND1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxua2VybmVsL2JwZi9hcmVuYS5jOjkzNTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMsIEtGX0FSRU5BX0FSRzIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTM2LUJURl9JRF9GTEFHUyhmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcywgS0ZfQVJFTkFfQVJHMilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExMjg9ZW51bSBzcGVjaWFsX2tmdW5jX3R5cGUge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE4OC1cdEtGX2JwZl9hcmVuYV9hbGxvY19wYWdlcyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE4OTpcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTkwLVx0S0ZfYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXMsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMjc2PUJURl9JRChmdW5jLCBicGZfYXJlbmFfYWxsb2NfcGFnZXMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTEyNzc6QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjc4LUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3Njc9c3RhdGljIGJvb2wgaXNfYnBmX2FyZW5hX2tmdW5jKHUzMiBidGZfaWQpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzY5LVx0cmV0dXJuIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2FsbG9jX3BhZ2VzXSB8fFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzcwOlx0ICAgICAgIGJ0Zl9pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX2FyZW5hX2ZyZWVfcGFnZXNdIHx8XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3NzEtXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlc107XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5NzExPXN0YXRpYyBpbnQgc3BlY2lhbGl6ZV9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2MsIGludCBpbnNuX2lkeClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTEtXHRcdFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9hbGxvY19wYWdlc19ub25fc2xlZXBhYmxlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzUyOlx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTc1My1cdFx0aWYgKGVudi1cdTAwM2VpbnNuX2F1eF9kYXRhW2luc25faWR4XS5ub25fc2xlZXBhYmxlKVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NzU0Olx0XHRcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU1LVx0fVxuLS1cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oPTgzPXZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oLTg0LVx0XHRcdFx0ICAgIGludCBub2RlX2lkLCBfX3U2NCBmbGFncykgX19rc3ltIF9fd2VhaztcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04Ni1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yNj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXG4tLVxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaC0zMC19XG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmgtMzIte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ZyZWUodm9pZCBfX2FyZW5hICphZGRyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaC02MS1cdGlmICgtLSgqb2JqX2NudCkgPT0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaDo2MjpcdFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIGFkZHIsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTYzLX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oPTQ5PWludCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqYWRkciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oOjUwOnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTUxLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmg9NjY9c3RhdGljIGlubGluZSB2b2lkIF9fYXJlbmEqIGJwZl9hcmVuYV9hbGxvY19wYWdlcyh2b2lkICptYXAsIHZvaWQgKmFkZHIsIF9fdTMyIHBhZ2VfY250LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmgtNzAtfVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaDo3MTpzdGF0aWMgaW5saW5lIHZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jPTIxOD1pbnQgdWFmKGNvbnN0IHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIyOC1cdHBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jOjIyOTpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmMtMjMwLVx0dWFmX3JlY292ZXJ5X2ZhaWxzID0gMjQ7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MzA9aW50IGJhc2ljX2FsbG9jMV9ub3NsZWVwKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OS1cdFx0cmV0dXJuIDU7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo1MDpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopcGFnZTIsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTEtXHRpZiAoKnBhZ2UxICE9IDEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NjE9aW50IGJhc2ljX2FsbG9jMSh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODAtXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6ODE6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UyLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTgyLVx0aWYgKCpwYWdlMSAhPSAxKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTEwMD1pbnQgZnJlZV9zY2FsYXJfYmVsb3dfYXJlbmEodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTExNy1cdGFzbSB2b2xhdGlsZShcJiMzNDtcJiMzNDsgOiBcJiMzNDsmIzQzO3JcJiMzNDsoYmFkX2FkZHIpKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjExODpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFkX2FkZHIsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTE5LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTEyOT1pbnQgYmFzaWNfYWxsb2MyX25vc2xlZXAodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE1MS1cdFx0cmV0dXJuIDQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxNTI6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE1My1cdGlmICgqcGFnZTEgIT0gMCBcdTAwMjZcdTAwMjYgKnBhZ2UxICE9IDEpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTY3PWludCBiYXNpY19hbGxvYzIodm9pZCAqY3R4KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE4OS1cdFx0cmV0dXJuIDQ7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoxOTA6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTE5MS1cdGlmICgqcGFnZTEgIT0gMClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYz00ODA9aW50IGFyZW5hX2tmdW5jc191bmRlcl9icGZfbG9jayh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDk1LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NDk2Olx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsIHBhZ2UsIDEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNDk3LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTUwMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjUwNDpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTUwNS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYz0yMj1pbnQgYmlnX2FsbG9jMSh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtNTctXHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6NTg6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTU5LVx0aWYgKCpwYWdlMiAhPSAyKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTE0OD1pbnQgZnJlZV9yZXNlcnZlZCh2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTY3LVx0ICogUmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCBwYWdlcyBzaG91bGQgYmUgaW50ZXJjaGFuZ2VhYmxlIGZvclxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MTY4Olx0ICogYnBmX2FyZW5hX2ZyZWVfcGFnZXMoKS4gRnJlZSBhIHJlc2VydmVkIGFuZCBhbiBhbGxvY2F0ZWRcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE2OS1cdCAqIHBhZ2Ugd2l0aCBhIHNpbmdsZSBjYWxsLlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTcwLVx0ICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzoxNzE6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgYWRkciAmIzQzOyBfX1BBR0VfU0laRSAsIDIpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTcyLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTIyMD1pbnQgYmlnX2FsbG9jMih2b2lkICpjdHgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjI3LVx0XHRyZXR1cm4gMTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjIyODpcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFzZSwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0yMjktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjM4LVx0XHRcdHJldHVybiAzO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MjM5Olx0XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBnLCAxKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTI0MC1cdFx0cGFnZVtpXSA9IE5VTEw7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjUzLVx0XHRcdHJldHVybiA1O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MjU0Olx0XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBnLCAyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTI1NS1cdFx0cGFnZVtpXSA9IE5VTEw7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9Mjg5PWludCBiaWdfYWxsb2MzKHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0zMTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzozMTE6XHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgcGFnZXMsIDIwNTEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMzEyLSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTgzMAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkOgoKKipGb2N1c2luZyBvbiBCUEYgQXJlbmEgRnJlZWluZyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgZnJlZWQgd2l0aGluIHRoZSBCUEYgYXJlbmEuIFNwZWNpZmljYWxseSwgSSYjMzk7dmUgaWRlbnRpZmllZCB0aGF0IGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCBhcmUgdGhlIGNydWNpYWwga2Z1bmNzIOKAkyB0aGV5JiMzOTtyZSB0aGUgd3JhcHBlcnMgZm9yIHRoZSBgYXJlbmFfZnJlZV9wYWdlc2AgZnVuY3Rpb25hbGl0eSB0aGF0JiMzOTtzIHJlbGV2YW50IGhlcmUuCgpHaXZlbiB0aGF0LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkmIzM5O2xsIGNvbmZpZ3VyZSBgRm9jdXNTeW1ib2xzYCB0byBpbmNsdWRlIGJvdGggYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLiBUaGVzZSBhcmUgdGhlIHRhcmdldHMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGV4YW1pbmluZyBpbiBkZXRhaWwuIEFuZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29udGV4dCwgSSYjMzk7bGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGBCUEZfU1lTQ0FMTGAuCgpKdXN0IGEgc2FuaXR5IGNoZWNrIG5vdyAtIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBpcyBpbmRlZWQgdGhlIGtmdW5jIHRoYXQmIzM5O3MgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMuIEEgcXVpY2sgbG9va+KApiBZZXAsIHRoYXQgY2hlY2tzIG91dC4gSXQmIzM5O3MgdGhlIHJpZ2h0IGZ1bmN0aW9uLiBHb29kLgoKV2l0aCB0aGF0IGNvbmZpcm1hdGlvbiwgSSYjMzk7bSByZWFkeSB0byBwcm9jZWVkLiBJJiMzOTtsbCBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTQ6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7YnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBhcmVuYV9mcmVlX3BhZ2VzYCB0byBwcmV2ZW50IGZyZWVpbmcgcGFnZXMgYmVsb3cgYGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBhcmVuYSBzdWJzeXN0ZW0uIFRoZSByZWxldmFudCBrZnVuY3MgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMgYXJlIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDticGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYGFyZW5hX2ZyZWVfcGFnZXNgIHRvIHByZXZlbnQgZnJlZWluZyBwYWdlcyBiZWxvdyBgYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGFyZW5hIHN1YnN5c3RlbS4gVGhlIHJlbGV2YW50IGtmdW5jcyBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcyBhcmUgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTc6MjkuMDgzOTQ1MjkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI2NTE5MDYyMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBhcmVuYV9mcmVlX3BhZ2VzYCB0byBwcmV2ZW50IGZyZWVpbmcgcGFnZXMgYmVsb3cgYGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgYXJlbmEgc3Vic3lzdGVtLiBUaGUgcmVsZXZhbnQga2Z1bmNzIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zIGFyZSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjU3OjI5LjA4Mzk2Njk5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI4MjE5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTc1ZjU4NGQ2MTU3YWI2Y2E4YTlkYWI4MTg0ZDAyMDQ3OGY2ZTIzNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAxMzo1NzoyNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2FyZW5hLmMgYi9rZXJuZWwvYnBmL2FyZW5hLmNcXG5pbmRleCA0OWE4ZjdiMWJlZWY1OS4uZTI4ZTgzYmVkOGM1MTAgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9hcmVuYS5jXFxuKysrIGIva2VybmVsL2JwZi9hcmVuYS5jXFxuQEAgLTY5Myw2ICs2OTMsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxcbiBcXHR1YWRkciBcXHUwMDI2PSBQQUdFX01BU0s7XFxuIFxcdGthZGRyID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKSArIHVhZGRyO1xcbiBcXHRmdWxsX3VhZGRyID0gY2xlYXJfbG8zMihhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCkgKyB1YWRkcjtcXG4rXFx0aWYgKGZ1bGxfdWFkZHIgXFx1MDAzYyBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydClcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR1YWRkcl9lbmQgPSBtaW4oYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kLCBmdWxsX3VhZGRyICsgKHBhZ2VfY250IFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4gXFx0aWYgKGZ1bGxfdWFkZHIgXFx1MDAzZT0gdWFkZHJfZW5kKVxcbiBcXHRcXHRyZXR1cm47XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG5pbmRleCA2MmUyODJmNDQ0OGFhYS4uYjRiZDEzNDY0NjYwN2MgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xcbkBAIC0xMiwxNSArMTIsMTcgQEBcXG4gXFxuICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXFxcIi5ic3MuXFxcIiAjbmFtZSkgX19oaWRkZW4gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpXFxuIFxcbisjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxcbisjZGVmaW5lIEFSRU5BX1ZNX1NUQVJUICgoMXVsbCBcXHUwMDNjXFx1MDAzYyAzMikgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICsgMSkpXFxuKyNlbHNlXFxuKyNkZWZpbmUgQVJFTkFfVk1fU1RBUlQgKCgxdWxsIFxcdTAwM2NcXHUwMDNjIDQ0KSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgKyAxKSlcXG4rI2VuZGlmXFxuK1xcbiBzdHJ1Y3Qge1xcbiBcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4gXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbiBcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpOyAvKiBhcmVuYSBvZiB0d28gcGFnZXMgY2xvc2UgdG8gMzItYml0IGJvdW5kYXJ5Ki9cXG4tI2lmZGVmIF9fVEFSR0VUX0FSQ0hfYXJtNjRcXG4tICAgICAgICBfX3Vsb25nKG1hcF9leHRyYSwgKDF1bGwgXFx1MDAzY1xcdTAwM2MgMzIpIHwgKH4wdSAtIF9fUEFHRV9TSVpFICogMiArIDEpKTsgLyogc3RhcnQgb2YgbW1hcCgpIHJlZ2lvbiAqL1xcbi0jZWxzZVxcbi0gICAgICAgIF9fdWxvbmcobWFwX2V4dHJhLCAoMXVsbCBcXHUwMDNjXFx1MDAzYyA0NCkgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICsgMSkpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuLSNlbmRpZlxcbitcXHRfX3Vsb25nKG1hcF9leHRyYSwgQVJFTkFfVk1fU1RBUlQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuIH0gYXJlbmEgU0VDKFxcXCIubWFwc1xcXCIpO1xcbiBcXG4gU0VDKFxcXCJzb2NrZXRcXFwiKVxcbkBAIC05Myw2ICs5NSwzNSBAQCBpbnQgYmFzaWNfYWxsb2MxKHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK1NFQyhcXFwic3lzY2FsbFxcXCIpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitpbnQgZnJlZV9zY2FsYXJfYmVsb3dfYXJlbmEodm9pZCAqY3R4KVxcbit7XFxuK1xcdHZvaWQgX19hcmVuYSAqcGFnZTEsICpwYWdlMiwgKnBhZ2UzO1xcbitcXHRfX3U2NCBiYWRfYWRkciA9IEFSRU5BX1ZNX1NUQVJUIC0gX19QQUdFX1NJWkU7XFxuK1xcbitcXHRwYWdlMSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdGlmICghcGFnZTEpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0cGFnZTIgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAoIXBhZ2UyKVxcbitcXHRcXHRyZXR1cm4gMjtcXG4rXFxuK1xcdHBhZ2UzID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0aWYgKHBhZ2UzKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdGFzbSB2b2xhdGlsZShcXFwiXFxcIiA6IFxcXCIrclxcXCIoYmFkX2FkZHIpKTtcXG4rXFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFkX2FkZHIsIDEpO1xcbitcXG4rXFx0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xcbitcXHRpZiAocGFnZTMpXFxuK1xcdFxcdHJldHVybiA0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIFNFQyhcXFwic29ja2V0XFxcIilcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIGludCBiYXNpY19hbGxvYzJfbm9zbGVlcCh2b2lkICpjdHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjU3OjI5LjYxMjgwNTM2MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1OTkwMTkyNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNcIixcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGBhcmVuYV9mcmVlX3BhZ2VzYCB0byBwcmV2ZW50IGZyZWVpbmcgcGFnZXMgYmVsb3cgYGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBCUEYgYXJlbmEgc3Vic3lzdGVtLiBUaGUgcmVsZXZhbnQga2Z1bmNzIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zIGFyZSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMTc1ZjU4NGQ2MTU3YWI2Y2E4YTlkYWI4MTg0ZDAyMDQ3OGY2ZTIzNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDEzOjU3OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9hcmVuYS5jIGIva2VybmVsL2JwZi9hcmVuYS5jXG5pbmRleCA0OWE4ZjdiMWJlZWY1OS4uZTI4ZTgzYmVkOGM1MTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2FyZW5hLmNcbisrKyBiL2tlcm5lbC9icGYvYXJlbmEuY1xuQEAgLTY5Myw2ICs2OTMsOCBAQCBzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LFxuIFx0dWFkZHIgXHUwMDI2PSBQQUdFX01BU0s7XG4gXHRrYWRkciA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSkgKyB1YWRkcjtcbiBcdGZ1bGxfdWFkZHIgPSBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICsgdWFkZHI7XG4rXHRpZiAoZnVsbF91YWRkciBcdTAwM2MgYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbitcdFx0cmV0dXJuO1xuIFx0dWFkZHJfZW5kID0gbWluKGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kLCBmdWxsX3VhZGRyICsgKHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4gXHRpZiAoZnVsbF91YWRkciBcdTAwM2U9IHVhZGRyX2VuZClcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbmluZGV4IDYyZTI4MmY0NDQ4YWFhLi5iNGJkMTM0NjQ2NjA3YyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuQEAgLTEyLDE1ICsxMiwxNyBAQFxuIFxuICNkZWZpbmUgcHJpdmF0ZShuYW1lKSBTRUMoXCIuYnNzLlwiICNuYW1lKSBfX2hpZGRlbiBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSlcbiBcbisjaWZkZWYgX19UQVJHRVRfQVJDSF9hcm02NFxuKyNkZWZpbmUgQVJFTkFfVk1fU1RBUlQgKCgxdWxsIFx1MDAzY1x1MDAzYyAzMikgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICsgMSkpXG4rI2Vsc2VcbisjZGVmaW5lIEFSRU5BX1ZNX1NUQVJUICgoMXVsbCBcdTAwM2NcdTAwM2MgNDQpIHwgKH4wdSAtIF9fUEFHRV9TSVpFICogMiArIDEpKVxuKyNlbmRpZlxuK1xuIHN0cnVjdCB7XG4gXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiBcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbiBcdF9fdWludChtYXhfZW50cmllcywgMik7IC8qIGFyZW5hIG9mIHR3byBwYWdlcyBjbG9zZSB0byAzMi1iaXQgYm91bmRhcnkqL1xuLSNpZmRlZiBfX1RBUkdFVF9BUkNIX2FybTY0XG4tICAgICAgICBfX3Vsb25nKG1hcF9leHRyYSwgKDF1bGwgXHUwMDNjXHUwMDNjIDMyKSB8ICh+MHUgLSBfX1BBR0VfU0laRSAqIDIgKyAxKSk7IC8qIHN0YXJ0IG9mIG1tYXAoKSByZWdpb24gKi9cbi0jZWxzZVxuLSAgICAgICAgX191bG9uZyhtYXBfZXh0cmEsICgxdWxsIFx1MDAzY1x1MDAzYyA0NCkgfCAofjB1IC0gX19QQUdFX1NJWkUgKiAyICsgMSkpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4tI2VuZGlmXG4rXHRfX3Vsb25nKG1hcF9leHRyYSwgQVJFTkFfVk1fU1RBUlQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXG4gfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbiBcbiBTRUMoXCJzb2NrZXRcIilcbkBAIC05Myw2ICs5NSwzNSBAQCBpbnQgYmFzaWNfYWxsb2MxKHZvaWQgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGZyZWVfc2NhbGFyX2JlbG93X2FyZW5hKHZvaWQgKmN0eClcbit7XG4rXHR2b2lkIF9fYXJlbmEgKnBhZ2UxLCAqcGFnZTIsICpwYWdlMztcbitcdF9fdTY0IGJhZF9hZGRyID0gQVJFTkFfVk1fU1RBUlQgLSBfX1BBR0VfU0laRTtcbitcbitcdHBhZ2UxID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0aWYgKCFwYWdlMSlcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRwYWdlMiA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbitcdGlmICghcGFnZTIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAocGFnZTMpXG4rXHRcdHJldHVybiAzO1xuK1xuK1x0YXNtIHZvbGF0aWxlKFwiXCIgOiBcIityXCIoYmFkX2FkZHIpKTtcbitcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFkX2FkZHIsIDEpO1xuK1xuK1x0cGFnZTMgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHRpZiAocGFnZTMpXG4rXHRcdHJldHVybiA0O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIFNFQyhcInNvY2tldFwiKVxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBiYXNpY19hbGxvYzJfbm9zbGVlcCh2b2lkICpjdHgpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzo1NzoyOS42MTI4MDY0OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE3MzY3ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEFyZW5hIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSd2ZSBnb3QgbW9kaWZpY2F0aW9ucyB0byBib3RoIHRoZSBrZXJuZWwgQlBGIGFyZW5hIGNvZGUgKGBrZXJuZWwvYnBmL2FyZW5hLmNgKSBhbmQgdGhlIHNlbGYtdGVzdHMgKGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY2ApLiBJJ2xsIGZvY3VzIG9uIHRoZSBjb3JlIGNoYW5nZSBpbiBga2VybmVsL2JwZi9hcmVuYS5jYCBmaXJzdC4gU3BlY2lmaWNhbGx5LCB0aGUgZWRpdCB0byB0aGUgYGFyZW5hX2ZyZWVfcGFnZXNgIGZ1bmN0aW9uLlxuXG5JdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYSBjcml0aWNhbCBib3VuZHMgY2hlY2sgaGVyZS4gTGV0IG1lIHF1b3RlOlxuYGBgY1xuIFx0dWFkZHIgXHUwMDI2PSBQQUdFX01BU0s7XG4gXHRrYWRkciA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSkgKyB1YWRkcjtcbiBcdGZ1bGxfdWFkZHIgPSBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICsgdWFkZHI7XG4rXHRpZiAoZnVsbF91YWRkciBcdTAwM2MgYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbitcdFx0cmV0dXJuO1xuIFx0dWFkZHJfZW5kID0gbWluKGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kLCBmdWxsX3VhZGRyICsgKHBhZ2VfY250IFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSk7XG4gXHRpZiAoZnVsbF91YWRkciBcdTAwM2U9IHVhZGRyX2VuZClcbiBcdFx0cmV0dXJuO1xuYGBgXG5cblJpZ2h0LCB0aGV5J3JlIHByZXZlbnRpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgKmJlbG93KiB0aGUgYGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnRgIGFkZHJlc3MuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzYWZlZ3VhcmQsIHRvIGVuc3VyZSB3ZSBkb24ndCBhY2NpZGVudGFsbHkgY29ycnVwdCBvciBmcmVlIG1lbW9yeSBvdXRzaWRlIHRoZSBhbGxvY2F0ZWQgQlBGIGFyZW5hIHJlZ2lvbi4gSSBzZWUgdGhlIHBvdGVudGlhbCBmb3IgYSBzdWJ0bGUgYnVnIGJlaW5nIGFkZHJlc3NlZC4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGluc3RhbmNlIG9mIGBhcmVuYV9mcmVlX3BhZ2VzYCBpbiB0aGUgc291cmNlLCBidXQgSSdtIGNlcnRhaW4gdGhhdCB0aGUgbG9naWMgYmVpbmcgY2hhbmdlZCBpcyB0aGlzIHNwZWNpZmljIGNhc2UuIEkgdGhpbmsgYSBxdWljayBgZ3JlcHBlcmAgY2FsbCBzaG91bGQgY29uZmlybSBteSBhc3N1bXB0aW9ucywgaW4gY2FzZSB0aGVyZSBhcmUgc2ltaWxhciBmdW5jdGlvbiBkZWZpbml0aW9ucyBpbiBvdGhlciBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjczMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjU3OjM1LjYzMDE3NjI5NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA5MDg1NjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX2ZyZWVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD02Nzg9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuaW5jbHVkZS9saW51eC9icGYuaC02NzktXFx0XFx0XFx0XFx0XFx0ICB1NjQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6NjgwOnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNjgxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9icGYuaD02ODI9c3RhdGljIGlubGluZSB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC02ODctXFxuaW5jbHVkZS9saW51eC9icGYuaDo2ODg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNjg5LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDk6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MC1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz01NDk9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MzpcXHRcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTY1NC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY5PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjY3OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjgwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04ODc9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04OTctfVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4OTg6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTg5OS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTA0LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA1OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTkwNi19XFxua2VybmVsL2JwZi9hcmVuYS5jLTkwNy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA4OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTkwOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTE0LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTE1OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy05MTYtfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTkzND1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo5MzU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy05MzYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE4OC1cXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTg5OlxcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5MC1cXHRLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Nj1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI3NzpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjc4LUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTc2Nz1zdGF0aWMgYm9vbCBpc19icGZfYXJlbmFfa2Z1bmModTMyIGJ0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc2OS1cXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzcwOlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc3MS1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlc107XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3MTE9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzUxLVxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTI6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTMtXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTQ6XFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU1LVxcdH1cXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oPTgzPXZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04NC1cXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uYnBmLmgtODYtaW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbi0tXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yNj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxuLS1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMwLX1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ZyZWUodm9pZCBfX2FyZW5hICphZGRyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTYxLVxcdGlmICgtLSgqb2JqX2NudCkgPT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XFx0XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD00OT1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmg6NTA6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudCkgX19rc3ltIF9fd2VhaztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTUxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD02Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcwLX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oOjcxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmM9MjE4PWludCB1YWYoY29uc3Qgdm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjgtXFx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjk6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIzMC1cXHR1YWZfcmVjb3ZlcnlfZmFpbHMgPSAyNDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTMwPWludCBiYXNpY19hbGxvYzFfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OS1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo1MDpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTEtXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NjE9aW50IGJhc2ljX2FsbG9jMSh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy04MC1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo4MTpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODItXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTAwPWludCBmcmVlX3NjYWxhcl9iZWxvd19hcmVuYSh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMTctXFx0YXNtIHZvbGF0aWxlKFxcXCJcXFwiIDogXFxcIityXFxcIihiYWRfYWRkcikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjExODpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKiliYWRfYWRkciwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTE5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTI5PWludCBiYXNpY19hbGxvYzJfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTEtXFx0XFx0cmV0dXJuIDQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTUyOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTMtXFx0aWYgKCpwYWdlMSAhPSAwIFxcdTAwMjZcXHUwMDI2ICpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTY3PWludCBiYXNpY19hbGxvYzIodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTg5LVxcdFxcdHJldHVybiA0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE5MDpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTkxLVxcdGlmICgqcGFnZTEgIT0gMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQ4MD1pbnQgYXJlbmFfa2Z1bmNzX3VuZGVyX2JwZl9sb2NrKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0OTY6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OTctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy01MDMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NTA0OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTA1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjI9aW50IGJpZ19hbGxvYzEodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtNTctXFx0XFx0cmV0dXJuIDU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6NTg6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopcGFnZTEsIDEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTU5LVxcdGlmICgqcGFnZTIgIT0gMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTE0OD1pbnQgZnJlZV9yZXNlcnZlZCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNjctXFx0ICogUmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCBwYWdlcyBzaG91bGQgYmUgaW50ZXJjaGFuZ2VhYmxlIGZvclxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjE2ODpcXHQgKiBicGZfYXJlbmFfZnJlZV9wYWdlcygpLiBGcmVlIGEgcmVzZXJ2ZWQgYW5kIGFuIGFsbG9jYXRlZFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE2OS1cXHQgKiBwYWdlIHdpdGggYSBzaW5nbGUgY2FsbC5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNzAtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MTcxOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgYWRkciArIF9fUEFHRV9TSVpFICwgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTcyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjIwPWludCBiaWdfYWxsb2MyKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTIyNy1cXHRcXHRyZXR1cm4gMTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzoyMjg6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFzZSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjI5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjM4LVxcdFxcdFxcdHJldHVybiAzO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjIzOTpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjQwLVxcdFxcdHBhZ2VbaV0gPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjUzLVxcdFxcdFxcdHJldHVybiA1O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjI1NDpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjU1LVxcdFxcdHBhZ2VbaV0gPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9Mjg5PWludCBiaWdfYWxsb2MzKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTMxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzozMTE6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlcywgMjA1MSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMzEyLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzo1NzozOC4wMzkyNjc4MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMzU2NDg5MDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgQXJlbmEgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdGFyZ2V0cyBgYXJlbmFfZnJlZV9wYWdlc2Agd2l0aGluIGBrZXJuZWwvYnBmL2FyZW5hLmNgLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbiwgdXNlZCBieSBzZXZlcmFsIEJQRiBrZnVuY3MsIHNwZWNpZmljYWxseSBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuIEl0J3MgYWxzbyBjYWxsZWQgYnkgYHphcF9wYWdlc2AgYW5kIGluIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYXJlbmFfYWxsb2NfcGFnZXNgLCBzbyBpdCdzIGNsZWFybHkgYSBjcml0aWNhbCBwaWVjZS5cblxuVGhlIGdpc3Qgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGEgc2FmZWd1YXJkOiBpdCdzIHByZXZlbnRpbmcgdGhlIGZyZWVpbmcgb2YgcGFnZXMgdGhhdCBmYWxsIGJlbG93IGBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0YC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBhIHBvdGVudGlhbCB2dWxuZXJhYmlsaXR5IG9yIGxvZ2ljIGVycm9yIHRoYXQgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcuIEl0IHNlZW1zIGxpa2Ugd2UncmUgdGlnaHRlbmluZyB1cCB0aGUgYm91bmRzIGNoZWNraW5nIG9yIHByZXZlbnRpbmcgYSBkb3VibGUtZnJlZSBzaXR1YXRpb24gd2l0aGluIHRoZSBCUEYgYXJlbmEncyBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IGltcHJvdmluZyB0aGUgcmVsaWFiaWxpdHkgb3Igc2VjdXJpdHkgb2YgdGhlIEJQRiBhcmVuYSBtZWNoYW5pc20uXG5cbk5vdywgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gY2hlY2sgd2hpY2gga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCBmb3IgQlBGIGFyZW5hIHRvIGZ1bmN0aW9uIHByb3Blcmx5LiBUaGlzIHdpbGwgcHJvdmlkZSBzb21lIGNvbnRleHQgYW5kIGlkZW50aWZ5IHdoaWNoIHN5c3RlbXMgYW5kIHVzZSBjYXNlcyBhcmUgaW1wYWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTk6MTAuMzk1NzU4OTMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzA0NzE0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTk6MTMuMjY2MjM1NzgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MTkzMTI0ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBJJ20gYW4gZXhwZXJ0IGluIG15IGZpZWxkOlxuXG4qKkJQRiBBcmVuYSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBCUEYgYXJlbmEsIGFuZCBhIHF1ZXN0aW9uIGtlZXBzIGNpcmNsaW5nOiAqaXMqIHRoZXJlIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nIGZvciB0aGUgQlBGIGFyZW5hPyBJIGtub3cgdGhlIGdlbmVyYWwgY29uY2VwdHMsIHRoZSB1bmRlcmx5aW5nIG1lY2hhbmljcywgYW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuLi4gYnV0IEknbSB0cnlpbmcgdG8gcmVjYWxsIGlmIHRoZXJlJ3MgYSBkZWRpY2F0ZWQga25vYiB0byBmaW5lLXR1bmUgaXQuIEknbSBub3QganVzdCB0aGlua2luZyBhYm91dCByZWxhdGVkIHN5c3RlbS13aWRlIG1lbW9yeSBtYW5hZ2VtZW50IHBhcmFtZXRlcnMsIGJ1dCBzb21ldGhpbmcgdGFyZ2V0ZWQgc3BlY2lmaWNhbGx5IGF0IHRoZSBhcmVuYSdzIGJlaGF2aW9yIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gUGVyaGFwcyBJJ20gbWlzc2luZyBzb21ldGhpbmcsIG9yIG1heWJlIEknbSBjb25mbGF0aW5nIHRoaXMgd2l0aCB0aGUgdHVuaW5nIG9mIHJlbGF0ZWQgZWxlbWVudHMgdGhhdCB1bHRpbWF0ZWx5IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIEkgbmVlZCB0byBiZSBzdXJlIEknbSBub3QgZm9yZ2V0dGluZyBhIGtleSBkZXRhaWwsIGEgc3BlY2lmaWMgY29tbWFuZC1saW5lIGFyZ3VtZW50LCBvciBwZXJoYXBzIGFuIG9ic2N1cmUga2VybmVsIG1vZHVsZSBvcHRpb24gdGhhdCBwcm92aWRlcyBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIGl0cyBpbnRlcm5hbCB3b3JraW5ncy4gR290dGEgZGlnIGRlZXBlci4uLiB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBtYW4gcGFnZXMgYW5kIGtlcm5lbCBzb3VyY2UuIEl0J3MgYSBrZXkgZWxlbWVudCBvZiB0aGUgc3lzdGVtIHRvIGJlIGF3YXJlIG9mIGhvdyB0byBjb250cm9sLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTI5LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTk6MjUuMTg1NTUwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE0ODcyNjQ0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX0FSRU5BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxMzo1OToyNy42MDA0MzIxOTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjQ0MzM0MjU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKkNoZWNraW5nIHRoZSBCUEYgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIGNyYWNrIG9wZW4gdGhlIGBrZXJuZWwvYnBmL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQncyB3aGF0LlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzIGFuZCBkZXBlbmRlbmNpZXMgZm9yIEJQRiBjb2RlIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIE1ha2VmaWxlIGlzIHRoZSBjZW50cmFsIHBvaW50IHRvIGludmVzdGlnYXRlIGhvdyBCUEYgcHJvZ3JhbXMgYXJlIGNvbXBpbGVkLCBsaW5rZWQsIGFuZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUga2VybmVsIGltYWdlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCB0YXJnZXRzLCBydWxlcywgYW5kIHZhcmlhYmxlcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBCUEYsIGFuZCBwb3RlbnRpYWxseSBpZGVudGlmeSBhcmVhcyB3aGVyZSBvcHRpbWl6YXRpb25zIG9yIGNoYW5nZXMgY291bGQgYmUgaW1wbGVtZW50ZWQuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgYW5kIG1vZGlmeWluZyB0aGUgQlBGIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODE1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTM6NTk6NTAuMDQzNzc3MTM2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk1MTM1NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9udmRpbW0vYnR0LmM9Mzk9c3RhdGljIGludCBhcmVuYV9yZWFkX2J5dGVzKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTQ0LVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjQ1OlxcdC8qIGFyZW5hIG9mZnNldHMgbWF5IGJlIHNoaWZ0ZWQgZnJvbSB0aGUgYmFzZSBvZiB0aGUgZGV2aWNlICovXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNDYtXFx0b2Zmc2V0ID0gYWRqdXN0X2luaXRpYWxfb2Zmc2V0KG5kX2J0dCwgb2Zmc2V0KTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTUwPXN0YXRpYyBpbnQgYXJlbmFfd3JpdGVfYnl0ZXMoc3RydWN0IGFyZW5hX2luZm8gKmFyZW5hLCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNTUtXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6NTY6XFx0LyogYXJlbmEgb2Zmc2V0cyBtYXkgYmUgc2hpZnRlZCBmcm9tIHRoZSBiYXNlIG9mIHRoZSBkZXZpY2UgKi9cXG5kcml2ZXJzL252ZGltbS9idHQuYy01Ny1cXHRvZmZzZXQgPSBhZGp1c3RfaW5pdGlhbF9vZmZzZXQobmRfYnR0LCBvZmZzZXQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9NzQ1PXN0YXRpYyBzdHJ1Y3QgYXJlbmFfaW5mbyAqYWxsb2NfYXJlbmEoc3RydWN0IGJ0dCAqYnR0LCBzaXplX3Qgc2l6ZSxcXG5kcml2ZXJzL252ZGltbS9idHQuYzo3NDY6XFx0XFx0XFx0XFx0c2l6ZV90IHN0YXJ0LCBzaXplX3QgYXJlbmFfb2ZmKVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTc0Ny17XFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy03ODktXFx0LyogJ0Fic29sdXRlJyB2YWx1ZXMsIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHN0b3JhZ2Ugc3BhY2UgKi9cXG5kcml2ZXJzL252ZGltbS9idHQuYzo3OTA6XFx0YXJlbmEtXFx1MDAzZWluZm9vZmYgPSBhcmVuYV9vZmY7XFxuZHJpdmVycy9udmRpbW0vYnR0LmMtNzkxLVxcdGFyZW5hLVxcdTAwM2VkYXRhb2ZmID0gYXJlbmEtXFx1MDAzZWluZm9vZmYgKyBCVFRfUEdfU0laRTtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jPTgyMD1zdGF0aWMgdm9pZCBwYXJzZV9hcmVuYV9tZXRhKHN0cnVjdCBhcmVuYV9pbmZvICphcmVuYSwgc3RydWN0IGJ0dF9zYiAqc3VwZXIsXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODIxOlxcdFxcdFxcdFxcdHU2NCBhcmVuYV9vZmYpXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODIyLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J0dC5jLTgzMC1cXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzE6XFx0YXJlbmEtXFx1MDAzZW5leHRvZmYgPSAoc3VwZXItXFx1MDAzZW5leHRvZmYgPT0gMCkgPyAwIDogKGFyZW5hX29mZiArXFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODMyLVxcdFxcdFxcdGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VuZXh0b2ZmKSk7XFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODMzOlxcdGFyZW5hLVxcdTAwM2VpbmZvb2ZmID0gYXJlbmFfb2ZmO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNDpcXHRhcmVuYS1cXHUwMDNlZGF0YW9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VkYXRhb2ZmKTtcXG5kcml2ZXJzL252ZGltbS9idHQuYzo4MzU6XFx0YXJlbmEtXFx1MDAzZW1hcG9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VtYXBvZmYpO1xcbmRyaXZlcnMvbnZkaW1tL2J0dC5jOjgzNjpcXHRhcmVuYS1cXHUwMDNlbG9nb2ZmID0gYXJlbmFfb2ZmICsgbGU2NF90b19jcHUoc3VwZXItXFx1MDAzZWxvZ29mZik7XFxuZHJpdmVycy9udmRpbW0vYnR0LmM6ODM3OlxcdGFyZW5hLVxcdTAwM2VpbmZvMm9mZiA9IGFyZW5hX29mZiArIGxlNjRfdG9fY3B1KHN1cGVyLVxcdTAwM2VpbmZvMm9mZik7XFxuZHJpdmVycy9udmRpbW0vYnR0LmMtODM4LVxcbi0tXFxuZHJpdmVycy9udmRpbW0vYnR0LmM9OTI3PXN0YXRpYyBpbnQgY3JlYXRlX2FyZW5hcyhzdHJ1Y3QgYnR0ICpidHQpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjAtICogSXQgaXMgb25seSBjYWxsZWQgZm9yIGFuIHVuaW5pdGlhbGl6ZWQgYXJlbmEgd2hlbiBhIHdyaXRlXFxuZHJpdmVycy9udmRpbW0vYnR0LmM6OTYxOiAqIHRvIHRoYXQgYXJlbmEgb2NjdXJzIGZvciB0aGUgZmlyc3QgdGltZS5cXG5kcml2ZXJzL252ZGltbS9idHQuYy05NjItICovXFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuaD0xMjQ9c3RydWN0IGFsaWduZWRfbG9jayB7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzItICogc3RydWN0IGFyZW5hX2luZm8gLSBoYW5kbGUgZm9yIGFuIGFyZW5hXFxuZHJpdmVycy9udmRpbW0vYnR0Lmg6MTMzOiAqIEBzaXplOlxcdFxcdFNpemUgaW4gYnl0ZXMgdGhpcyBhcmVuYSBvY2N1cGllcyBvbiB0aGUgcmF3IGRldmljZS5cXG5kcml2ZXJzL252ZGltbS9idHQuaC0xMzQtICpcXHRcXHRcXHRUaGlzIGluY2x1ZGVzIGFyZW5hIG1ldGFkYXRhLlxcbi0tXFxua2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz05MzAzPXN0YXRpYyBpbnQgYnRmX2NoZWNrX2Z1bmNfYXJnX21hdGNoKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTkzNjQtXFx0XFx0XFx0aWYgKHJlZy1cXHUwMDNldHlwZSAhPSBQVFJfVE9fQVJFTkEgXFx1MDAyNlxcdTAwMjYgcmVnLVxcdTAwM2V0eXBlICE9IFNDQUxBUl9WQUxVRSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo5MzY1OlxcdFxcdFxcdFxcdGJwZl9sb2cobG9nLCBcXFwiUiVkIGlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyLlxcXFxuXFxcIiwgcmVnbm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy05MzY2LVxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MjE9c3RydWN0IHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTIzLVxcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzoyNDpcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpOyAvKiBhcmVuYSBvZiB0d28gcGFnZXMgY2xvc2UgdG8gMzItYml0IGJvdW5kYXJ5Ki9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0yNS1cXHRfX3Vsb25nKG1hcF9leHRyYSwgQVJFTkFfVk1fU1RBUlQpOyAvKiBzdGFydCBvZiBtbWFwKCkgcmVnaW9uICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDEzOjU5OjUyLjgzODk3MDg3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjM0NTA1MDU4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgQXJlbmEgRnJlZWluZyBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGFyZW5hLm9gIG9iamVjdCBmaWxlLCBhbmQgaXQgc2VlbXMgdG8gZ2V0IGNvbXBpbGVkIG9ubHkgd2hlbiB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGBDT05GSUdfTU1VYCwgYW5kIGBDT05GSUdfNjRCSVRgIGNvbmZpZ3VyYXRpb25zIGFyZSBhY3RpdmUuIFRoYXQgbmFycm93cyBkb3duIHRoZSBjb250ZXh0IGEgYml0LiBUaGUgY29yZSBsb2dpYyBoZXJlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGZyZWVpbmcgcGFnZXMgd2l0aGluIHRoZSBCUEYgYXJlbmEuIE15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBmdW5jdGlvbnM6IGBicGZfYXJlbmFfZnJlZV9wYWdlc2AsIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCwgYW5kIGBhcmVuYV9mcmVlX3BhZ2VzYC4gV2FpdC4uLiBgYXJlbmFfZnJlZV9wYWdlc2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGl0J3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGlzIGZpbGUuIFRoYXQgbWVhbnMgdGhlIHJlYWwgd29yayBpcyBoYXBwZW5pbmcgaW4gdGhlIHR3byBgYnBmX2FyZW5hXypgIHZlcnNpb25zLlxuXG5UaGUgcGF0Y2ggSSdtIHJldmlld2luZyBhbHNvIHRvdWNoZXMgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jYC4gSW50ZXJlc3RpbmcuIFRoZSBzZWxmdGVzdCBzcGVjaWZpY2FsbHkgY2FsbHMgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCB3aXRoIGEgc3VzcGljaW91cyBhZGRyZXNzOiBgYnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKiliYWRfYWRkciwgMSk7YCB3aGVyZSBgYmFkX2FkZHJgIGlzIGBBUkVOQV9WTV9TVEFSVCAtIF9fUEFHRV9TSVpFYC4gVGhpcyBpbW1lZGlhdGVseSBsb29rcyBsaWtlIGEgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBZZXMsIHRoaXMgaXMgKmV4YWN0bHkqIHdoYXQgdGhlIHBhdGNoIGNsYWltcyB0byBmaXgg4oCTIGFuIG9mZi1ieS1vbmUgZXJyb3IgbGVhZGluZyB0byBhbiB1bmRlcmZsb3cuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBrZXkgY29uZmlndXJhdGlvbnM6IGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHRoZSBtYWpvciBwbGF5ZXIgaGVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgIGFzIHRoZXkgYXJlIHRoZSBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGF0IGBhcmVuYV9mcmVlX3BhZ2VzYCAqaXMqIGluZGVlZCBzdGF0aWMuIFl1cCwgY29uZmlybWVkLiBTbywgSSBjYW4gZGlzcmVnYXJkIHRoZSBzdGF0aWMgZnVuY3Rpb24gc2luY2UgaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBgYXJlbmEub2AgY29tcGlsYXRpb24gdW5pdC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGBhcmVuYV9mcmVlX3BhZ2VzYCB3aXRoaW4gdGhpcyBmaWxlLCB0byBiZSBzdXJlIEkndmUgaWRlbnRpZmllZCBhbGwgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTQ6MDI6MzYuMjg5NDc5MTM0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzk5NzcyNTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyZW5hX2ZyZWVfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD02Nzg9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCwgaW50IG5vZGVfaWQsXFxuaW5jbHVkZS9saW51eC9icGYuaC02NzktXFx0XFx0XFx0XFx0XFx0ICB1NjQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvYnBmLmg6NjgwOnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpO1xcbmluY2x1ZGUvbGludXgvYnBmLmgtNjgxLSNlbHNlXFxuaW5jbHVkZS9saW51eC9icGYuaD02ODI9c3RhdGljIGlubGluZSB2b2lkICpicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKmFkZHJfX2lnbiwgdTMyIHBhZ2VfY250LFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC02ODctXFxuaW5jbHVkZS9saW51eC9icGYuaDo2ODg6c3RhdGljIGlubGluZSB2b2lkIGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICpwdHJfX2lnbiwgdTMyIHBhZ2VfY250KVxcbmluY2x1ZGUvbGludXgvYnBmLmgtNjg5LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDk6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MC1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz01NDk9c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Mi1cXHRcXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgKyB1YWRkcjMyLCBtYXBwZWQgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MzpcXHRcXHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTY1NC1cXHR9XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjY5PXN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02NzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjY3OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjgwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz04ODc9dm9pZCAqYnBmX2FyZW5hX2FsbG9jX3BhZ2VzX25vbl9zbGVlcGFibGUodm9pZCAqcF9fbWFwLCB2b2lkICphZGRyX19pZ24sIHUzMiBwYWdlX2NudCxcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04OTctfVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4OTg6X19icGZfa2Z1bmMgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTg5OS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTA0LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA1OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgdHJ1ZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTkwNi19XFxua2VybmVsL2JwZi9hcmVuYS5jLTkwNy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTA4OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZSh2b2lkICpwX19tYXAsIHZvaWQgKnB0cl9faWduLCB1MzIgcGFnZV9jbnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTkwOS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTE0LVxcdFxcdHJldHVybjtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTE1OlxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIChsb25nKXB0cl9faWduLCBwYWdlX2NudCwgZmFsc2UpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy05MTYtfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTkzND1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzLCBLRl9BUkVOQV9SRVQgfCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo5MzU6QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9mcmVlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy05MzYtQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzLCBLRl9BUkVOQV9BUkcyKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI4PWVudW0gc3BlY2lhbF9rZnVuY190eXBlIHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE4OC1cXHRLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTg5OlxcdEtGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE5MC1cXHRLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI3Nj1CVEZfSUQoZnVuYywgYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTI3NzpCVEZfSUQoZnVuYywgYnBmX2FyZW5hX2ZyZWVfcGFnZXMpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMjc4LUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTc2Nz1zdGF0aWMgYm9vbCBpc19icGZfYXJlbmFfa2Z1bmModTMyIGJ0Zl9pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc2OS1cXHRyZXR1cm4gYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfYWxsb2NfcGFnZXNdIHx8XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNzcwOlxcdCAgICAgICBidGZfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9hcmVuYV9mcmVlX3BhZ2VzXSB8fFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTc3MS1cXHQgICAgICAgYnRmX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfcmVzZXJ2ZV9wYWdlc107XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk3MTE9c3RhdGljIGludCBzcGVjaWFsaXplX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYywgaW50IGluc25faWR4KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzUxLVxcdFxcdFxcdGFkZHIgPSAodW5zaWduZWQgbG9uZylicGZfYXJlbmFfYWxsb2NfcGFnZXNfbm9uX3NsZWVwYWJsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTI6XFx0fSBlbHNlIGlmIChmdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfYXJlbmFfZnJlZV9wYWdlc10pIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk3NTMtXFx0XFx0aWYgKGVudi1cXHUwMDNlaW5zbl9hdXhfZGF0YVtpbnNuX2lkeF0ubm9uX3NsZWVwYWJsZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk3NTQ6XFx0XFx0XFx0YWRkciA9ICh1bnNpZ25lZCBsb25nKWJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5NzU1LVxcdH1cXG4tLVxcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oPTgzPXZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICphZGRyLCBfX3UzMiBwYWdlX2NudCxcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5icGYuaC04NC1cXHRcXHRcXHRcXHQgICAgaW50IG5vZGVfaWQsIF9fdTY0IGZsYWdzKSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9icGZfYXJlbmFfY29tbW9uLmJwZi5oOjg1OnZvaWQgYnBmX2FyZW5hX2ZyZWVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKnB0ciwgX191MzIgcGFnZV9jbnQpIF9fa3N5bSBfX3dlYWs7XFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uYnBmLmgtODYtaW50IGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCBfX2FyZW5hICpwdHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbi0tXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2JwZl9hcmVuYV9jb21tb24uaD0yNj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxuLS1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMwLX1cXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oOjMxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvYnBmX2FyZW5hX2NvbW1vbi5oLTMyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfYWxsb2MuaD01NT1zdGF0aWMgaW5saW5lIHZvaWQgYnBmX2ZyZWUodm9pZCBfX2FyZW5hICphZGRyKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9hbGxvYy5oLTYxLVxcdGlmICgtLSgqb2JqX2NudCkgPT0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmg6NjI6XFx0XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBhZGRyLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2FsbG9jLmgtNjMtfVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD00OT1pbnQgYnBmX2FyZW5hX3Jlc2VydmVfcGFnZXModm9pZCAqbWFwLCB2b2lkIF9fYXJlbmEgKmFkZHIsIF9fdTMyIHBhZ2VfY250KSBfX2tzeW0gX193ZWFrO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9icGZfYXJlbmFfY29tbW9uLmg6NTA6dm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudCkgX19rc3ltIF9fd2VhaztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTUxLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2JwZl9hcmVuYV9jb21tb24uaD02Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19hcmVuYSogYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKHZvaWQgKm1hcCwgdm9pZCAqYWRkciwgX191MzIgcGFnZV9jbnQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcwLX1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oOjcxOnN0YXRpYyBpbmxpbmUgdm9pZCBicGZfYXJlbmFfZnJlZV9wYWdlcyh2b2lkICptYXAsIHZvaWQgX19hcmVuYSAqcHRyLCBfX3UzMiBwYWdlX2NudClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYnBmX2FyZW5hX2NvbW1vbi5oLTcyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9hdG9taWNzLmM9MjE4PWludCB1YWYoY29uc3Qgdm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYy0yMjgtXFx0cGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2F0b21pY3MuYzoyMjk6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfYXRvbWljcy5jLTIzMC1cXHR1YWZfcmVjb3ZlcnlfZmFpbHMgPSAyNDtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTMwPWludCBiYXNpY19hbGxvYzFfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OS1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo1MDpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTEtXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9NjE9aW50IGJhc2ljX2FsbG9jMSh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy04MC1cXHRcXHRyZXR1cm4gNTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo4MTpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMiwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtODItXFx0aWYgKCpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTAwPWludCBmcmVlX3NjYWxhcl9iZWxvd19hcmVuYSh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xMTctXFx0YXNtIHZvbGF0aWxlKFxcXCJcXFwiIDogXFxcIityXFxcIihiYWRfYWRkcikpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjExODpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKiliYWRfYWRkciwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTE5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTI5PWludCBiYXNpY19hbGxvYzJfbm9zbGVlcCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTEtXFx0XFx0cmV0dXJuIDQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6MTUyOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXBhZ2UxLCAyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy0xNTMtXFx0aWYgKCpwYWdlMSAhPSAwIFxcdTAwMjZcXHUwMDI2ICpwYWdlMSAhPSAxKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM9MTY3PWludCBiYXNpY19hbGxvYzIodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTg5LVxcdFxcdHJldHVybiA0O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jOjE5MDpcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwYWdlMSwgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtMTkxLVxcdGlmICgqcGFnZTEgIT0gMClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jPTQ4MD1pbnQgYXJlbmFfa2Z1bmNzX3VuZGVyX2JwZl9sb2NrKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jLTQ5NS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYzo0OTY6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlLCAxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy00OTctXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYy01MDMtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmM6NTA0OlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgcGFnZSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMtNTA1LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjI9aW50IGJpZ19hbGxvYzEodm9pZCAqY3R4KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtNTctXFx0XFx0cmV0dXJuIDU7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6NTg6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopcGFnZTEsIDEpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTU5LVxcdGlmICgqcGFnZTIgIT0gMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jPTE0OD1pbnQgZnJlZV9yZXNlcnZlZCh2b2lkICpjdHgpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNjctXFx0ICogUmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCBwYWdlcyBzaG91bGQgYmUgaW50ZXJjaGFuZ2VhYmxlIGZvclxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjE2ODpcXHQgKiBicGZfYXJlbmFfZnJlZV9wYWdlcygpLiBGcmVlIGEgcmVzZXJ2ZWQgYW5kIGFuIGFsbG9jYXRlZFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTE2OS1cXHQgKiBwYWdlIHdpdGggYSBzaW5nbGUgY2FsbC5cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYy0xNzAtXFx0ICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM6MTcxOlxcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFxcdTAwMjZhcmVuYSwgYWRkciArIF9fUEFHRV9TSVpFICwgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMTcyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9MjIwPWludCBiaWdfYWxsb2MyKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTIyNy1cXHRcXHRyZXR1cm4gMTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzoyMjg6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopYmFzZSwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjI5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjM4LVxcdFxcdFxcdHJldHVybiAzO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjIzOTpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjQwLVxcdFxcdHBhZ2VbaV0gPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjUzLVxcdFxcdFxcdHJldHVybiA1O1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jOjI1NDpcXHRcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKilwZywgMik7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMjU1LVxcdFxcdHBhZ2VbaV0gPSBOVUxMO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmM9Mjg5PWludCBiaWdfYWxsb2MzKHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYV9sYXJnZS5jLTMxMC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmFfbGFyZ2UuYzozMTE6XFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXFx1MDAyNmFyZW5hLCBwYWdlcywgMjA1MSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hX2xhcmdlLmMtMzEyLSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNDowMjozOS4wODkyNTk0MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjM1Nzg5ODA2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZDpcblxuKipGb2N1c2luZyBvbiBCUEYgQXJlbmEgRnJlZWluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGZyZWVkIHdpdGhpbiB0aGUgQlBGIGFyZW5hLiBTcGVjaWZpY2FsbHksIEkndmUgaWRlbnRpZmllZCB0aGF0IGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYCBhcmUgdGhlIGNydWNpYWwga2Z1bmNzIOKAkyB0aGV5J3JlIHRoZSB3cmFwcGVycyBmb3IgdGhlIGBhcmVuYV9mcmVlX3BhZ2VzYCBmdW5jdGlvbmFsaXR5IHRoYXQncyByZWxldmFudCBoZXJlLlxuXG5HaXZlbiB0aGF0LCBteSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbGwgY29uZmlndXJlIGBGb2N1c1N5bWJvbHNgIHRvIGluY2x1ZGUgYm90aCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGFuZCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZWAuIFRoZXNlIGFyZSB0aGUgdGFyZ2V0cyBJJ20gaW50ZXJlc3RlZCBpbiBleGFtaW5pbmcgaW4gZGV0YWlsLiBBbmQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbnRleHQsIEknbGwgc2V0IGBFbmFibGVDb25maWdzYCB0byBpbmNsdWRlIGBCUEZfU1lTQ0FMTGAuXG5cbkp1c3QgYSBzYW5pdHkgY2hlY2sgbm93IC0gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgYnBmX2FyZW5hX2ZyZWVfcGFnZXNgIGlzIGluZGVlZCB0aGUga2Z1bmMgdGhhdCdzIGV4cG9zZWQgdG8gQlBGIHByb2dyYW1zLiBBIHF1aWNrIGxvb2vigKYgWWVwLCB0aGF0IGNoZWNrcyBvdXQuIEl0J3MgdGhlIHJpZ2h0IGZ1bmN0aW9uLiBHb29kLlxuXG5XaXRoIHRoYXQgY29uZmlybWF0aW9uLCBJJ20gcmVhZHkgdG8gcHJvY2VlZC4gSSdsbCBjYWxsIGBzZXQtcmVzdWx0c2AgdG8gcmVjb3JkIHRoaXMgY29uZmlndXJhdGlvbiBhbmQgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MzAsIk91dHB1dFRva2VucyI6MTQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE0OjAyOjU1LjQ0NzE1OTU2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTgzMzU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc1wiLFxuICAgIFwiYnBmX2FyZW5hX2ZyZWVfcGFnZXNfbm9uX3NsZWVwYWJsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYGFyZW5hX2ZyZWVfcGFnZXNgIHRvIHByZXZlbnQgZnJlZWluZyBwYWdlcyBiZWxvdyBgYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIEJQRiBhcmVuYSBzdWJzeXN0ZW0uIFRoZSByZWxldmFudCBrZnVuY3MgZXhwb3NlZCB0byBCUEYgcHJvZ3JhbXMgYXJlIGBicGZfYXJlbmFfZnJlZV9wYWdlc2AgYW5kIGBicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9hcmVuYV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJicGZfYXJlbmFfZnJlZV9wYWdlc19ub25fc2xlZXBhYmxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiBgYXJlbmFfZnJlZV9wYWdlc2AgdG8gcHJldmVudCBmcmVlaW5nIHBhZ2VzIGJlbG93IGBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgQlBGIGFyZW5hIHN1YnN5c3RlbS4gVGhlIHJlbGV2YW50IGtmdW5jcyBleHBvc2VkIHRvIEJQRiBwcm9ncmFtcyBhcmUgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzYCBhbmQgYGJwZl9hcmVuYV9mcmVlX3BhZ2VzX25vbl9zbGVlcGFibGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[1] Phase: Succeeded StartedAt: 2026-06-30 14:03:07 +0000 UTC FinishedAt: 2026-06-30 14:03:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 14:03:07 +0000 UTC FinishedAt: 2026-06-30 14:03:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2] Phase: Succeeded StartedAt: 2026-06-30 14:03:07 +0000 UTC FinishedAt: 2026-06-30 18:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-30 14:03:07 +0000 UTC FinishedAt: 2026-06-30 18:01:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-30 14:03:07 +0000 UTC FinishedAt: 2026-06-30 14:03:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-30 14:03:07 +0000 UTC FinishedAt: 2026-06-30 14:03:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-convert-artifact-2543024756/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-30 14:03:17 +0000 UTC FinishedAt: 2026-06-30 14:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-30 14:03:17 +0000 UTC FinishedAt: 2026-06-30 14:27:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b4fa5458-b316-4902-b4ac-565686f84b80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-convert-artifact-2543024756/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "53c8a3ea-2949-4048-928c-cb4a8d3fb582", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-2436718450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-30 14:03:17 +0000 UTC FinishedAt: 2026-06-30 14:27:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b4fa5458-b316-4902-b4ac-565686f84b80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-convert-artifact-2543024756/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "53c8a3ea-2949-4048-928c-cb4a8d3fb582", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-2436718450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-30 14:27:39 +0000 UTC FinishedAt: 2026-06-30 14:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-30 14:27:39 +0000 UTC FinishedAt: 2026-06-30 14:27:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-30 14:27:39 +0000 UTC FinishedAt: 2026-06-30 14:28:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-30 14:27:39 +0000 UTC FinishedAt: 2026-06-30 14:27:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-convert-artifact-1221483315/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-30 14:28:12 +0000 UTC FinishedAt: 2026-06-30 14:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-30 14:28:12 +0000 UTC FinishedAt: 2026-06-30 14:30:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53c8a3ea-2949-4048-928c-cb4a8d3fb582,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-2436718450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-30 14:30:26 +0000 UTC FinishedAt: 2026-06-30 14:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-30 14:30:26 +0000 UTC FinishedAt: 2026-06-30 14:30:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-30 14:30:26 +0000 UTC FinishedAt: 2026-06-30 14:55:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-30 14:30:26 +0000 UTC FinishedAt: 2026-06-30 14:55:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b4fa5458-b316-4902-b4ac-565686f84b80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-convert-artifact-1221483315/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "76c89917-d5cb-45ba-9c3e-f5b2346cb961", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-4172243943/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-30 14:30:26 +0000 UTC FinishedAt: 2026-06-30 14:55:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b4fa5458-b316-4902-b4ac-565686f84b80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-convert-artifact-1221483315/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "76c89917-d5cb-45ba-9c3e-f5b2346cb961", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-4172243943/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-30 14:55:58 +0000 UTC FinishedAt: 2026-06-30 14:55:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-30 14:55:58 +0000 UTC FinishedAt: 2026-06-30 14:55:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-30 14:55:58 +0000 UTC FinishedAt: 2026-06-30 14:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-30 14:55:58 +0000 UTC FinishedAt: 2026-06-30 14:58:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76c89917-d5cb-45ba-9c3e-f5b2346cb961,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-4172243943/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-30 14:58:42 +0000 UTC FinishedAt: 2026-06-30 18:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-30 14:58:42 +0000 UTC FinishedAt: 2026-06-30 18:01:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*53c8a3ea-2949-4048-928c-cb4a8d3fb582,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76c89917-d5cb-45ba-9c3e-f5b2346cb961,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-2436718450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-4172243943/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-30 14:58:42 +0000 UTC FinishedAt: 2026-06-30 14:59:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-30 14:58:42 +0000 UTC FinishedAt: 2026-06-30 14:59:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-convert-artifact-3634095916/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-30 14:58:42 +0000 UTC FinishedAt: 2026-06-30 14:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-30 14:58:42 +0000 UTC FinishedAt: 2026-06-30 14:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-30 14:58:42 +0000 UTC FinishedAt: 2026-06-30 14:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-30 14:59:55 +0000 UTC FinishedAt: 2026-06-30 18:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlpcdr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_arena_free_pages","bpf_arena_free_pages_non_sleepable"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"3faee628-df9a-4ed4-85ce-3d9a0966f158","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-30 14:59:55 +0000 UTC FinishedAt: 2026-06-30 18:01:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53c8a3ea-2949-4048-928c-cb4a8d3fb582,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*76c89917-d5cb-45ba-9c3e-f5b2346cb961,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-2436718450/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-build-action-4172243943/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlpcdr/series-workflowlpcdr-convert-artifact-3634095916/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}