Name: series-workflowfjcst Phase: Succeeded StartedAt: 2026-09-05 01:46:54 +0000 UTC FinishedAt: 2026-09-05 05:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[0] Phase: Succeeded StartedAt: 2026-09-05 01:46:54 +0000 UTC FinishedAt: 2026-09-05 01:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 01:46:54 +0000 UTC FinishedAt: 2026-09-05 01:50:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7042c8c193e5d634198b7c766bb3a01c8e3ee0e2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7042c8c193e5d634198b7c766bb3a01c8e3ee0e2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS", "IPV6" ], "series_id": "c855f1c8-c0b9-4963-a39b-7878e6e5ddb2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netcons_netpoll_setup", "netpoll_parse_ip_addr", "local_ip_store", "remote_ip_store", "local_ip_show", "remote_ip_show", "netpoll_send_udp", "netcons_take_ipv4", "netcons_take_ipv6" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9wYXJzZV9pcF9hZGRyJiMzNDssCiAgICAmIzM0O2xvY2FsX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtsb2NhbF9pcF9zaG93JiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zaG93JiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjQmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgSVAgYWRkcmVzcyBoYW5kbGluZyBpbiBuZXRjb25zb2xlIGJ5IGludHJvZHVjaW5nIGBzdHJ1Y3QgaW5ldF9hZGRyYCB3aXRoIGFuIGV4cGxpY2l0IGBmYW1pbHlgIGZpZWxkIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIHNlcGFyYXRlIGJvb2xlYW4gZmxhZyAoYGlwdjZgKSBhbmQgY2hlY2tpbmcgd2hldGhlciBhbiBhZGRyZXNzIGlzIHplcm8gdG8gZGV0ZXJtaW5lIGlmIGl0IHdhcyB1bnNldC5cblxuQW5hbHlzaXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzazpcbjEuIE9iamVjdCBhbGxvY2F0aW9uOiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGApIGFyZSB6ZXJvLWluaXRpYWxpemVkIChgZmFtaWx5YCBkZWZhdWx0cyB0byBgMGAgLyBgQUZfVU5TUEVDYCkuXG4yLiBQYXJzaW5nIGFuZCB1cGRhdGVzOiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBwb3B1bGF0ZXMgYGlwYCAodmlhIGBpbjRfcHRvbmApIG9yIGBpbjZgICh2aWEgYGluNl9wdG9uYCkgYW5kIHNldHMgYGZhbWlseWAgYWNjb3JkaW5nbHkgKGBBRl9JTkVUYCBvciBgQUZfSU5FVDZgKS4gV2hlbiBhdXRvLWRlcml2ZWQsIGBuZXRjb25zX3Rha2VfaXB2NGAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NmAgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYWRkcmVzcyBhbmQgc2V0IGBmYW1pbHlgLlxuMy4gVXNlci1zcGFjZSBvdXRwdXQgLyBpbmZvIGxlYWtzOiBTeXNmcyBhdHRyaWJ1dGVzIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YCBlbWl0IGZvcm1hdHRlZCBzdHJpbmdzIGJhc2VkIG9uIHRoZSB2ZXJpZmllZCBgZmFtaWx5YCBkaXNjcmltaW5hdG9yIGFuZCByZWFkIG9ubHkgdGhlIGZ1bGx5IGluaXRpYWxpemVkIGFkZHJlc3MgdW5pb24gZmllbGRzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBsZWFrZWQgdG8gdXNlcnNwYWNlLlxuNC4gTmV0d29yayBwYWNrZXQgY29uc3RydWN0aW9uOiBQYWNrZXQgaGVhZGVycyBhbmQgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGJyYW5jaCBvbiBgbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseWAgYW5kIHJlYWQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYGluNmAgb3IgYGlwYCBmaWVsZHMuXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI5YTk2NTVlY2UyNWQ5YTNlMmVhYjk4ODlhZGU1MjQxNDEwYjczMjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAxOjQ4OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxuaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNjk0YmNhNDgwM2Q1MCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5AQCAtMTQxLDYgJiM0MzsxNDEsMTEgQEAgVGhlIGludGVyZmFjZSBleHBvc2VzIHRoZXNlIHBhcmFtZXRlcnMgb2YgYSBuZXRjb25zb2xlIHRhcmdldCB0byB1c2Vyc3BhY2U6XG4gXHR0cmFuc21pdF9lcnJvcnNcdE51bWJlciBvZiBwYWNrZXQgc2VuZCBlcnJvcnNcdFx0KHJlYWQtb25seSlcbiBcdD09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09XG4gXG4mIzQzO2xvY2FsX2lwIGlzIG9wdGlvbmFsOiBpZiBpdCBpcyBsZWZ0IHVuc2V0LCBuZXRjb25zb2xlIGRlcml2ZXMgYSBzb3VyY2VcbiYjNDM7YWRkcmVzcyBmcm9tIHRoZSBlZ3Jlc3MgaW50ZXJmYWNlIHdoZW4gdGhlIHRhcmdldCBpcyBlbmFibGVkLiBXcml0aW5nIGFueVxuJiM0Mzt2YWx1ZSB0byBpdCwgaW5jbHVkaW5nIDAuMC4wLjAsIHVzZXMgdGhhdCB2YWx1ZSB2ZXJiYXRpbSBhbmQgZGlzYWJsZXMgdGhlXG4mIzQzO2F1dG9tYXRpYyBzZWxlY3Rpb24uXG4mIzQzO1xuIFRoZSBcJiMzNDtlbmFibGVkXCYjMzQ7IGF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIG9mXG4gYSB0YXJnZXQgY2FuIGJlIHVwZGF0ZWQgb3Igbm90IC0tIHlvdSBjYW4gbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIG9mIG9ubHlcbiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmIFwmIzM0O2VuYWJsZWRcJiMzNDsgaXMgMCkuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCBiMzU4ZTVjMzY3MzUxLi4yNjcyNTRmMDQ2ZGU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xNTEsNiAmIzQzOzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgaW5ldF9hZGRyIHtcbiYjNDM7XHQvKiBBZGRyZXNzIGZhbWlseTogQUZfVU5TUEVDIHdoZW4gdW5zZXQsIGVsc2UgQUZfSU5FVCBvciBBRl9JTkVUNiAqL1xuJiM0MztcdHU4XHRcdFx0ZmFtaWx5O1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdF9fYmUzMlx0XHRpcDtcbiYjNDM7XHRcdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuJiM0MztcdH07XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4gICogQHJjdTpcdFVzZWQgdG8gZnJlZSB0aGUgcGF5bG9hZCBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbkBAIC0xOTUsNyAmIzQzOzIwNCw2IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbiAgKlx0XHRsb2NhbF9tYWNcdChyZWFkLW9ubHkpXG4gICogQGxvY2FsX2lwOlx0U291cmNlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9pcDpcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4tICogQGlwdjY6XHRXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS5cbiAgKiBAbG9jYWxfcG9ydDpcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfbWFjOlx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbkBAIC0yMjUsOCAmIzQzOzIzMyw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4gXHRib29sXHRcdFx0ZXh0ZW5kZWQ7XG4gXHRib29sXHRcdFx0cmVsZWFzZTtcbiBcdHN0cnVjdCBuZXRwb2xsXHRcdG5wO1xuLVx0dW5pb24gaW5ldF9hZGRyXHRcdGxvY2FsX2lwLCByZW1vdGVfaXA7XG4tXHRib29sXHRcdFx0aXB2NjtcbiYjNDM7XHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICYjNDM7MSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcbkBAIC00MjgsNiAmIzQzOzQzNSw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdC8qIEdvdCB0aGUgSVAsIGxldCYjMzk7cyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdFx0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDY7XG4gXHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTQ2OSwyOCAmIzQzOzQ3NywxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHR9XG4gXG4gXHRudC1cdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cdTAwM2VpZmFfbG9jYWw7XG4mIzQzO1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQICVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKlxuLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtXHUwMDNlbG9jYWxfaXAgdW5zZXQsIHNvIHRoYXRcbi0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuLSAqXG4tICogbnQtXHUwMDNlbG9jYWxfaXAgaXMgYSB1bmlvbiBvZiBfX2JlMzIgKElQdjQpIGFuZCBzdHJ1Y3QgaW42X2FkZHIgKElQdjYpLFxuLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLFxuLSAqIElQdjQtbWFwcGVkIDo6ZmZmZjphLmIuYy5kKSBtdXN0IG5vdCBiZSB0ZXN0ZWQgdmlhIHRoZSBJUHY0IGFybSDigJRcbi0gKiBkb2luZyBzbyB3b3VsZCBtaXNjbGFzc2lmeSBhIGNhbGxlci1zdXBwbGllZCBhZGRyZXNzIGFzIHVuc2V0IGFuZFxuLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLlxuLSAqL1xuLXN0YXRpYyBib29sIG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQoY29uc3Qgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi17XG4tXHRpZiAobnQtXHUwMDNlaXB2Nilcbi1cdFx0cmV0dXJuIGlwdjZfYWRkcl9hbnkoXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbi1cdHJldHVybiAhbnQtXHUwMDNlbG9jYWxfaXAuaXA7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucztcbkBAIC01MDAsNiAmIzQzOzQ5MiwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbiYjNDM7XHRcdG5wX2VycihucCwgXCYjMzQ7cmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRURFU1RBRERSUkVRO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG4mIzQzO1x0XHRucF9lcnIobnAsIFwmIzM0O2xvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuQEAgLTUzNiwxNiAmIzQzOzUzOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRydG5sX2xvY2soKTtcbiBcdH1cbiBcbi1cdGlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkge1xuLVx0XHRpZiAoIW50LVx1MDAzZWlwdjYpIHtcbi1cdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG4mIzQzO1x0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gcHV0O1xuIFx0XHRpcF9vdmVyd3JpdHRlbiA9IHRydWU7XG4gXHR9XG4gXG5AQCAtNzI3LDI0ICYjNDM7NzI3LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIHBvcnQgJWRcXG5cJiMzNDssIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4mIzQzO1x0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUCB1bnNldFxcblwmIzM0Oyk7XG4mIzQzO1x0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIGV0aGVybmV0IGFkZHJlc3MgJiMzOTslcE0mIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuJiM0MztcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQIHVuc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlIGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4tLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXG4tICogcG9wdWxhdGVkLCAxIGlmIElQdjYgaXMgcG9wdWxhdGVkLCBhbmQgLTEgdXBvbiBmYWlsdXJlLlxuJiM0MzsvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzXG4mIzQzOyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4mIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcbiB7XG4gXHRjb25zdCBjaGFyICplbmQgPSBOVUxMO1xuIFx0aW50IGxlbjtcbkBAIC03NTYsMTQgJiM0Mzs3NjAsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4gXHRpZiAoc3RyW2xlbiAtIDFdID09ICYjMzk7XFxuJiMzOTspXG4gXHRcdGxlbiAtPSAxO1xuIFxuLVx0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XFxuJiMzOTspKVxuJiM0MztcdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWlwLCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpIHtcbiYjNDM7XHRcdGFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiBcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XFxuJiMzOTspKVxuLVx0XHRyZXR1cm4gMTtcbiYjNDM7XHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xcbiYjMzk7KSkge1xuJiM0MztcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODY4LDIwICYjNDM7ODc2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuJiM0MztcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuJiM0MztcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTEyMjYsNyAmIzQzOzEyMzgsNiBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuIFx0aWYgKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpIHtcbkBAIC0xMjM1LDEwICYjNDM7MTI0Niw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4mIzQzO1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTI1MSw3ICYjNDM7MTI2MCw2IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuIFx0aWYgKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpIHtcbkBAIC0xMjYwLDEwICYjNDM7MTI2OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbiYjNDM7XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMjA3Miw3ICYjNDM7MjA3OCw3IEBAIHN0YXRpYyB2b2lkIG5ldHBvbGxfdWRwX2NoZWNrc3VtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXG4gXHQvKiBjaGVjayBuZWVkcyB0byBiZSBzZXQsIHNpbmNlIGl0IHdpbGwgYmUgY29uc3VtZWQgaW4gY3N1bV9wYXJ0aWFsICovXG4gXHR1ZHBoLVx1MDAzZWNoZWNrID0gMDtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsXG5AQCAtMjExMyw3ICYjNDM7MjExOSw3IEBAIHN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgbnAtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFx0ZWxzZVxuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTtcbkBAIC0yMTgyLDcgJiM0MzsyMTg4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuIFxuIFx0dWRwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0aXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIFx0ZWxzZVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuQEAgLTIxOTgsNyAmIzQzOzIyMDQsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuIFx0c2tiX3B1dChza2IsIGxlbik7XG4gXG4gXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTtcbkBAIC0yNTI3LDEwICYjNDM7MjUzMyw4IEBAIF9fcmVsZWFzZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbiBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuLVx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbi1cdGludCBpcHY2O1xuIFxuIFx0aWYgKCpjdXIgIT0gJiMzOTtAJiMzOTspIHtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5O0AmIzM5Oyk7XG5AQCAtMjU0NCwxNiAmIzQzOzI1NDgsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGN1ciYjNDM7JiM0Mzs7XG4gXG4gXHRpZiAoKmN1ciAhPSAmIzM5Oy8mIzM5Oykge1xuLVx0XHRpcHZlcnNpb25fc2V0ID0gdHJ1ZTtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5Oy8mIzM5Oyk7XG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRcdGlmIChpcHY2IFx1MDAzYyAwKVxuJiM0MztcdFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdFx0ZWxzZVxuLVx0XHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0XHRjdXIgPSBkZWxpbTtcbiBcdH1cbiBcdGN1ciYjNDM7JiM0Mzs7XG5AQCAtMjU5NSwxMyAmIzQzOzI1OTUsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGlmICghZGVsaW0pXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0KmRlbGltID0gMDtcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgXHUwMDNjIDApXG4mIzQzO1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0ZWxzZSBpZiAoaXB2ZXJzaW9uX3NldCBcdTAwMjZcdTAwMjYgbnQtXHUwMDNlaXB2NiAhPSAoYm9vbClpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlXG4tXHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0Y3VyID0gZGVsaW0gJiM0MzsgMTtcbiBcbiBcdGlmICgqY3VyICE9IDApIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG5pbmRleCAxYzZiMWVlYzVlZmQ2Li5lYzA4MjFhNWIwMmRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG5AQCAtMTYsMTEgJiM0MzsxNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gXG4tdW5pb24gaW5ldF9hZGRyIHtcbi1cdF9fYmUzMlx0XHRpcDtcbi1cdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuLX07XG4tXG4gc3RydWN0IG5ldHBvbGwge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9wYXJzZV9pcF9hZGRyJiMzNDssCiAgICAmIzM0O2xvY2FsX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtsb2NhbF9pcF9zaG93JiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zaG93JiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjQmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5YTk2NTVlY2UyNWQ5YTNlMmVhYjk4ODlhZGU1MjQxNDEwYjczMjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDAxOjQ4OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0CmluZGV4IDRhYjVkN2IwNWNmMTAuLjY5NGJjYTQ4MDNkNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QKQEAgLTE0MSw2ICYjNDM7MTQxLDExIEBAIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyB0aGVzZSBwYXJhbWV0ZXJzIG9mIGEgbmV0Y29uc29sZSB0YXJnZXQgdG8gdXNlcnNwYWNlOgogCXRyYW5zbWl0X2Vycm9ycwlOdW1iZXIgb2YgcGFja2V0IHNlbmQgZXJyb3JzCQkocmVhZC1vbmx5KQogCT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09CiAKJiM0Mztsb2NhbF9pcCBpcyBvcHRpb25hbDogaWYgaXQgaXMgbGVmdCB1bnNldCwgbmV0Y29uc29sZSBkZXJpdmVzIGEgc291cmNlCiYjNDM7YWRkcmVzcyBmcm9tIHRoZSBlZ3Jlc3MgaW50ZXJmYWNlIHdoZW4gdGhlIHRhcmdldCBpcyBlbmFibGVkLiBXcml0aW5nIGFueQomIzQzO3ZhbHVlIHRvIGl0LCBpbmNsdWRpbmcgMC4wLjAuMCwgdXNlcyB0aGF0IHZhbHVlIHZlcmJhdGltIGFuZCBkaXNhYmxlcyB0aGUKJiM0MzthdXRvbWF0aWMgc2VsZWN0aW9uLgomIzQzOwogVGhlICYjMzQ7ZW5hYmxlZCYjMzQ7IGF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIG9mCiBhIHRhcmdldCBjYW4gYmUgdXBkYXRlZCBvciBub3QgLS0geW91IGNhbiBtb2RpZnkgdGhlIHBhcmFtZXRlcnMgb2Ygb25seQogZGlzYWJsZWQgdGFyZ2V0cyAoaS5lLiBpZiAmIzM0O2VuYWJsZWQmIzM0OyBpcyAwKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCBiMzU4ZTVjMzY3MzUxLi4yNjcyNTRmMDQ2ZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC0xNTEsNiAmIzQzOzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAJU1RBVEVfREVBQ1RJVkFURUQsCiB9OwogCiYjNDM7c3RydWN0IGluZXRfYWRkciB7CiYjNDM7CS8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovCiYjNDM7CXU4CQkJZmFtaWx5OwomIzQzOwl1bmlvbiB7CiYjNDM7CQlfX2JlMzIJCWlwOwomIzQzOwkJc3RydWN0IGluNl9hZGRyCWluNjsKJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAtIEZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkIG9mIGEgdGFyZ2V0LgogICogQHJjdToJVXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgpAQCAtMTk1LDcgJiM0MzsyMDQsNiBAQCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7CiAgKgkJbG9jYWxfbWFjCShyZWFkLW9ubHkpCiAgKiBAbG9jYWxfaXA6CVNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9pcDoJRGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KLSAqIEBpcHY2OglXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS4KICAqIEBsb2NhbF9wb3J0OglTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9tYWM6CURlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCkBAIC0yMjUsOCAmIzQzOzIzMyw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAJYm9vbAkJCWV4dGVuZGVkOwogCWJvb2wJCQlyZWxlYXNlOwogCXN0cnVjdCBuZXRwb2xsCQlucDsKLQl1bmlvbiBpbmV0X2FkZHIJCWxvY2FsX2lwLCByZW1vdGVfaXA7Ci0JYm9vbAkJCWlwdjY7CiYjNDM7CXN0cnVjdCBpbmV0X2FkZHIJbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYJCQlsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKIAl1OAkJCXJlbW90ZV9tYWNbRVRIX0FMRU5dOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzCkBAIC00MjgsNiAmIzQzOzQzNSw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQljb250aW51ZTsKIAkJCS8qIEdvdCB0aGUgSVAsIGxldCYjMzk7cyByZXR1cm4gKi8KIAkJCW50LSZndDtsb2NhbF9pcC5pbjYgPSBpZnAtJmd0O2FkZHI7CiYjNDM7CQkJbnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2OwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC00NjksMjggJiM0Mzs0NzcsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCX0KIAogCW50LSZndDtsb2NhbF9pcC5pcCA9IGlmYS0mZ3Q7aWZhX2xvY2FsOwomIzQzOwludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDsKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtJmd0O2xvY2FsX2lwIHVuc2V0LCBzbyB0aGF0Ci0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLgotICoKLSAqIG50LSZndDtsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksCi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6MiwKLSAqIElQdjQtbWFwcGVkIDo6ZmZmZjphLmIuYy5kKSBtdXN0IG5vdCBiZSB0ZXN0ZWQgdmlhIHRoZSBJUHY0IGFybSDigJQKLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kCi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy4KLSAqLwotc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQotewotCWlmIChudC0mZ3Q7aXB2NikKLQkJcmV0dXJuIGlwdjZfYWRkcl9hbnkoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKLQlyZXR1cm4gIW50LSZndDtsb2NhbF9pcC5pcDsKLX0KLQogc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LSZndDtuc3Byb3h5LSZndDtuZXRfbnM7CkBAIC01MDAsNiAmIzQzOzQ5MiwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCWJvb2wgaXBfb3ZlcndyaXR0ZW4gPSBmYWxzZTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKJiM0MzsJCW5wX2VycihucCwgJiMzNDtyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRURFU1RBRERSUkVROwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KSB7CiYjNDM7CQlucF9lcnIobnAsICYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJcnRubF9sb2NrKCk7CiAJaWYgKG5wLSZndDtkZXZfbmFtZVswXSkKIAkJbmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtJmd0O2Rldl9uYW1lKTsKQEAgLTUzNiwxNiAmIzQzOzUzOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCQlydG5sX2xvY2soKTsKIAl9CiAKLQlpZiAobmV0Y29uc19sb2NhbF9pcF91bnNldChudCkpIHsKLQkJaWYgKCFudC0mZ3Q7aXB2NikgewotCQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIHB1dDsKLQkJfSBlbHNlIHsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7CiYjNDM7CQlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gcHV0OwotCQl9CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIHB1dDsKIAkJaXBfb3ZlcndyaXR0ZW4gPSB0cnVlOwogCX0KIApAQCAtNzI3LDI0ICYjNDM7NzI3LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7bG9jYWxfcG9ydCk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpCiYjNDM7CQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQIHVuc2V0XG4mIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAJbnBfaW5mbyhucCwgJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X25hbWUpOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9tYWMpOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7cmVtb3RlX3BvcnQpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQIHVuc2V0XG4mIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG50LSZndDtyZW1vdGVfbWFjKTsKIH0KIAotLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzCi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiYjNDM7LyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2VzcwomIzQzOyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKQomIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcikKIHsKIAljb25zdCBjaGFyICplbmQgPSBOVUxMOwogCWludCBsZW47CkBAIC03NTYsMTQgJiM0Mzs3NjAsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiAJaWYgKHN0cltsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCiAJCWxlbiAtPSAxOwogCi0JaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKJiM0MzsJaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aXAsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJmFtcDsmYW1wOwotCSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgJmFtcDtlbmQpICZndDsgMCAmYW1wOyZhbXA7Ci0JICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpCi0JCXJldHVybiAxOwomIzQzOwkgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpbjYsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCXJldHVybiAtMTsKIH0KQEAgLTg2OCwyMCAmIzQzOzg3NiwyNCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDtcbiYjMzQ7KTsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmluNik7CiAJZWxzZQotCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaXApOwogfQogCiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCi0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0O1xuJiMzNDspOwomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKLQkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXApOwomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaXApOwogfQogCiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKQEAgLTEyMjYsNyAmIzQzOzEyMzgsNiBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaXB2NjsKIAogCWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7CkBAIC0xMjM1LDEwICYjNDM7MTI0Niw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKLQlpZiAoaXB2NiA9PSAtMSkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O2xvY2FsX2lwKSAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKLQludC0mZ3Q7aXB2NiA9ICEhaXB2NjsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTEyNTEsNyAmIzQzOzEyNjAsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7Ci0JaW50IGlwdjY7CiAKIAlkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpOwogCWlmIChudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkgewpAQCAtMTI2MCwxMCAmIzQzOzEyNjgsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKLQlpZiAoaXB2NiA9PSAtMSkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCkgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JbnQtJmd0O2lwdjYgPSAhIWlwdjY7CiAKIAlyZXQgPSBjb3VudDsKIG91dF91bmxvY2s6CkBAIC0yMDcyLDcgJiM0MzsyMDc4LDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAogCS8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi8KIAl1ZHBoLSZndDtjaGVjayA9IDA7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXVkcGgtJmd0O2NoZWNrID0gY3N1bV9pcHY2X21hZ2ljKCZhbXA7bnQtJmd0O2xvY2FsX2lwLmluNiwKIAkJCQkJICAgICAgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmluNiwKIAkJCQkJICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsCkBAIC0yMTEzLDcgJiM0MzsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCWV0aGVyX2FkZHJfY29weShldGgtJmd0O2hfc291cmNlLCBucC0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9kZXN0LCBudC0mZ3Q7cmVtb3RlX21hYyk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCWV0aC0mZ3Q7aF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwogCWVsc2UKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtMjE4Miw3ICYjNDM7MjE4OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAogCXVkcF9sZW4gPSBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiAJZWxzZQogCQlpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwpAQCAtMjE5OCw3ICYjNDM7MjIwNCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJc2tiX3B1dChza2IsIGxlbik7CiAKIAlwdXNoX3VkcChudCwgc2tiLCBsZW4pOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTsKIAllbHNlCiAJCXB1c2hfaXB2NChudCwgc2tiLCBsZW4pOwpAQCAtMjUyNywxMCAmIzQzOzI1MzMsOCBAQCBfX3JlbGVhc2VzKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaykKIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiB7CiAJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7Ci0JYm9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7CiAJY2hhciAqY3VyID0gb3B0OwogCWNoYXIgKmRlbGltOwotCWludCBpcHY2OwogCiAJaWYgKCpjdXIgIT0gJiMzOTtAJiMzOTspIHsKIAkJZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5O0AmIzM5Oyk7CkBAIC0yNTQ0LDE2ICYjNDM7MjU0OCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogCWN1ciYjNDM7JiM0Mzs7CiAKIAlpZiAoKmN1ciAhPSAmIzM5Oy8mIzM5OykgewotCQlpcHZlcnNpb25fc2V0ID0gdHJ1ZTsKIAkJZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5Oy8mIzM5Oyk7CiAJCWlmICghZGVsaW0pCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkJKmRlbGltID0gMDsKLQkJaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKLQkJaWYgKGlwdjYgJmx0OyAwKQomIzQzOwkJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O2xvY2FsX2lwKSAmbHQ7IDApCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJZWxzZQotCQkJbnQtJmd0O2lwdjYgPSAoYm9vbClpcHY2OwogCQljdXIgPSBkZWxpbTsKIAl9CiAJY3VyJiM0MzsmIzQzOzsKQEAgLTI1OTUsMTMgJiM0MzsyNTk1LDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiAJaWYgKCFkZWxpbSkKIAkJZ290byBwYXJzZV9mYWlsZWQ7CiAJKmRlbGltID0gMDsKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKLQlpZiAoaXB2NiAmbHQ7IDApCiYjNDM7CWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtyZW1vdGVfaXApICZsdDsgMCkKIAkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JZWxzZSBpZiAoaXB2ZXJzaW9uX3NldCAmYW1wOyZhbXA7IG50LSZndDtpcHY2ICE9IChib29sKWlwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQllbHNlCi0JCW50LSZndDtpcHY2ID0gKGJvb2wpaXB2NjsKIAljdXIgPSBkZWxpbSAmIzQzOyAxOwogCiAJaWYgKCpjdXIgIT0gMCkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCAxYzZiMWVlYzVlZmQ2Li5lYzA4MjFhNWIwMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtMTYsMTEgJiM0MzsxNiw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91ZHAuaCZndDsKIAotdW5pb24gaW5ldF9hZGRyIHsKLQlfX2JlMzIJCWlwOwotCXN0cnVjdCBpbjZfYWRkcglpbjY7Ci19OwotCiBzdHJ1Y3QgbmV0cG9sbCB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU2NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IGJhc2VkIG9uIHRoZSBjaGFuZ2VkIGZpbGVzOiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCwgYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYCwgYW5kIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RgLiBUaGlzIHNjcmVhbXMgYW4gYXJjaGl0ZWN0dXJhbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgc3Vic3lzdGVtLgoKUmlnaHQsIHNvIGl0JiMzOTtzIHJlZmFjdG9yaW5nIGhvdyBhZGRyZXNzZXMgYXJlIGhhbmRsZWQuIFJlcGxhY2luZyB0aGF0IG9sZCBgdW5pb24gaW5ldF9hZGRyYCBhbmQgdGhlIGBib29sIGlwdjZgIHdpdGggYSBgc3RydWN0IGluZXRfYWRkcmAgaXMgYSBzbWFydCBtb3ZlLiBJdCBzaW1wbGlmaWVzIHRoaW5ncyBhbmQgbWFrZXMgdGhlIGNvZGUgY2xlYW5lci4gVGhhdCB1bmlvbiBpbnNpZGUgdGhlIHN0cnVjdCwgd2l0aCB0aGUgYHU4IGZhbWlseWAgdG8gZGlzY3JpbWluYXRlIGJldHdlZW4gSVB2NCBhbmQgSVB2NiwgbWFrZXMgcGVyZmVjdCBzZW5zZSBhbmQgSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGlzIGltcGxlbWVudGVkLgoKU28sIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgZ29uZSB0aHJvdWdoIGFuZCB1cGRhdGVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IGBpbmV0X2FkZHJgIHN0cnVjdHVyZTogYG5ldGNvbnNfdGFrZV9pcHY2YCwgYG5ldGNvbnNfdGFrZV9pcHY0YCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcmAsIGFsbCB0aGUgcGFyc2luZyBhbmQgZGlzcGxheSBmdW5jdGlvbnMsIGNoZWNrc3VtIGNhbGN1bGF0aW9ucywgYW5kIHNlbmQgcm91dGluZXMuIFRob3JvdWdoLCBhcyBpdCBzaG91bGQgYmUuIFRoZSByZWZhY3RvciBvZiBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBzZWVtcyBpbXBvcnRhbnQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IHRob3NlIGFkZGVkIGNoZWNrcyBjYXJlZnVsbHkuIFRob3NlIHJldHVybiBjb2RlcyBhcmUgY3J1Y2lhbCBmb3IgZXJyb3IgaGFuZGxpbmcuIEEgbWlzc2luZyByZW1vdGUgYWRkcmVzcyBvciBhIG1pc21hdGNoIGluIElQIGZhbWlseSB3aWxsIGNhdXNlIGlzc3Vlcywgb2J2aW91c2x5LiBUaGUgYXV0b2NvbXBsZXRpb24gb2YgdGhlIGxvY2FsIElQIGJhc2VkIG9uIHRoZSByZW1vdGUgSVAgZmFtaWx5IGlzIGEgbmljZSB0b3VjaCwgdG9vLgoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGJyZWFrIGFueSBvZiB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIElzIG5ldGNvbnNvbGUgc3RpbGwgcmVhY2hhYmxlPyBIb3cgaXMgaXQgY29uZmlndXJlZD8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjaGFuZ2VzIGltcGFjdCBpdHMgYWNjZXNzaWJpbGl0eSB0aHJvdWdoIGNvbmZpZ2ZzLCBzeXNmcywgU3lzUnEsIHRoZSBjb21tYW5kIGxpbmUsIG9yIGFueSBvdGhlciBtZWFucy4gSSBuZWVkIHRvIHJldmlldyB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBgbmV0Y29uc29sZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBuZXcgZGVwZW5kZW5jaWVzIG9yIGNoYW5nZXMgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzI4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzQ0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXHRib29sIFwmIzM0O1ByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgbmV0d29yayBjb25zb2xlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCB3aXRoaW4gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgbnVhbmNlcyBvciBwb3RlbnRpYWwgZ290Y2hhcyByZWxhdGVkIHRvIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucy4gSSByZWNhbGwgdGhlcmUgd2VyZSBzb21lIHJlY2VudCBkaXNjdXNzaW9ucyBhcm91bmQgdGhlIHVzZSBvZiBkeW5hbWljIGFsbG9jYXRpb24gdmVyc3VzIHN0YXRpYyBjb25maWd1cmF0aW9uLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjbGVhciBwaWN0dXJlLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGltcGFjdCB0aGUgbmV0d29yayBjb25zb2xlJiMzOTtzIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgZnJvbSBhIGJvb3QtdGltZSBwZXJzcGVjdGl2ZSBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3Qgb24gZmlybXdhcmUgdXNhZ2UuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzZXR0aW5ncyBJIHVsdGltYXRlbHkgcmVjb21tZW5kIHdvbiYjMzk7dCBjYXVzZSBhbnkgY29uZmxpY3RzIHdpdGggb3VyIGV4aXN0aW5nIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUgb3IgaW50cm9kdWNlIHNlY3VyaXR5IGNvbmNlcm5zLCBldmVuIGlmIHVubGlrZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI1Olx0XHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXG4gMzI2Olx0XG4gMzI3Olx0Y29uZmlnIE5FVENPTlNPTEVcbiAzMjg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbiAzMjk6XHRcdGRlcGVuZHMgb24gUFJJTlRLXG4gMzMwOlx0XHRoZWxwXG4gMzMxOlx0XHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXG4gMzMyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG4gMzM1Olx0XHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuIDMzNjpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2IFxcXG4gMzM3Olx0XHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4gMzM4Olx0XHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbiAzMzk6XHRcdGhlbHBcbiAzNDA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcbiAzNDE6XHRcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcbiAzNDI6XHRcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cbiAzNDM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM0NDpcdFxuIDM0NTpcdGNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM0NjpcdFx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuIDM0NzpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXG4gMzQ4Olx0XHRkZWZhdWx0IG5cbiAzNDk6XHRcdGhlbHBcbiAzNTA6XHRcdCAgU2V0IGV4dGVuZGVkIGxvZyBzdXBwb3J0IGZvciBuZXRjb25zb2xlIG1lc3NhZ2UuIElmIHRoaXMgb3B0aW9uIGlzXG4gMzUxOlx0XHQgIHNldCwgbG9nIG1lc3NhZ2VzIGFyZSB0cmFuc21pdHRlZCB3aXRoIGV4dGVuZGVkIG1ldGFkYXRhIGhlYWRlciBpbiBhXG4gMzUyOlx0XHQgIGZvcm1hdCBzaW1pbGFyIHRvIC9kZXYva21zZy4gIFNlZVxuIDM1MzpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzNTQ6XHRcbiAzNTU6XHRjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbiAzNTY6XHRcdGJvb2wgXCYjMzQ7UHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbiAzNTc6XHRcdGRlcGVuZHMgb24gTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbiAzNTg6XHRcdGRlZmF1bHQgblxuIDM1OTpcdFx0aGVscFxuIDM2MDpcdFx0ICBTZXQga2VybmVsIHJlbGVhc2UgdG8gYmUgcHJlcGVuZGVkIHRvIGVhY2ggbmV0Y29uc29sZSBtZXNzYWdlIGJ5XG4gMzYxOlx0XHQgIGRlZmF1bHQuIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGtlcm5lbCByZWxlYXNlIGlzIHByZXBlbmRlZCBpbnRvXG4gMzYyOlx0XHQgIHRoZSBmaXJzdCBmaWVsZCBvZiBldmVyeSBuZXRjb25zb2xlIG1lc3NhZ2UsIHNvLCB0aGUgbmV0Y29uc29sZVxuIDM2MzpcdFx0ICBzZXJ2ZXIvcGVlciBjYW4gZWFzaWx5IGlkZW50aWZ5IHdoYXQga2VybmVsIHJlbGVhc2UgaXMgbG9nZ2luZyBlYWNoXG4gMzY0Olx0XHQgIG1lc3NhZ2UuICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yXG4gMzY1Olx0XHQgIGRldGFpbHMuXG4gMzY2Olx0XG4gMzY3Olx0Y29uZmlnIE5FVFBPTExcbiAzNjg6XHRcdGRlZl9ib29sIE5FVENPTlNPTEVcbiAzNjk6XHRcbiAzNzA6XHRjb25maWcgTkVUX1BPTExfQ09OVFJPTExFUlxuIDM3MTpcdFx0ZGVmX2Jvb2wgTkVUUE9MTFxuIDM3MjpcdFxuIDM3MzpcdGNvbmZpZyBOVEJfTkVUREVWXG4gMzc0Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIEV0aGVybmV0IG92ZXIgTlRCIFRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIER5bmFtaWMgQ29uZmlndXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBORVRDT05TT0xFX0RZTkFNSUNgIGlzIHRoZSBrZXkgaGVyZS4gSXQgZW5hYmxlcyB1c2Vyc3BhY2UgdG8gZHluYW1pY2FsbHkgY3JlYXRlIGFuZCByZWNvbmZpZ3VyZSBuZXRjb25zb2xlIHRhcmdldHMgYXQgcnVudGltZSB0aHJvdWdoIHRoZSBgL3N5cy9rZXJuZWwvY29uZmlnL25ldGNvbnNvbGUvYCBpbnRlcmZhY2UsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24uIEkgc2VlIHRoYXQgdGhpcyByZWxpZXMgb24gZnVuY3Rpb25zIGxpa2UgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBsb2NhbF9pcF9zaG93YCwgYHJlbW90ZV9pcF9zaG93YCwgYW5kIGBlbmFibGVkX3N0b3JlYCB0byBpbnRlcmFjdCB3aXRoIG5ldGNvbnNvbGUgY29uZmlndXJhdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBzZXQgdXAgd2l0aCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYC4gQW5kLCBvZiBjb3Vyc2UsIHdoZW4gdGhlcmUmIzM5O3MgYWN0dWFsbHkgbG9nZ2luZyBvciBjb25zb2xlIG91dHB1dCB0byB0cmFuc21pdCwgYG5ldHBvbGxfc2VuZF91ZHBgIGhhbmRsZXMgdGhlIHBhY2tldCB0cmFuc21pc3Npb24uIFRoaXMgc2VlbXMgZmFpcmx5IHN0YW5kYXJkIGFuZCBJJiMzOTtkIGV4cGVjdCB0aGlzIHRvIHdvcmsgYXMgYWR2ZXJ0aXNlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBlbnZpcm9ubWVudHMsIGFzc3VtaW5nIGNvbmZpZ2ZzIGFuZCBuZXRjb25zb2xlIGFyZSBlbmFibGVkLCBvZiBjb3Vyc2UuCgpOb3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IG90aGVyIGNvZGUgaW4gYG5ldGNvbnNvbGUuY2AgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgb3IgY2FsbHMuIEl0JiMzOTtzIHRpbWUgdG8gZ28gYmFjayBvdmVyIHRoZSBwYXRjaCBjaGFuZ2VzIGFuZCBtYWtlIGEgbGlzdCBvZiBldmVyeXRoaW5nOiBJIHNlZSBgbmV0Y29uc190YWtlX2lwdjZgLCBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyYCwgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAsIGBsb2NhbF9pcF9zaG93YCwgYHJlbW90ZV9pcF9zaG93YCwgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGBuZXRwb2xsX3NlbmRfdWRwYCwgYW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gT2ssIGdvdCB0aGUgbGlzdC4KCkkgd2FudCB0byBrbm93IGhvdyBhbGwgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBjYWxsaW5nIGZsb3cgc28gSSYjMzk7bGwgY2hlY2sgd2hhdCBjYWxscyBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgIGV0Yy4gaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ1Nz1zdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0ODY6c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00ODcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01NzY9c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTg1Olx0aWYgKG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODYtXHRcdC8qIG5ldHBvbGwgZmFpbHMgc2V0dXAgb25jZSwgZG8gbm90IHRyeSBhZ2Fpbi4gKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTAxND1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA3NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDc2Olx0XHRyZXQgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzctXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYyMT1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjYwOlx0ZXJyID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjYxLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRGlhZ25vc3RpYyBDaGVja2xpc3QqKgoKT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgcmV2aWV3IHRoZSBrZXkgY29tcG9uZW50cyBpbnZvbHZlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGZ1bmRhbWVudGFsIHZhcmlhYmxlczogSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc3RhdGVzIG9mIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGFuZCBvdGhlciByZWxldmFudCBzdG9yZXMuIE1ha2Ugc3VyZSB0aG9zZSBhcmUgYXMgZXhwZWN0ZWQgYW5kIGNvbnRhaW4gdGhlIHJpZ2h0IGluZm9ybWF0aW9uLgoKTmV4dCwgc2luY2UgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBpbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIGFuZCB3aGF0IG90aGVyIG1vZHVsZXMgcmVseSBvbiBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgbmV0cG9sbF9zZW5kX3VkcGAgdG8gZmluZCB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXMgY2FsbGluZyBgbmV0cG9sbF9zZW5kX3VkcGAgc28gSSB1bmRlcnN0YW5kIGhvdyB0aGluZ3MgYXJlIGZsb3dpbmcuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1Nj1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTgwOnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE4MS1cdFx0XHQgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNy0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIyLSAqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyMzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMjc9c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjk6XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldGNvbnNvbGUgRHluYW1pYyBNZXNzYWdlIEhhbmRsaW5nKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuZXR3b3JrIGNvbnNvbGUgbWVzc2FnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBudWFuY2VzIG9mIGhvdyBpdCBiZWhhdmVzIHdoZW4gZHluYW1pYyBOZXRjb25zb2xlIGlzIGVuYWJsZWQgdmVyc3VzIHdoZW4gaXQmIzM5O3MgZGlzYWJsZWQuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBzZW5kX3VkcF9keW5gLCBvciBwZXJoYXBzIGB3cml0ZV9tc2dgIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBleGFtaW5lLiBJIG5lZWQgdG8gdHJhY2UgdGhlIG1lc3NhZ2UgZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYy4gVGhlIGRpZmZlcmVuY2VzIGluIG1lc3NhZ2Ugc2VuZGluZywgYW5kIHBvdGVudGlhbGx5IGZyYW1pbmcsIHNob3VsZCBiZSBhcHBhcmVudCBpbiB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O20gcmVhbGx5IGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGRpZmZlcmVuY2VzIGF0IHRoZSB1bmRlcmx5aW5nIGxldmVsLCBhbmQgd2hpY2ggcGllY2VzIG9mIHRoZSBwdXp6bGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZW5kX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1Nj1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTgwOnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE4MS1cdFx0XHQgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNy0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIyLSAqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyMzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjc6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjk6XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMzAtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyNDQ9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNzc6XHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBtc2dfbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc4LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI4OD1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzc1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNzY6XHRcdHNlbmRfdWRwKG50LCBudC1cdTAwM2VidWYsIGJ1Zl9vZmZzZXQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNzctXHR9XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0MjY9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDM0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MzU6XHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDM2LVx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDU4PXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjUtXHRcdGZyYWcgPSBtaW4obGVmdCwgTUFYX1BSSU5UX0NIVU5LKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDY2Olx0XHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDY3LVx0XHR0bXAgJiM0Mzs9IGZyYWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFRyYW5zbWlzc2lvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNlbmRfdWRwYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSDigJMgaXQmIzM5O3MgY2FsbGluZyBgbmV0cG9sbF9zZW5kX3VkcGAuIE5vdywgdGhlcmUmIzM5O3MgYSBjb21tZW50IHJpZ2h0IGhlcmUgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24uIEl0IHN0YXRlcyBzb21ldGhpbmcgYWJvdXQgdGhlIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBgbmV0cG9sbF9zZW5kX3VkcGAgY2FsbC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlciB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgZW50aXJlIGZsb3cuIFRpbWUgdG8gbG9vayB1cCB0aG9zZSBzcGVjaWZpYyBsaW5lcyBpbiB0aGUgbmV0Y29uc29sZS5jIGZpbGUgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGF0IGNvbmZpZyBvcHRpb24uIExldCYjMzk7cyBzZWUgaWYgdGhhdCBkeW5hbWljIGNvbnNvbGUgaGFuZGxpbmcgaXMgYWN0dWFsbHkgYWN0aXZlIG9yIG5vdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMTU6XHR9XG4yMjE2Olx0XG4yMjE3Olx0LyoqXG4yMjE4Olx0ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xuMjIxOTpcdCAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuMjIyMDpcdCAqIEBtc2c6IG1lc3NhZ2UgdG8gc2VuZFxuMjIyMTpcdCAqIEBsZW46IGxlbmd0aCBvZiBtZXNzYWdlXG4yMjIyOlx0ICpcbjIyMjM6XHQgKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG4yMjI0Olx0ICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuMjIyNTpcdCAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxuMjIyNjpcdCAqL1xuMjIyNzpcdHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbjIyMjg6XHR7XG4yMjI5Olx0XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuMjIzMDpcdFxuMjIzMTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcbjIyMzI6XHRcdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG4yMjMzOlx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZudC1cdTAwM2VzdGF0cy5zeW5jcCk7XG4yMjM0Olx0XHRcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZudC1cdTAwM2VzdGF0cy54bWl0X2Ryb3BfY291bnQpO1xuMjIzNTpcdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNm50LVx1MDAzZXN0YXRzLnN5bmNwKTtcbjIyMzY6XHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgPT0gLUVOT01FTSkge1xuMjIzNzpcdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2bnQtXHUwMDNlc3RhdHMuc3luY3ApO1xuMjIzODpcdFx0XHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2bnQtXHUwMDNlc3RhdHMuZW5vbWVtX2NvdW50KTtcbjIyMzk6XHRcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZudC1cdTAwM2VzdGF0cy5zeW5jcCk7XG4yMjQwOlx0XHRcdH1cbjIyNDE6XHRcdH1cbjIyNDI6XHR9XG4yMjQzOlx0XG4yMjQ0Olx0c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuMjI0NTpcdFx0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqbXNnLFxuMjI0NjpcdFx0XHRcdFx0ICAgICAgaW50IG1zZ19sZW4sXG4yMjQ3Olx0XHRcdFx0XHQgICAgICBpbnQgcmVsZWFzZV9sZW4sXG4yMjQ4Olx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4yMjQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxNQoJCQkJCQkJb3V0cHV0OiAyMTkKCQkJCQkJCXRob3VnaHRzOiAxMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkIHdhcyBhIHNsaWdodGx5IG91dGRhdGVkIGxpbmUgaW4gdGhlIGNvbW1lbnQsIGJ1dCB0aGUga2V5IHRoaW5nIGlzIHRoYXQgYHNlbmRfdWRwYCBhbHdheXMgY2FsbHMgYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4KCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIElzIHRoaXMgdGhpbmcgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiBRRU1VLCBHQ0UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGR5bmFtaWMgY29uZmlnZnMgdGFyZ2V0IGNyZWF0aW9uLCBzZXR0aW5nIGxvY2FsIGFuZCByZW1vdGUgSVBzLCBlbmFibGluZyB0aGUgdGFyZ2V0LCBwdXNoaW5nIGNvbnNvbGUgbWVzc2FnZXMgb3ZlciB2aXJ0dWFsIGV0aGVybmV0IGludGVyZmFjZXMgKGR1bW15LCB2ZXRoLCB0YXApLCBhbmQgcG9raW5nIGFyb3VuZCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGVzLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLiBJdOKAmXMgcGFyc2luZyBJUCBhZGRyZXNzZXMgZGlmZmVyZW50bHksIGNoYW5naW5nIGhvdyB0aGUgYWRkcmVzcyBmYW1pbHkgaXMgdHJhY2tlZCwgdXNpbmcgYG50LSZndDtsb2NhbF9pcC5mYW1pbHlgIGFuZCBgbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHlgIGluc3RlYWQgb2YganVzdCBhbiBgaXB2NmAgZmxhZy4gSXTigJlzIGFkZGluZyB2YWxpZGF0aW9uIGluIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBjaGVja2luZyBpZiB0aGUgcmVtb3RlIElQIGlzIHNldCBhbmQgaWYgdGhlcmXigJlzIGEgZmFtaWx5IG1pc21hdGNoLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc190YWtlX2lwdjZgLCBhbmQgdGhlIHN5c2ZzIGhhbmRsZXJzIGZvciBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgbmV0cG9sbF91ZHBfY2hlY2tzdW1gLCBgcHVzaF9ldGhgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGFuZCB0aGUgY29tbWFuZC1saW5lIHBhcnNlciBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIEdpdmVuIGFsbCB0aGF0LCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IGNvbmZpZyBvcHRpb25zIGVuYWJsZWQuIFdlIGRlZmluaXRlbHkgbmVlZCBgTkVUQ09OU09MRWAsIGFuZCBhbHNvIGBORVRDT05TT0xFX0RZTkFNSUNgIChiZWNhdXNlIG9mIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgbG9jYWxfaXBfc2hvd2AsIGByZW1vdGVfaXBfc2hvd2AsIGFuZCBgQ09ORklHRlNfRlNgKS4gV2UgbmVlZCBgQ09ORklHRlNfRlNgIChpdCYjMzk7cyBhIGRlcGVuZGVuY3kgb2YgYE5FVENPTlNPTEVfRFlOQU1JQ2ApLiBXZSBvYnZpb3VzbHkgbmVlZCBgSU5FVGAgZm9yIElQdjQuIEFuZCwgdG8gYmUgY29tcGxldGUsIGBJUFY2YCBzaW5jZSB3ZSBoYXZlIElQdjYgc3VwcG9ydC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZyBuYW1lcyBpbiB0aGUgS2NvbmZpZyBmaWxlcy4KCk5vdywgbGV04oCZcyBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLCB0aGUgb25lcyB3ZSByZWFsbHkgd2FudCB0byBmb2N1cyBvbi4gT2theSwgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCwgaXQmIzM5O3MgdGhlc2UgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZDogYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX3Rha2VfaXB2NmAsIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIExldCYjMzk7cyBjb25maXJtIHdoaWNoIG9uZXMgYXJlIGltcG9ydGFudCBhbmQgbm9uLXN0YXRpYyBzbyB3ZSBjYW4gY2FsbCB0aGVtIGRpcmVjdGx5LiBBZnRlciB2ZXJpZmljYXRpb24sIGhlcmUgYXJlIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgbWU6IGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBsb2NhbF9pcF9zaG93YCwgYHJlbW90ZV9pcF9zaG93YCwgYG5ldHBvbGxfc2VuZF91ZHBgLCBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc190YWtlX2lwdjZgLgoKQXJlIHRoZXNlIGZ1bmN0aW9ucyB1YmlxdWl0b3VzPyBObywgdGhleSYjMzk7cmUgYWxsIG5ldGNvbnNvbGUtc3BlY2lmaWMsIHNvIHRoZXkmIzM5O3JlIGV4Y2VsbGVudCBmb2N1cyBzeW1ib2xzLiBUaGVzZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIGFkZHJlc3MgcGFyc2luZywgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBhY3R1YWwgc2VuZGluZyBvZiBVRFAgcGFja2V0cy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHJlYXNvbmluZyBtYWtlcyBzZW5zZS4gVGhlIHBhdGNoIGlzIGFsbCBhYm91dCByZWZhY3RvcmluZyBob3cgbmV0Y29uc29sZSBtYW5hZ2VzIElQIGFkZHJlc3Nlcy4gSXQmIzM5O3MgbW92aW5nIGF3YXkgZnJvbSB0aGUgYGlwdjZgIGZsYWcgYW5kIHRoZSBgdW5pb24gaW5ldF9hZGRyYCBhbmQgaW5zdGVhZCBpbnRyb2R1Y2luZyBgc3RydWN0IGluZXRfYWRkcmAgdG8gZXhwbGljaXRseSBzdG9yZSBhZGRyZXNzIGZhbWlsaWVzLiBJdCYjMzk7cyBhZGRpbmcgc29tZSBpbXBvcnRhbnQgYWRkcmVzcyBmYW1pbHkgY29uc2lzdGVuY3kgY2hlY2tzLiBUaGUgbmV0cG9sbCBzZXR1cCwgcGFyc2luZywgYW5kIHBhY2tldCBjb25zdHJ1Y3Rpb24gbG9naWMgYXJlIGFsbCBiZWluZyB1cGRhdGVkLiBBbmQgeWVzLCBhbGwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGR5bmFtaWMgbmV0Y29uc29sZSBjb25maWdmcyBpbnRlcmZhY2UgdW5kZXIgYC9zeXMva2VybmVsL2NvbmZpZy9uZXRjb25zb2xlYC4gSXQmIzM5O3MgYSBuaWNlbHkgc2VsZi1jb250YWluZWQgbGl0dGxlIHN1YnN5c3RlbSwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy4KCk9rYXksIEkgdGhpbmsgSSYjMzk7bSBnb29kLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCByZWNvcmQgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfcGFyc2VfaXBfYWRkciYjMzQ7LAogICAgJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7bG9jYWxfaXBfc2hvdyYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc2hvdyYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O25ldGNvbnNfdGFrZV9pcHY0JiMzNDssCiAgICAmIzM0O25ldGNvbnNfdGFrZV9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIG1hbmFnZW1lbnQgaW4gdGhlIG5ldGNvbnNvbGUgc3Vic3lzdGVtIGJ5IHJlcGxhY2luZyB0aGUgc2VwYXJhdGUgSVB2NiBib29sZWFuIGZsYWcgYW5kIHVuaW9uIHdpdGggYSBkZWRpY2F0ZWQgaW5ldF9hZGRyIHN0cnVjdCBzdG9yaW5nIHRoZSBhZGRyZXNzIGZhbWlseS4gSXQgbW9kaWZpZXMgYWRkcmVzcyBwYXJzaW5nLCBpbnRlcmZhY2UgSVAgYXV0by1wb3B1bGF0aW9uLCBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIGluIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCwgc3lzZnMvY29uZmlnZnMgYXR0cmlidXRlIGhhbmRsZXJzLCBhbmQgVURQIHRyYW5zbWlzc2lvbiBwYXRocy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBkeW5hbWljIG5ldGNvbnNvbGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gaW4gY29uZmlnZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9wYXJzZV9pcF9hZGRyJiMzNDssCiAgICAmIzM0O2xvY2FsX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtsb2NhbF9pcF9zaG93JiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zaG93JiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjQmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxuXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrOlxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cbjIuIFBhcnNpbmcgYW5kIHVwZGF0ZXM6IGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIHBvcHVsYXRlcyBgaXBgICh2aWEgYGluNF9wdG9uYCkgb3IgYGluNmAgKHZpYSBgaW42X3B0b25gKSBhbmQgc2V0cyBgZmFtaWx5YCBhY2NvcmRpbmdseSAoYEFGX0lORVRgIG9yIGBBRl9JTkVUNmApLiBXaGVuIGF1dG8tZGVyaXZlZCwgYG5ldGNvbnNfdGFrZV9pcHY0YCBhbmQgYG5ldGNvbnNfdGFrZV9pcHY2YCBmdWxseSBpbml0aWFsaXplIHRoZSBhZGRyZXNzIGFuZCBzZXQgYGZhbWlseWAuXG4zLiBVc2VyLXNwYWNlIG91dHB1dCAvIGluZm8gbGVha3M6IFN5c2ZzIGF0dHJpYnV0ZXMgYGxvY2FsX2lwX3Nob3dgIGFuZCBgcmVtb3RlX2lwX3Nob3dgIGVtaXQgZm9ybWF0dGVkIHN0cmluZ3MgYmFzZWQgb24gdGhlIHZlcmlmaWVkIGBmYW1pbHlgIGRpc2NyaW1pbmF0b3IgYW5kIHJlYWQgb25seSB0aGUgZnVsbHkgaW5pdGlhbGl6ZWQgYWRkcmVzcyB1bmlvbiBmaWVsZHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2Vyc3BhY2UuXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5YCBhbmQgcmVhZCBwcm9wZXJseSBpbml0aWFsaXplZCBgaW42YCBvciBgaXBgIGZpZWxkcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjlhOTY1NWVjZTI1ZDlhM2UyZWFiOTg4OWFkZTUyNDE0MTBiNzMyOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDE6NDg6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QKaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNjk0YmNhNDgwM2Q1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdApAQCAtMTQxLDYgJiM0MzsxNDEsMTEgQEAgVGhlIGludGVyZmFjZSBleHBvc2VzIHRoZXNlIHBhcmFtZXRlcnMgb2YgYSBuZXRjb25zb2xlIHRhcmdldCB0byB1c2Vyc3BhY2U6CiAJdHJhbnNtaXRfZXJyb3JzCU51bWJlciBvZiBwYWNrZXQgc2VuZCBlcnJvcnMJCShyZWFkLW9ubHkpCiAJPT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICA9PT09PT09PT09PT0KIAomIzQzO2xvY2FsX2lwIGlzIG9wdGlvbmFsOiBpZiBpdCBpcyBsZWZ0IHVuc2V0LCBuZXRjb25zb2xlIGRlcml2ZXMgYSBzb3VyY2UKJiM0MzthZGRyZXNzIGZyb20gdGhlIGVncmVzcyBpbnRlcmZhY2Ugd2hlbiB0aGUgdGFyZ2V0IGlzIGVuYWJsZWQuIFdyaXRpbmcgYW55CiYjNDM7dmFsdWUgdG8gaXQsIGluY2x1ZGluZyAwLjAuMC4wLCB1c2VzIHRoYXQgdmFsdWUgdmVyYmF0aW0gYW5kIGRpc2FibGVzIHRoZQomIzQzO2F1dG9tYXRpYyBzZWxlY3Rpb24uCiYjNDM7CiBUaGUgJiMzNDtlbmFibGVkJiMzNDsgYXR0cmlidXRlIGlzIGFsc28gdXNlZCB0byBjb250cm9sIHdoZXRoZXIgdGhlIHBhcmFtZXRlcnMgb2YKIGEgdGFyZ2V0IGNhbiBiZSB1cGRhdGVkIG9yIG5vdCAtLSB5b3UgY2FuIG1vZGlmeSB0aGUgcGFyYW1ldGVycyBvZiBvbmx5CiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmICYjMzQ7ZW5hYmxlZCYjMzQ7IGlzIDApLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IGIzNThlNWMzNjczNTEuLjI2NzI1NGYwNDZkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTE1MSw2ICYjNDM7MTUxLDE1IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHsKIAlTVEFURV9ERUFDVElWQVRFRCwKIH07CiAKJiM0MztzdHJ1Y3QgaW5ldF9hZGRyIHsKJiM0MzsJLyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi8KJiM0MzsJdTgJCQlmYW1pbHk7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCV9fYmUzMgkJaXA7CiYjNDM7CQlzdHJ1Y3QgaW42X2FkZHIJaW42OwomIzQzOwl9OwomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuCiAgKiBAcmN1OglVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCkBAIC0xOTUsNyAmIzQzOzIwNCw2IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHsKICAqCQlsb2NhbF9tYWMJKHJlYWQtb25seSkKICAqIEBsb2NhbF9pcDoJU291cmNlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX2lwOglEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgotICogQGlwdjY6CVdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLgogICogQGxvY2FsX3BvcnQ6CVNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX21hYzoJRGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KQEAgLTIyNSw4ICYjNDM7MjMzLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHsKIAlib29sCQkJZXh0ZW5kZWQ7CiAJYm9vbAkJCXJlbGVhc2U7CiAJc3RydWN0IG5ldHBvbGwJCW5wOwotCXVuaW9uIGluZXRfYWRkcgkJbG9jYWxfaXAsIHJlbW90ZV9pcDsKLQlib29sCQkJaXB2NjsKJiM0MzsJc3RydWN0IGluZXRfYWRkcglsb2NhbF9pcCwgcmVtb3RlX2lwOwogCXUxNgkJCWxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwogCXU4CQkJcmVtb3RlX21hY1tFVEhfQUxFTl07CiAJLyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICYjNDM7MSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHMKQEAgLTQyOCw2ICYjNDM7NDM1LDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCWNvbnRpbnVlOwogCQkJLyogR290IHRoZSBJUCwgbGV0JiMzOTtzIHJldHVybiAqLwogCQkJbnQtJmd0O2xvY2FsX2lwLmluNiA9IGlmcC0mZ3Q7YWRkcjsKJiM0MzsJCQludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDY7CiAJCQllcnIgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ2OSwyOCAmIzQzOzQ3NywxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJfQogCiAJbnQtJmd0O2xvY2FsX2lwLmlwID0gaWZhLSZndDtpZmFfbG9jYWw7CiYjNDM7CW50LSZndDtsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVAgJXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIAogCXJldHVybiAwOwogfQogCi0vKgotICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC0mZ3Q7bG9jYWxfaXAgdW5zZXQsIHNvIHRoYXQKLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuCi0gKgotICogbnQtJmd0O2xvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSwKLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLAotICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlAotICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmQKLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLgotICovCi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCi17Ci0JaWYgKG50LSZndDtpcHY2KQotCQlyZXR1cm4gaXB2Nl9hZGRyX2FueSgmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwotCXJldHVybiAhbnQtJmd0O2xvY2FsX2lwLmlwOwotfQotCiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9uczsKQEAgLTUwMCw2ICYjNDM7NDkyLDE3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJYm9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykgewomIzQzOwkJbnBfZXJyKG5wLCAmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FREVTVEFERFJSRVE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkpIHsKJiM0MzsJCW5wX2VycihucCwgJiMzNDtsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlydG5sX2xvY2soKTsKIAlpZiAobnAtJmd0O2Rldl9uYW1lWzBdKQogCQluZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC0mZ3Q7ZGV2X25hbWUpOwpAQCAtNTM2LDE2ICYjNDM7NTM5LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJCXJ0bmxfbG9jaygpOwogCX0KIAotCWlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkgewotCQlpZiAoIW50LSZndDtpcHY2KSB7Ci0JCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gcHV0OwotCQl9IGVsc2UgewomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKJiM0MzsJCWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJCWVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBwdXQ7Ci0JCX0KJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gcHV0OwogCQlpcF9vdmVyd3JpdHRlbiA9IHRydWU7CiAJfQogCkBAIC03MjcsMjQgJiM0Mzs3MjcsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgcG9ydCAlZFxuJiMzNDssIG50LSZndDtsb2NhbF9wb3J0KTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVAgdW5zZXRcbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O2ludGVyZmFjZSBuYW1lICYjMzk7JXMmIzM5O1xuJiMzNDssIG5wLSZndDtkZXZfbmFtZSk7CiAJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBldGhlcm5ldCBhZGRyZXNzICYjMzk7JXBNJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X21hYyk7CiAJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgcG9ydCAlZFxuJiMzNDssIG50LSZndDtyZW1vdGVfcG9ydCk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVAgdW5zZXRcbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaXApOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXG4mIzM0OywgbnQtJmd0O3JlbW90ZV9tYWMpOwogfQogCi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXMKLSAqIHBvcHVsYXRlZCwgMSBpZiBJUHY2IGlzIHBvcHVsYXRlZCwgYW5kIC0xIHVwb24gZmFpbHVyZS4KJiM0MzsvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzCiYjNDM7ICogYW5kIC0xIHVwb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKQogewogCWNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7CiAJaW50IGxlbjsKQEAgLTc1NiwxNCAmIzQzOzc2MCwxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcikKIAlpZiAoc3RyW2xlbiAtIDFdID09ICYjMzk7XG4mIzM5OykKIAkJbGVuIC09IDE7CiAKLQlpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwotCSAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xuJiMzOTspKQomIzQzOwlpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpcCwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewomIzQzOwkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKIAkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSAmYW1wOyZhbXA7Ci0JICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKLQkJcmV0dXJuIDE7CiYjNDM7CSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKikmYW1wO2FkZHItJmd0O2luNiwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewomIzQzOwkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDY7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJcmV0dXJuIC0xOwogfQpAQCAtODY4LDIwICYjNDM7ODc2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0O1xuJiMzNDspOwomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCi0JCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpCiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmluNik7CiAJZWxzZQotCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcCk7CiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQpAQCAtMTIyNiw3ICYjNDM7MTIzOCw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAJc3NpemVfdCByZXQgPSAtRUlOVkFMOwotCWludCBpcHY2OwogCiAJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKIAlpZiAobnQtJmd0O3N0YXRlID09IFNUQVRFX0VOQUJMRUQpIHsKQEAgLTEyMzUsMTAgJiM0MzsxMjQ2LDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwotCWlmIChpcHY2ID09IC0xKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKIAkJZ290byBvdXRfdW5sb2NrOwotCW50LSZndDtpcHY2ID0gISFpcHY2OwogCiAJcmV0ID0gY291bnQ7CiBvdXRfdW5sb2NrOgpAQCAtMTI1MSw3ICYjNDM7MTI2MCw2IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaXB2NjsKIAogCWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7CkBAIC0xMjYwLDEwICYjNDM7MTI2OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtyZW1vdGVfaXApOwotCWlmIChpcHY2ID09IC0xKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKSAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKLQludC0mZ3Q7aXB2NiA9ICEhaXB2NjsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTIwNzIsNyAmIzQzOzIwNzgsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCiAJLyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqLwogCXVkcGgtJmd0O2NoZWNrID0gMDsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJdWRwaC0mZ3Q7Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42LAogCQkJCQkgICAgICAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42LAogCQkJCQkgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCwKQEAgLTIxMTMsNyAmIzQzOzIxMTksNyBAQCBzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIG5wLSZndDtkZXYtJmd0O2Rldl9hZGRyKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX2Rlc3QsIG50LSZndDtyZW1vdGVfbWFjKTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJZWxzZQogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CkBAIC0yMTgyLDcgJiM0MzsyMTg4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKIAkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJdWRwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCWlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAllbHNlCiAJCWlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7CkBAIC0yMTk4LDcgJiM0MzsyMjA0LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKIAlza2JfcHV0KHNrYiwgbGVuKTsKIAogCXB1c2hfdWRwKG50LCBza2IsIGxlbik7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXB1c2hfaXB2NihudCwgc2tiLCBsZW4pOwogCWVsc2UKIAkJcHVzaF9pcHY0KG50LCBza2IsIGxlbik7CkBAIC0yNTI3LDEwICYjNDM7MjUzMyw4IEBAIF9fcmVsZWFzZXMoJmFtcDt0YXJnZXRfbGlzdF9sb2NrKQogc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIHsKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKLQlib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTsKIAljaGFyICpjdXIgPSBvcHQ7CiAJY2hhciAqZGVsaW07Ci0JaW50IGlwdjY7CiAKIAlpZiAoKmN1ciAhPSAmIzM5O0AmIzM5OykgewogCQlkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7QCYjMzk7KTsKQEAgLTI1NDQsMTYgJiM0MzsyNTQ4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiAJY3VyJiM0MzsmIzQzOzsKIAogCWlmICgqY3VyICE9ICYjMzk7LyYjMzk7KSB7Ci0JCWlwdmVyc2lvbl9zZXQgPSB0cnVlOwogCQlkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7LyYjMzk7KTsKIAkJaWYgKCFkZWxpbSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCQkqZGVsaW0gPSAwOwotCQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwotCQlpZiAoaXB2NiAmbHQ7IDApCiYjNDM7CQlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQllbHNlCi0JCQludC0mZ3Q7aXB2NiA9IChib29sKWlwdjY7CiAJCWN1ciA9IGRlbGltOwogCX0KIAljdXImIzQzOyYjNDM7OwpAQCAtMjU5NSwxMyAmIzQzOzI1OTUsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIAlpZiAoIWRlbGltKQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkqZGVsaW0gPSAwOwotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtyZW1vdGVfaXApOwotCWlmIChpcHY2ICZsdDsgMCkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCkgJmx0OyAwKQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQllbHNlIGlmIChpcHZlcnNpb25fc2V0ICZhbXA7JmFtcDsgbnQtJmd0O2lwdjYgIT0gKGJvb2wpaXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkpCiAJCWdvdG8gcGFyc2VfZmFpbGVkOwotCWVsc2UKLQkJbnQtJmd0O2lwdjYgPSAoYm9vbClpcHY2OwogCWN1ciA9IGRlbGltICYjNDM7IDE7CiAKIAlpZiAoKmN1ciAhPSAwKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0xNiwxMSAmIzQzOzE2LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogCi11bmlvbiBpbmV0X2FkZHIgewotCV9fYmUzMgkJaXA7Ci0Jc3RydWN0IGluNl9hZGRyCWluNjsKLX07Ci0KIHN0cnVjdCBuZXRwb2xsIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCW5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIERlY2lzaW9uOiBBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgYG5ldGNvbnNvbGVgIHBhdGNoIHdhcnJhbnQgc3Bpbm5pbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBpbiBhZGRpdGlvbiB0byBvdXIgc3RhbmRhcmQgS0FTQU4gZWZmb3J0cz8gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQuIExvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBzb21lIGRvY3VtZW50YXRpb24gdHdlYWtzIGluIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RgIOKAkyBzcGVjaWZpY2FsbHksIGNsYXJpZnlpbmcgdGhhdCBgbG9jYWxfaXBgIGlzIG5vdyBvcHRpb25hbC4gRmluZSwgbm90IGltbWVkaWF0ZWx5IGNvbmNlcm5pbmcgZnJvbSBhIG1lbW9yeSBzYWZldHkgUE9WLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSwgaXQgc2VlbXMsIGlzIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBBaGEsIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCBkZWZpbml0aW9uOgoKYGBgYwpzdHJ1Y3QgaW5ldF9hZGRyIHsKCS8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovCgl1OCBmYW1pbHk7Cgl1bmlvbiB7CgkJX19iZTMyIGlwOwoJCXN0cnVjdCBpbjZfYWRkciBpbjY7Cgl9Owp9OwpgYGAKClRoaXMgaXMgdGhlIGtleS4gVGhleSYjMzk7dmUgcmVwbGFjZWQgYHVuaW9uIGluZXRfYWRkciBsb2NhbF9pcCwgcmVtb3RlX2lwOyBib29sIGlwdjY7YCB3aXRoIGBzdHJ1Y3QgaW5ldF9hZGRyIGxvY2FsX2lwLCByZW1vdGVfaXA7YCBpbiBgbmV0Y29uc29sZV90YXJnZXRgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHVzaW5nIGEgdW5pb24gdG8gcmVwcmVzZW50IHRoZSBJUCBhZGRyZXNzIGZhbWlseSwgd2l0aCB0aGUgYGZhbWlseWAgbWVtYmVyLCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gVGhlIGNvbXBpbGVyICpzaG91bGQqIGJlIGhhbmRsaW5nIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhY2Nlc3MgY29ycmVjdGx5LCBidXQgdGhlc2Ugc29ydHMgb2YgY2hhbmdlcyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3Igc3VidGxlIHVzZS1hZnRlci1mcmVlIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgcGFydGljdWxhcmx5IGlmIHRoZSBmYW1pbHkgaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgb3B0aW9uYWwgbmF0dXJlIG9mIGBsb2NhbF9pcGAgbWlnaHQgY29tcGxpY2F0ZSBtYXR0ZXJzIGV2ZW4gZnVydGhlci4KClNvLCB3aGVyZSBhcmUgdGhlc2UgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3RzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQ/IFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyBgbmV0Y29uc29sZV90YXJnZXRgIGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1c2VkLiBUaGF0IHdpbGwgdGVsbCBtZSBpZiB0aGVyZSBpcyBhbnkgcGxhY2UgdG8gdHJpZ2dlciBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMuIE9uY2UgSSBoYXZlIHRoZSBhbGxvY2F0aW9uIGFuZCB1c2Ugb2YgdGhhdCBzdHJ1Y3QgdW5kZXIgY29udHJvbCwgSSBjYW4gbWFrZSBhIGRlY2lzaW9uIGFib3V0IGFkZGluZyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLipuZXRjb25zb2xlX3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBNZW1vcnkgQWxsb2NhdGlvbnMgaW4gbmV0Y29uc29sZS5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldGNvbnNvbGUuY2AuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGV2ZXJ5IG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGlzIG1vZHVsZS4gVGhpcyBpcyBsaWtlbHkgbW90aXZhdGVkIGJ5IGEgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGEgbWVtb3J5IGxlYWsgaW52ZXN0aWdhdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgc2VjdXJpdHkgYXVkaXQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBjb2RlLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQsIHByb2JhYmx5IGZvciBidWZmZXJpbmcgcGFja2V0cywgY29uZmlndXJpbmcgY29ubmVjdGlvbnMsIG9yIHN0b3JpbmcgY29ubmVjdGlvbiBzdGF0ZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuCgpJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHRleHQgc2VhcmNoIHdpdGhpbiB0aGUgZmlsZSwgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBga21hbGxvY2AsIGBremFsbG9jYCwgYHZtYWxsb2NgLCBga21lbV9jYWNoZV9hbGxvY2AsIGV0Yy4gSSYjMzk7bGwgbmVlZCB0byBiZSBtaW5kZnVsIG9mIG1hY3JvIHVzYWdlIHRoYXQgbWlnaHQgd3JhcCB0aGVzZSBmdW5jdGlvbnMuIENvbW1vbiBwYXR0ZXJucyBsaWtlIGFsbG9jYXRpb24gd3JhcHBlcnMsIGUuZy4gYE5FVERFVl9BTExPQ2Agb3Igc2ltaWxhciwgYXJlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIEkgYWxzbyBjYW4mIzM5O3QgZm9yZ2V0IGN1c3RvbSBtZW1vcnkgcG9vbCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdW5mb3J0dW5hdGVseSBjb21tb24gaW4ga2VybmVsIGNvZGUgYW5kIG1pZ2h0IGJlIHVzZWQgaW4gdGhlIG1vZHVsZSwgc28gSSYjMzk7bGwgYWxzbyBiZSBzY2FubmluZyBmb3IgY3VzdG9tIGFsbG9jYXRpb24gZnVuY3Rpb25zIHdoaWNoIG1pZ2h0IG5vdCB1c2UgdGhlIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3JzLgoKT25jZSBJJiMzOTt2ZSBpZGVudGlmaWVkIHBvdGVudGlhbCBhbGxvY2F0aW9uIHBvaW50cywgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBlYWNoIGFsbG9jYXRpb24gYmFjayB0byBpdHMgY29ycmVzcG9uZGluZyBmcmVlaW5nIG1lY2hhbmlzbS4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYXNzb2NpYXRlZCBga2ZyZWVgIGNhbGxzPyBEbyB0aGV5IGZvbGxvdyBhIHByb3BlciBlcnJvciBoYW5kbGluZyBwYXRoPyBBcmUgdGhlcmUgYW55IGRhbmdsaW5nIHBvaW50ZXJzIGlmIHRoZXJlJiMzOTtzIGFuIGVycm9yPyBBcmUgdGhlcmUgYW55IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcz8gV2l0aG91dCB0aGlzLCBJJiMzOTttIGp1c3QgbGlzdGluZyBhbGxvY2F0aW9ucy4gSSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBhbGxvY2F0aW9uIC8gZGVhbGxvY2F0aW9uIHBhaXJzLgoKSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiB0aGVzZSBhbGxvY2F0aW9ucy4gSXMgaXQgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3IgYSB0YXNrbGV0PyBUaGUgY29udGV4dCBkcmFtYXRpY2FsbHkgaW1wYWN0cyB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlIG5lZWQgZm9yIGFwcHJvcHJpYXRlIGxvY2tpbmcgbWVjaGFuaXNtcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3BpbmxvY2tzLCBtdXRleGVzLCBhbmQgb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byBrbm93IGlmIGFsbG9jYXRpb25zIGFyZSBoYXBwZW5pbmcgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIG9yIG5vdC4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIGNvbW1vbiBwaXRmYWxsczogYXJlIHRoZXJlIGFsbG9jYXRpb24gc2l6ZSBsaW1pdHMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBXaGF0IGFib3V0IG1lbW9yeSBmcmFnbWVudGF0aW9uIG92ZXIgdGltZT8gQW55IHVzZSBvZiBzbGFiIGNhY2hlcyBhbmQgYXJlIHRoZXkgY29uZmlndXJlZCBvcHRpbWFsbHkgZm9yIHRoZSBleHBlY3RlZCB3b3JrbG9hZD8gVGhpcyBtb2R1bGUgbWF5IGJlIGRlYWxpbmcgd2l0aCBkYXRhIHRoYXQgaXMgdXNlci1zdXBwbGllZCwgc28gSSBhbSB2ZXJ5IG11Y2ggb24gdGhlIGxvb2tvdXQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgdmFsaWRhdGlvbiwgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93cyBhbmQgb3RoZXIgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIG5ldHdvcmsgY29kZSwgYWZ0ZXIgYWxsLgoKRmluYWxseSwgSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBob3cgdGhlIGFsbG9jYXRpb25zIGFmZmVjdCBwZXJmb3JtYW5jZSBhbmQgd2hldGhlciB3ZSBjYW4gaW1wcm92ZSBhbnl0aGluZy4gSXMgdGhlcmUgYSBiZXR0ZXIgYWxnb3JpdGhtIG9yIGRhdGEgc3RydWN0dXJlIHRoYXQgY291bGQgcmVkdWNlIHRoZSBuZWVkIGZvciBkeW5hbWljIG1lbW9yeT8gQ291bGQgd2UgcHJlLWFsbG9jYXRlIHNvbWUgbWVtb3J5IG9yIHVzZSBhIHNsYWIgY2FjaGUgbW9yZSBlZmZlY3RpdmVseT8gVGhlIGdvYWwgaXMgdG8gb2J0YWluIGEgaG9saXN0aWMgdmlldyBvZiBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGlzIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExOD1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMDpzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjEtXHR1NjRfc3RhdHNfdCB4bWl0X2Ryb3BfY291bnQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3Mj1zdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3OC0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzk6ICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgwLSAqIEBsaXN0Olx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNy0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTg6c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTktXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzAtI2VuZGlmXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMxOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0X3N0YXRzIHN0YXRzO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMi1cdGVudW0gdGFyZ2V0X3N0YXRlXHRzdGF0ZTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYwPXN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjktICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X2dldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzY6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcHV0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjc3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjk5PXN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDYtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA3OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X2dldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwOC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMxMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMTE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcHV0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzEyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMxNTpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE2LVx0XHRcdFx0ICAgaW50IGNtZGxpbmVfY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTMyND1zdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzMC0vKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMzE6c3RhdGljIGJvb2wgYm91bmRfYnlfbWFjKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzMyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzM1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzNjpzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzM3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM0MzpzdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0NC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM1Nz1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1OC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU5Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzYwOlx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0LCByZWZpbGxfd3EpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM2MS1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzY4LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM2OTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mzc0OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00MDE9c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MTItICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDEzOnN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MTQtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1NzpzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU4LVx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0ODY6c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00ODcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzUtLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTc2OnN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01Nzcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01OTYtLyogQ2hlY2tzIGlmIGEgZGVhY3RpdmF0ZWQgdGFyZ2V0IG1hdGNoZXMgYSBkZXZpY2UuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTk3OnN0YXRpYyBib29sIGRlYWN0aXZhdGVkX3RhcmdldF9tYXRjaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU5OC1cdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTYwOT1zdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxMC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjExOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTItXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxMy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MTQ6XHRudCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQsIHJlc3VtZV93cSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjE1LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NjktICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjcwOnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjcxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NzI6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3My1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzAwPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzAxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MDI6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCAqdG1wO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcwMy1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MjU6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MjYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03NTE9c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODA1OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnRvX3RhcmdldChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODA2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODEyLVx0cmV0dXJuIGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODEzOlx0XHRcdCAgICBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQsIGdyb3VwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MTQtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MzA9c3RhdGljIHZvaWQgdHJpbV9uZXdsaW5lKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0MS0vKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0MjogKiBBdHRyaWJ1dGUgb3BlcmF0aW9ucyBmb3IgbmV0Y29uc29sZV90YXJnZXQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQzLSAqL1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04NzU9c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NzYte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3NzpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc4LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04ODc9c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg4LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODk6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5MC1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTEyPXN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxMy17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTE0Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTUtXHR1NjQgeG1pdF9kcm9wX2NvdW50LCBlbm9tZW1fY291bnQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTkyOD1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI5LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MzA6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXHUwMDNlY2lfcGFyZW50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MzEtXHRib29sIGNwdV9ucl9lbmFibGVkO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NDE9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NDMte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk0NDpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cdTAwM2VjaV9wYXJlbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0NS1cdGJvb2wgdGFza25hbWVfZW5hYmxlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTU0PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NTYte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk1NzpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cdTAwM2VjaV9wYXJlbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1OC1cdGJvb2wgcmVsZWFzZV9lbmFibGVkO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NzA9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uZXRjb25zX2NvbnNvbGVzKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTcxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5NzI6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk3My1cdHUzMiBjb25zb2xlX3R5cGVfbmVlZGVkID0gMDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTk0PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTk2LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5OTc6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXHUwMDNlY2lfcGFyZW50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05OTgtXHRib29sIG1zZ2lkX2VuYWJsZWQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMTQ9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMTYte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMTc6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMTgtXHRib29sIGVuYWJsZWQsIGN1cnJlbnRfZW5hYmxlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTExMj1zdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTE0LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTE1Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTE2LVx0Ym9vbCByZWxlYXNlO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMTM5PXN0YXRpYyBzc2l6ZV90IGV4dGVuZGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTQxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTQyOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTQzLVx0Ym9vbCBleHRlbmRlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE2NT1zdGF0aWMgc3NpemVfdCBkZXZfbmFtZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2Ny17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE2ODpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2OS1cdHNpemVfdCBsZW4gPSBjb3VudDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE5Mj1zdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTk0LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTk1Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTk2LVx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjE0PXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIxNi17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIxNzpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIxOC1cdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTIzNj1zdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzOC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIzOTpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI0MC1cdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI1OD1zdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjAte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNjE6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjItXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODQtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI4NTpzdGF0aWMgc2l6ZV90IGNvdW50X3VzZXJkYXRhX2VudHJpZXMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjg2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI5MD1zdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjkyLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjkzOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk0LVx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzMzA9c3RhdGljIHN0cnVjdCB1c2VyZGF0YSAqdG9fdXNlcmRhdGEoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMzU6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqdXNlcmRhdGFfdG9fdGFyZ2V0KHN0cnVjdCB1c2VyZGF0YSAqdWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMzNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNDM9c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNTEtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM1MjpzdGF0aWMgaW50IGNhbGNfdXNlcmRhdGFfbGVuKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1My17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM3MTpzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDE5PXN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQyMy1cdGNoYXIgb2xkX3ZhbHVlW01BWF9FWFRSQURBVEFfVkFMVUVfTEVOXTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDI0Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDI1LVx0c3RydWN0IHVzZXJkYXRhICp1ZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ1Ny0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDU4OnN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ1OS1cdFx0XHRcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDY1PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0Njcte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Njg6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXHUwMDNlY2lfcGFyZW50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY5LVx0Ym9vbCBtc2dpZF9lbmFibGVkLCBjdXJyO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDk0PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ5Ni17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ5NzpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cdTAwM2VjaV9wYXJlbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTgtXHRib29sIHJlbGVhc2VfZW5hYmxlZCwgY3Vycjtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTUyMz1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX3Rhc2tuYW1lX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI1LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTI2Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtLVx1MDAzZWNpX3BhcmVudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyNy1cdGJvb2wgdGFza25hbWVfZW5hYmxlZCwgY3Vycjtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTU1Mz1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1NS17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU1NjpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cdTAwM2VjaV9wYXJlbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NTctXHRib29sIGNwdV9ucl9lbmFibGVkLCBjdXJyO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjEyPXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKnVzZXJkYXR1bV9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MTQte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MTU6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MTYtXHRzdHJ1Y3QgdXNlcmRhdHVtICp1ZG07XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MzU9c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjM2LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjM3Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjM4LVx0c3RydWN0IHVzZXJkYXRhICp1ZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY3OT1DT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjgwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2ODE6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4Mi1cdFx1MDAyNmF0dHJfZW5hYmxlZCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5Ni0vKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2OTc6ICogSXRlbSBvcGVyYXRpb25zIGFuZCB0eXBlIGZvciBuZXRjb25zb2xlX3RhcmdldC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjk4LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwMDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzAxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzAyOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzAzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzA3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MDg6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwOTpcdC5yZWxlYXNlXHRcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzEwLX07XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzEyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MTM6XHQuY3RfYXR0cnNcdFx0PSBuZXRjb25zb2xlX3RhcmdldF9hdHRycyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzE0Olx0LmN0X2l0ZW1fb3BzXHRcdD0gXHUwMDI2bmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxNS1cdC5jdF9vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MTg6c3RhdGljIHZvaWQgaW5pdF90YXJnZXRfY29uZmlnX2dyb3VwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxOS1cdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzIwLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzIxOlx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFx1MDAyNm50LVx1MDAzZWdyb3VwLCBuYW1lLCBcdTAwMjZuZXRjb25zb2xlX3RhcmdldF90eXBlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzIyLVx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFx1MDAyNm50LVx1MDAzZXVzZXJkYXRhX2dyb3VwLCBcJiMzNDt1c2VyZGF0YVwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcyNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzI3OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmZpbmRfY21kbGluZV90YXJnZXQoY29uc3QgY2hhciAqbmFtZSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzI4LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzI5Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgKnJldCA9IE5VTEw7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTczMC1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc0ODpzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQ5LVx0XHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc1MC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc1MTpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc1Mi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc4MjpzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODMtXHRcdFx0XHQgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc4NC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc4NTpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc4Ni1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE4MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM1Olx0Lm1ha2VfZ3JvdXBcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM2Olx0LmRyb3BfaXRlbVx0PSBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MzctfTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTg0NT1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODU0OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODU1LVx0XHRcdFx0ICAgaW50IGNtZGxpbmVfY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg2NDpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX2NwdV9ucihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgb2Zmc2V0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjUtXHRcdFx0XHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODcxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzI6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF90YXNrbmFtZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgb2Zmc2V0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzMtXHRcdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg4MDpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX3JlbGVhc2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODgxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg4Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODg3OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfbXNnaWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODg4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTAwOnN0YXRpYyBpbnQgcHJlcGFyZV9zeXNkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkwMS1cdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE5MjY9c3RhdGljIGludCBuZXRjb25zb2xlX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MjktXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTkzMDpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkzMS1cdGJvb2wgc3RvcHBlZCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTQxLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsIFx1MDAyNnRhcmdldF9saXN0LCBsaXN0KSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk0MjpcdFx0bmV0Y29uc29sZV90YXJnZXRfZ2V0KG50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTQzLVx0XHRpZiAobnQtXHUwMDNlbnAuZGV2ID09IGRldikge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTcxLVx0XHRcdHF1ZXVlX3dvcmsobmV0Y29uc29sZV93cSwgXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTcyOlx0XHRuZXRjb25zb2xlX3RhcmdldF9wdXQobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NzMtXHR9XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwMDQ9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXRjb25zb2xlX25ldGRldl9ub3RpZmllciA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAxOS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDIwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAyMS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNDItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA0MzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA0NC1cdFx0XHRcdGludCByZXNlcnZlKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDY5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzA6c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDcxLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwOTQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA5NTpzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwOTYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTEyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMTM6c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE0LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyNy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTI4OnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjktXHRcdCAgICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1NjpzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTU3LVx0XHQgICAgICBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxODA6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTgxLVx0XHRcdCAgICBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjc6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNDQ6c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNDUtXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyODA9c3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyODg6c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg5LVx0XHRcdFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzgwOnN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzgxLVx0XHRcdFx0Y29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDI1LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MjY6c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjctXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ1ODpzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTktXHRcdFx0IHVuc2lnbmVkIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0Nzk9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4MC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ4MTpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4Mi1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUyOD1fX3JlbGVhc2VzKFx1MDAyNnRhcmdldF9saXN0X2xvY2spXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MzItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUzMzpzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MzQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjIwLS8qIEFsbG9jYXRlIG5ldyB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBzZXR1cCBuZXRwb2xsIGZvciBpdCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2MjE6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyMi1cdFx0XHRcdFx0XHQgICAgaW50IGNtZGxpbmVfY291bnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyMy17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYyNDpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyNS1cdGludCBlcnI7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODItLyogQ2xlYW51cCBuZXRwb2xsIGZvciBnaXZlbiB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBmcmVlIGl0ICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY4MzpzdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNzEzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzE1LVx0aW50IGVycjtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzE2Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgKnRtcDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzE3LVx0dTMyIGNvbnNvbGVfdHlwZV9uZWVkZWQgPSAwO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX25ldGNvbnNvbGUodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzk1LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzk2Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgKnRtcDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgTmV0d29yayBDb25zb2xlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNyYWNraW5nIG9wZW4gYGFsbG9jX2FuZF9pbml0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGFuZCBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAgdXNpbmcgYHJlYWQtZmlsZWAuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGNvbnNvbGUgaW5pdGlhbGl6YXRpb24gaGVyZSwgYW5kIHRoZXNlIGFyZSBsaWtlbHkgdGhlIGJ1aWxkaW5nIGJsb2Nrcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgYWxsb2NhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgY29uc29sZSB0YXJnZXRzLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJlsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBwYXJhbWV0ZXIgcGFyc2luZywgYW5kIHRoZSBvdmVyYWxsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGRlZmluZSB0aGUgbmV0d29yayBjb25zb2xlIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlIHRvIGVuYWJsZSBuZXR3b3JrIGRlYnVnZ2luZy4gSSBleHBlY3QgdG8gc2VlIGFsbG9jYXRpb24gZm9yIGJ1ZmZlcnMsIHBlcmhhcHMgc3RydWN0dXJlcyB0byBob2xkIG5ldHdvcmsgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGRhdGEuIFRoZSAmIzM0O3RhcmdldCYjMzQ7IHBhcnQgaW1wbGllcyB0aGVzZSBhcmUgZGVzY3JpYmluZyB3aGVyZSB0aGUgY29uc29sZSBvdXRwdXQgaXMgZ29pbmcgdG8uIFRoZSAmIzM0O3BhcmFtJiMzNDsgYXNwZWN0IHByb2JhYmx5IHJlbGF0ZXMgdG8gcGFzc2luZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjU6XHR9XG4gNjY2Olx0XG4gNjY3Olx0LyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0cy5cbiA2Njg6XHQgKiBOb3RlIHRoYXQgdGhlc2UgdGFyZ2V0cyBnZXQgdGhlaXIgY29uZmlnX2l0ZW0gZmllbGRzIHplcm9lZC1vdXQuXG4gNjY5Olx0ICovXG4gNjcwOlx0c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbiA2NzE6XHR7XG4gNjcyOlx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuIDY3MzpcdFxuIDY3NDpcdFx0bnQgPSBremFsbG9jX29iaigqbnQpO1xuIDY3NTpcdFx0aWYgKCFudClcbiA2NzY6XHRcdFx0cmV0dXJuIG50O1xuIDY3NzpcdFxuIDY3ODpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRVhURU5ERURfTE9HKSlcbiA2Nzk6XHRcdFx0bnQtXHUwMDNlZXh0ZW5kZWQgPSB0cnVlO1xuIDY4MDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFKSlcbiA2ODE6XHRcdFx0bnQtXHUwMDNlcmVsZWFzZSA9IHRydWU7XG4gNjgyOlx0XG4gNjgzOlx0XHRudC1cdTAwM2VucC5uYW1lID0gXCYjMzQ7bmV0Y29uc29sZVwmIzM0OztcbiA2ODQ6XHRcdHN0cnNjcHkobnQtXHUwMDNlbnAuZGV2X25hbWUsIFwmIzM0O2V0aDBcJiMzNDssIElGTkFNU0laKTtcbiA2ODU6XHRcdG50LVx1MDAzZWxvY2FsX3BvcnQgPSA2NjY1O1xuIDY4NjpcdFx0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuIDY4NzpcdFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIDY4ODpcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiA2ODk6XHRcdElOSVRfV09SSyhcdTAwMjZudC1cdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XG4gNjkwOlx0XHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xuIDY5MTpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gNjkyOlx0XHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuIDY5MzpcdFxuIDY5NDpcdFx0cmV0dXJuIG50O1xuIDY5NTpcdH1cbiA2OTY6XHRcbiA2OTc6XHQvKiBDbGVhbiB1cCBldmVyeSB0YXJnZXQgaW4gdGhlIGNsZWFudXBfbGlzdCBhbmQgbW92ZSB0aGUgY2xlYW4gdGFyZ2V0cyBiYWNrIHRvXG4gNjk4Olx0ICogdGhlIG1haW4gdGFyZ2V0X2xpc3QuXG4gNjk5Olx0ICovXG4gNzAwOlx0c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiA3MDE6XHR7XG4gNzAyOlx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCAqdG1wO1xuIDcwMzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA3MDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBQYXJhbWV0ZXIgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYWxsb2NhdGlvbiBzdHJhdGVnaWVzLiBCZWZvcmUgZGl2aW5nIGRlZXBlciwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gVGhlIGN1cnJlbnQgZm9jdXMgc2VlbXMgdG8gYmUgb24gYSBzcGVjaWZpYyBhcmVhLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBwZXJmb3JtIGEgY29tcGxldGUgc3lzdGVtcyBjaGVjay4gVGhhdCBtZWFucyBub3Qgb25seSBjaGVja2luZyB0aGUgbW9yZSBvYnZpb3VzIGFyZWEsIGJ1dCBhbHNvIGNvbnNpZGVyaW5nIHRoZSBicm9hZGVyIHBpY3R1cmUuIFNvLCByaWdodCBub3csIHRoZSBtb3N0IHByZXNzaW5nIHRoaW5nIGlzIHRoYXQgSSBuZWVkIHRvIGV4cGFuZCB0aGUgc2NvcGUgYSBiaXQuIExldCYjMzk7cyBzZWUgaWYgd2UmIzM5O3ZlIGFkZHJlc3NlZCB0aGlzIHdpdGggYGFsbG9jX3BhcmFtX3RhcmdldGAgYXMgd2VsbC4gUGVyaGFwcyB0aGUgaXNzdWVzIHN0ZW0gZnJvbSBob3cgdGhhdCYjMzk7cyBiZWluZyBoYW5kbGVkLiBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUgdG8gZW5zdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2MjA6XHQvKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cbjI2MjE6XHRzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbjI2MjI6XHRcdFx0XHRcdFx0XHQgICAgaW50IGNtZGxpbmVfY291bnQpXG4yNjIzOlx0e1xuMjYyNDpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbjI2MjU6XHRcdGludCBlcnI7XG4yNjI2Olx0XG4yNjI3Olx0XHRudCA9IGFsbG9jX2FuZF9pbml0KCk7XG4yNjI4Olx0XHRpZiAoIW50KSB7XG4yNjI5Olx0XHRcdGVyciA9IC1FTk9NRU07XG4yNjMwOlx0XHRcdGdvdG8gZmFpbDtcbjI2MzE6XHRcdH1cbjI2MzI6XHRcbjI2MzM6XHRcdGlmICgqdGFyZ2V0X2NvbmZpZyA9PSAmIzM5OyYjNDM7JiMzOTspIHtcbjI2MzQ6XHRcdFx0bnQtXHUwMDNlZXh0ZW5kZWQgPSB0cnVlO1xuMjYzNTpcdFx0XHR0YXJnZXRfY29uZmlnJiM0MzsmIzQzOztcbjI2MzY6XHRcdH1cbjI2Mzc6XHRcbjI2Mzg6XHRcdGlmICgqdGFyZ2V0X2NvbmZpZyA9PSAmIzM5O3ImIzM5Oykge1xuMjYzOTpcdFx0XHRpZiAoIW50LVx1MDAzZWV4dGVuZGVkKSB7XG4yNjQwOlx0XHRcdFx0cHJfZXJyKFwmIzM0O05ldGNvbnNvbGUgY29uZmlndXJhdGlvbiBlcnJvci4gUmVsZWFzZSBmZWF0dXJlIHJlcXVpcmVzIGV4dGVuZGVkIGxvZyBtZXNzYWdlXCYjMzQ7KTtcbjI2NDE6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjY0MjpcdFx0XHRcdGdvdG8gZmFpbDtcbjI2NDM6XHRcdFx0fVxuMjY0NDpcdFx0XHRudC1cdTAwM2VyZWxlYXNlID0gdHJ1ZTtcbjI2NDU6XHRcdFx0dGFyZ2V0X2NvbmZpZyYjNDM7JiM0Mzs7XG4yNjQ2Olx0XHR9XG4yNjQ3Olx0XG4yNjQ4Olx0XHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4yNjQ5Olx0XHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKG50LCB0YXJnZXRfY29uZmlnKTtcbjI2NTA6XHRcdGlmIChlcnIpXG4yNjUxOlx0XHRcdGdvdG8gZmFpbDtcbjI2NTI6XHRcbjI2NTM6XHRcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2wgaXNcbjI2NTQ6XHRcdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZS4gVGhlIHRhcmdldCBpcyBub3RcbjI2NTU6XHRcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxuMjY1NjpcdFx0ICogbWlycm9yIHRoZSBjb25maWdmcyBwYXRoIGZvciBzeW1tZXRyeS5cbjI2NTc6XHRcdCAqL1xuMjY1ODpcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbjI2NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgRGVlcGVyOiBFeHBhbmRpbmcgdGhlIFNjb3BlIG9mIHRoZSBJbnF1aXJ5KioKCk9rYXksIEkmIzM5O3ZlIGp1c3QgYmVlbiBsb29raW5nIGF0IGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBtb2R1bGUsIGJ1dCBJIHRoaW5rIEkgbmVlZCB0byBicm9hZGVuIG15IGludmVzdGlnYXRpb24gYSBiaXQuIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIFtpbXBsaWVkIHByZXZpb3VzIHRvcGljLCBlLmcuLCBlcnJvciBoYW5kbGluZywgYSBzcGVjaWZpYyBkcml2ZXJdLiBIb3dldmVyLCBpdCYjMzk7cyBvY2N1cnJlZCB0byBtZSB0aGF0IGEgcmVsYXRlZCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCwgbWlnaHQgYmUgcmVsZXZhbnQgYW5kIEkgc2hvdWxkbiYjMzk7dCBpZ25vcmUgaXQuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgY2hhbmdlIG9yIGlzc3VlIGluIG9uZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIGluIHRoZSBvdGhlci4gSXQgbWlnaHQgcHJvdmlkZSBtb3JlIGNvbnRleHQgb3IgcmV2ZWFsIGEgbW9yZSBob2xpc3RpYyBwZXJzcGVjdGl2ZSBvbiB0aGUgcHJvYmxlbSBvciB0YXNrIGF0IGhhbmQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIG9yIG1vZHVsZSBhbmQgZXhhbWluZSB0aGUgbG9naWMgdGhlcmUgdG9vLCBhcyBwYXJ0IG9mIHRoaXMgYW5hbHlzaXMuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgaW50ZXJwbGF5IG9yIHNoYXJlZCByZXNvdXJjZXMsIGFuZCBJIHdhbnQgdG8gY292ZXIgYWxsIGJhc2VzIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzQ1Olx0ICogR3JvdXAgb3BlcmF0aW9ucyBhbmQgdHlwZSBmb3IgbmV0Y29uc29sZV9zdWJzeXMuXG4xNzQ2Olx0ICovXG4xNzQ3Olx0XG4xNzQ4Olx0c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4xNzQ5Olx0XHRcdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSlcbjE3NTA6XHR7XG4xNzUxOlx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuMTc1MjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjE3NTM6XHRcbjE3NTQ6XHRcdC8qIENoZWNraW5nIGlmIGEgdGFyZ2V0IGJ5IHRoaXMgbmFtZSB3YXMgY3JlYXRlZCBhdCBib290IHRpbWUuICBJZiBzbyxcbjE3NTU6XHRcdCAqIGF0dGFjaCBhIGNvbmZpZ2ZzIGVudHJ5IHRvIHRoYXQgdGFyZ2V0LiAgVGhpcyBlbmFibGVzIGR5bmFtaWNcbjE3NTY6XHRcdCAqIGNvbnRyb2wuXG4xNzU3Olx0XHQgKi9cbjE3NTg6XHRcdGlmICghc3RybmNtcChuYW1lLCBORVRDT05TT0xFX1BBUkFNX1RBUkdFVF9QUkVGSVgsXG4xNzU5Olx0XHRcdCAgICAgc3RybGVuKE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCkpKSB7XG4xNzYwOlx0XHRcdG50ID0gZmluZF9jbWRsaW5lX3RhcmdldChuYW1lKTtcbjE3NjE6XHRcdFx0aWYgKG50KSB7XG4xNzYyOlx0XHRcdFx0aW5pdF90YXJnZXRfY29uZmlnX2dyb3VwKG50LCBuYW1lKTtcbjE3NjM6XHRcdFx0XHRyZXR1cm4gXHUwMDI2bnQtXHUwMDNlZ3JvdXA7XG4xNzY0Olx0XHRcdH1cbjE3NjU6XHRcdH1cbjE3NjY6XHRcbjE3Njc6XHRcdG50ID0gYWxsb2NfYW5kX2luaXQoKTtcbjE3Njg6XHRcdGlmICghbnQpXG4xNzY5Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTc3MDpcdFxuMTc3MTpcdFx0LyogSW5pdGlhbGl6ZSB0aGUgY29uZmlnX2dyb3VwIG1lbWJlciAqL1xuMTc3MjpcdFx0aW5pdF90YXJnZXRfY29uZmlnX2dyb3VwKG50LCBuYW1lKTtcbjE3NzM6XHRcbjE3NzQ6XHRcdC8qIEFkZGluZywgYnV0IGl0IGlzIGRpc2FibGVkICovXG4xNzc1Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4xNzc2Olx0XHRsaXN0X2FkZChcdTAwMjZudC1cdTAwM2VsaXN0LCBcdTAwMjZ0YXJnZXRfbGlzdCk7XG4xNzc3Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbjE3Nzg6XHRcbjE3Nzk6XHRcdHJldHVybiBcdTAwMjZudC1cdTAwM2Vncm91cDtcbjE3ODA6XHR9XG4xNzgxOlx0XG4xNzgyOlx0c3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbjE3ODM6XHRcdFx0XHRcdCAgIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbjE3ODQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDU4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW5ldF9hZGRyIFN0cnVjdHVyZSBpbiBuZXRjb25zb2xlLmMqKgoKT2theSwgc28gYGFsbG9jX2FuZF9pbml0YCB1c2VzIGBremFsbG9jX29iaigqbnQpYCwgbWVhbmluZyB0aGUgYG50YCBzdHJ1Y3QgaXMgY29tcGxldGVseSB6ZXJvLWluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gU3BlY2lmaWNhbGx5LCB0aGlzIG1lYW5zIHRoZSBgZmFtaWx5YCBtZW1iZXIsIHdoaWNoIEkgc2VlIGlzIHBhcnQgb2YgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdHVyZSwgd2lsbCBzdGFydCBhcyBgMGAsIHdoaWNoIHRyYW5zbGF0ZXMgdG8gYEFGX1VOU1BFQ2AuIFRoZSBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCBtZW1iZXJzLCBhbHNvIGBpbmV0X2FkZHJgIHN0cnVjdHMsIGFyZSBhbHNvIHplcm9lZCBvdXQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpbmV0X2FkZHJgIGlzIHVzZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgcG90ZW50aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gSVB2NCBhbmQgSVB2Ni4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIGhhbmRsZXMgaXQ6CgpgYGBjCnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcikKewoJY29uc3QgY2hhciAqZW5kID0gTlVMTDsKCWludCBsZW47CgoJbGVuID0gc3RybGVuKHN0cik7CglpZiAobGVuID09IDApCgkJcmV0dXJuIC0xOwoJaWYgKHN0cltsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCgkJbGVuIC09IDE7CgoJaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aXAsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKCSAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xuJiMzOTspKSB7CgkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKCQlyZXR1cm4gMDsKCX0KCglpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJmFtcDsmYW1wOwoJICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aW42LCAtMSwgJmFtcDtlbmQpICZndDsgMCAmYW1wOyZhbXA7CgkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewoJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwoJCXJldHVybiAwOwoJfQoKCXJldHVybiAtMTsKfQpgYGAKCk9rYXksIHNvIHdoZW4gYGluNF9wdG9uYCBzdWNjZWVkcywgaXQgd3JpdGVzIDQgYnl0ZXMgdG8gYGFkZHItJmd0O2lwYCBhbmQgc2V0cyBgYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVGAuIE1ha2VzIHNlbnNlLiBXaGVuIGBpbjZfcHRvbmAgc3VjY2VlZHMsIGl0IHdyaXRlcyAxNiBieXRlcyB0byBgYWRkci0mZ3Q7aW42YCwgYW5kIHNldHMgYGFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2YC4gVGhlIGludGVyZXN0aW5nIGJpdCBpcyBob3cgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgYXJlIHVwZGF0ZWQsIGJlY2F1c2UgdGhleSBhcmUgYGluZXRfYWRkcmAgc3RydWN0dXJlcywgd2hpY2ggYXJlIGxpa2VseSB1bmlvbnMuCgpUaGUgdnVsbmVyYWJpbGl0eSBjb3VsZCBjb21lIGludG8gcGxheSB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXMuIGBsb2NhbF9pcF9zdG9yZWAgaXMgYSBnb29kIGV4YW1wbGUuCgpgYGBjCglpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKCQlnb3RvIG91dF91bmxvY2s7CmBgYAoKTGV0JiMzOTtzIHNheSBgbnQtJmd0O2xvY2FsX2lwYCB3YXMgcHJldmlvdXNseSBJUHY2IChtZWFuaW5nIHRoZSBgaW42YCBtZW1iZXIgaGVsZCAxNiBieXRlcykuIE5vdywgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgcGFyc2VzIGFuIElQdjQgYWRkcmVzcy4gIGBpbjRfcHRvbmAgd3JpdGVzIG9ubHkgNCBieXRlcyBpbnRvIGBhZGRyLSZndDtpcGAgKHRoZSBzdGFydCBvZiB0aGUgdW5pb24pLCBhbmQgc2V0cyBgYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVGAuICBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIHdoZW4gYGFkZHItJmd0O2ZhbWlseWAgaXMgYEFGX0lORVRgLCBpcyBhbnl0aGluZyBhY3R1YWxseSAqcmVhZGluZyogdGhlICpyZW1haW5pbmcqIDEyIGJ5dGVzIG9mIHRoZSB1bmlvbj8gSWYgbm90LCB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIG9yIGNvcnJ1cHRpb24uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBzdWJzZXF1ZW50IGNvZGUgcGF0aHMgbWlnaHQgdXNlIHRoZSBgaW42YCBtZW1iZXIgYWZ0ZXIgdGhpcyBraW5kIG9mIHRyYW5zaXRpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGFsbCBhY2Nlc3NlcyB0byBib3RoIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIHRvIGJlIHN1cmUuIFNvLCBsZXQmIzM5O3MgZ3JlcCBmb3IgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBUaGF0IHNob3VsZCByZXZlYWwgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhlc2UgbWVtYmVycyBhcmUgdXNlZCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyhsb2NhbF9pcHxyZW1vdGVfaXApJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzI9c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDQtICpcdFx0bG9jYWxfbWFjXHQocmVhZC1vbmx5KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNTogKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDY6ICogQHJlbW90ZV9pcDpcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3LSAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTg9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM1LVx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM2Olx0c3RydWN0IGluZXRfYWRkclx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzctXHR1MTZcdFx0XHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDAxPXN0YXRpYyBjaGFyICpuZXRjb25zX2VncmVzc19kZXYoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpidWYsIHNpemVfdCBidWZzeilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDEwLS8qXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDExOiAqIFBvcHVsYXRlIHRoZSB0YXJnZXQmIzM5O3MgbG9jYWxfaXAgd2l0aCB0aGUgSVB2NiBhZGRyZXNzIGZyb20gbmRldi5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MTItICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDEzPXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDMzLVx0XHRcdGlmICghIShpcHY2X2FkZHJfdHlwZShcdTAwMjZpZnAtXHUwMDNlYWRkcikgXHUwMDI2IElQVjZfQUREUl9MSU5LTE9DQUwpICE9XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDM0Olx0XHRcdFx0ISEoaXB2Nl9hZGRyX3R5cGUoXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNikgXHUwMDI2IElQVjZfQUREUl9MSU5LTE9DQUwpKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQzNS1cdFx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQzNi1cdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQmIzM5O3MgcmV0dXJuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDM3Olx0XHRcdG50LVx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cdTAwM2VhZGRyO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQzODpcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzktXHRcdFx0ZXJyID0gMDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDQ5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1MDpcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjYgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDUxLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ1NC0vKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1NTogKiBQb3B1bGF0ZSB0aGUgdGFyZ2V0JiMzOTtzIGxvY2FsX2lwIHdpdGggdGhlIElQdjQgYWRkcmVzcyBmcm9tIG5kZXYuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ1Nz1zdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ3OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0Nzk6XHRudC1cdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cdTAwM2VpZmFfbG9jYWw7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDgwOlx0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0ODE6XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUCAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDgyLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00ODY9c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDk0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ5NTpcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ5Ni1cdFx0bnBfZXJyKG5wLCBcJiMzNDtyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00OTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTAwOlx0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTAxOlx0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTAyLVx0XHRucF9lcnIobnAsIFwmIzM0O2xvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU0MjpcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTQzOlx0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NDQtXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NjctXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTY4Olx0XHRtZW1zZXQoXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAsIDAsIHNpemVvZihudC1cdTAwM2Vsb2NhbF9pcCkpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2OS1cdG5ldGRldl9wdXQobmRldiwgXHUwMDI2bnAtXHUwMDNlZGV2X3RyYWNrZXIpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MjU9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI5LVx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzMwOlx0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzMxLVx0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUCB1bnNldFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzMyOlx0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjczMzpcdFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNC1cdGVsc2VcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MzU6XHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM2LVx0bnBfaW5mbyhucCwgXCYjMzQ7aW50ZXJmYWNlIG5hbWUgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBucC1cdTAwM2VkZXZfbmFtZSk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczOC1cdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBwb3J0ICVkXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM5Olx0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc0MC1cdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQIHVuc2V0XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NDE6XHRlbHNlIGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc0MjpcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQzLVx0ZWxzZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc0NDpcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc0NS1cdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcblwmIzM0OywgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTc1MT1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5MS0gKlx0XHRcdFx0fFx0cmVtb3RlX3BvcnRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3OTI6ICpcdFx0XHRcdHxcdGxvY2FsX2lwXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzkzOiAqXHRcdFx0XHR8XHRyZW1vdGVfaXBcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03OTQtICpcdFx0XHRcdHxcdGxvY2FsX21hY1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04NzA9c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3NTpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg3Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg3OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4Nzk6XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODAtXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODE6XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg4MjpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODMtXHRlbHNlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODg0Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODUtfVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODc6c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg5MTpcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OTItXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTM6XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTQ6XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5NS1cdGVsc2VcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTY6XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OTctfVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjE0PXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjM2OnN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzctXHRcdHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI0OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjQ5Olx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjUwLVx0XHRnb3RvIG91dF91bmxvY2s7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI1ODpzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1OS1cdCAgICAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNzAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI3MTpcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNzItXHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY3Mz1DT05GSUdGU19BVFRSKCwgcmVtb3RlX3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NzQ6Q09ORklHRlNfQVRUUigsIGxvY2FsX2lwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjc1OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzYtQ09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2ODE9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2ODctXHRcdTAwMjZhdHRyX3JlbW90ZV9wb3J0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2ODg6XHRcdTAwMjZhdHRyX2xvY2FsX2lwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2ODk6XHRcdTAwMjZhdHRyX3JlbW90ZV9pcCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjkwLVx0XHUwMDI2YXR0cl9sb2NhbF9tYWMsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwNzA9c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA4MC1cdHVkcGgtXHUwMDNlY2hlY2sgPSAwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwODE6XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDgyOlx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDgzOlx0XHRcdFx0XHQgICAgICBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODQtXHRcdFx0XHRcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDg2LVx0ZWxzZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwODc6XHRcdHVkcGgtXHUwMDNlY2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYyhudC1cdTAwM2Vsb2NhbF9pcC5pcCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDg4Olx0XHRcdFx0XHRcdG50LVx1MDAzZXJlbW90ZV9pcC5pcCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDg5LVx0XHRcdFx0XHRcdHVkcF9sZW4sIElQUFJPVE9fVURQLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTEzPXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjEtXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjEyMjpcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjMtXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMjg9c3RhdGljIHZvaWQgcHVzaF9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNDktXHRpcGgtXHUwMDNlY2hlY2sgPSAwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTA6XHRwdXRfdW5hbGlnbmVkKG50LVx1MDAzZWxvY2FsX2lwLmlwLCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTE6XHRwdXRfdW5hbGlnbmVkKG50LVx1MDAzZXJlbW90ZV9pcC5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUyLVx0aXBoLVx1MDAzZWNoZWNrID0gaXBfZmFzdF9jc3VtKCh1bnNpZ25lZCBjaGFyICopaXBoLCBpcGgtXHUwMDNlaWhsKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1Nj1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cdGlwNmgtXHUwMDNlaG9wX2xpbWl0ID0gMzI7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3NDpcdGlwNmgtXHUwMDNlc2FkZHIgPSBudC1cdTAwM2Vsb2NhbF9pcC5pbjY7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3NTpcdGlwNmgtXHUwMDNlZGFkZHIgPSBudC1cdTAwM2VyZW1vdGVfaXAuaW42O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzYtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxODA9c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5MC1cdHVkcF9sZW4gPSBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTE6XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTkyLVx0XHRpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LVx0XHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUzMz1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTU0LVx0XHQqZGVsaW0gPSAwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NTU6XHRcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCkgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU1Ni1cdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU5Ny1cdCpkZWxpbSA9IDA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU5ODpcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1OTktXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2MDA6XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAxOlx0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MDItXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQzOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGludG8gcmVnYXJkaW5nIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgOgoKKipEaXNzZWN0aW5nIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCBhbmQgVGFyZ2V0IEVuYWJsZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAg4oCTIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0YXJnZXQgZW5hYmxlbWVudCB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgc2VlbXMgdG8gYmUgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGNyaXRpY2FsIHNlY3Rpb24gZnJvbSBsaW5lIDQ4MCB0byA1NzUuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGlzIGNvZGUgY2h1bmsgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRhcmdldCBmb3IgdGhlIGNvbnNvbGUgaXMgc2V0IHVwIGFuZCBhY3RpdmF0ZWQgdmlhIHRoZSBuZXRwb2xsIG1lY2hhbmlzbS4gSXQmIzM5O3MgbGlrZWx5IGluIHRoaXMgc2VjdGlvbiBJJiMzOTtsbCBmaW5kIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgd2hlcmUgYW5kIGhvdyBjb25zb2xlIG1lc3NhZ2VzIGFyZSB1bHRpbWF0ZWx5IHJvdXRlZCwgYW5kIHdoYXQgdHJpZ2dlcnMgdGhhdCByZWRpcmVjdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGFsbG93IG1lIHRvIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGEga2V5IGVsZW1lbnQgb2YgbmV0Y29uc29sZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDg1Olx0XG4gNDg2Olx0c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiA0ODc6XHR7XG4gNDg4Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zO1xuIDQ4OTpcdFx0Y2hhciBidWZbTUFDX0FERFJfU1RSX0xFTiAmIzQzOyAxXTtcbiA0OTA6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcbiA0OTE6XHRcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIDQ5MjpcdFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIDQ5MzpcdFx0aW50IGVycjtcbiA0OTQ6XHRcbiA0OTU6XHRcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuIDQ5NjpcdFx0XHRucF9lcnIobnAsIFwmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG4gNDk3Olx0XHRcdHJldHVybiAtRURFU1RBRERSUkVRO1xuIDQ5ODpcdFx0fVxuIDQ5OTpcdFxuIDUwMDpcdFx0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4gNTAxOlx0XHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcbiA1MDI6XHRcdFx0bnBfZXJyKG5wLCBcJiMzNDtsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG4gNTAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUwNDpcdFx0fVxuIDUwNTpcdFxuIDUwNjpcdFx0cnRubF9sb2NrKCk7XG4gNTA3Olx0XHRpZiAobnAtXHUwMDNlZGV2X25hbWVbMF0pXG4gNTA4Olx0XHRcdG5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLVx1MDAzZWRldl9uYW1lKTtcbiA1MDk6XHRcdGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobnAtXHUwMDNlZGV2X21hYykpXG4gNTEwOlx0XHRcdG5kZXYgPSBkZXZfZ2V0Ynlod2FkZHIobmV0LCBBUlBIUkRfRVRIRVIsIG5wLVx1MDAzZWRldl9tYWMpO1xuIDUxMTpcdFxuIDUxMjpcdFx0aWYgKCFuZGV2KSB7XG4gNTEzOlx0XHRcdG5wX2VycihucCwgXCYjMzQ7JXMgZG9lc24mIzM5O3QgZXhpc3QsIGFib3J0aW5nXFxuXCYjMzQ7LFxuIDUxNDpcdFx0XHQgICAgICAgbmV0Y29uc19lZ3Jlc3NfZGV2KG5wLCBidWYsIHNpemVvZihidWYpKSk7XG4gNTE1Olx0XHRcdGVyciA9IC1FTk9ERVY7XG4gNTE2Olx0XHRcdGdvdG8gdW5sb2NrO1xuIDUxNzpcdFx0fVxuIDUxODpcdFx0bmV0ZGV2X2hvbGQobmRldiwgXHUwMDI2bnAtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuIDUxOTpcdFxuIDUyMDpcdFx0aWYgKG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChuZGV2KSkge1xuIDUyMTpcdFx0XHRucF9lcnIobnAsIFwmIzM0OyVzIGlzIGEgc2xhdmUgZGV2aWNlLCBhYm9ydGluZ1xcblwmIzM0OyxcbiA1MjI6XHRcdFx0ICAgICAgIG5ldGNvbnNfZWdyZXNzX2RldihucCwgYnVmLCBzaXplb2YoYnVmKSkpO1xuIDUyMzpcdFx0XHRlcnIgPSAtRUJVU1k7XG4gNTI0Olx0XHRcdGdvdG8gcHV0O1xuIDUyNTpcdFx0fVxuIDUyNjpcdFxuIDUyNzpcdFx0aWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XG4gNTI4Olx0XHRcdG5wX2luZm8obnAsIFwmIzM0O2RldmljZSAlcyBub3QgdXAgeWV0LCBmb3JjaW5nIGl0XFxuXCYjMzQ7LFxuIDUyOTpcdFx0XHRcdG5ldGNvbnNfZWdyZXNzX2RldihucCwgYnVmLCBzaXplb2YoYnVmKSkpO1xuIDUzMDpcdFxuIDUzMTpcdFx0XHRlcnIgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcbiA1MzI6XHRcdFx0aWYgKGVycikge1xuIDUzMzpcdFx0XHRcdG5wX2VycihucCwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXNcXG5cJiMzNDssIG5kZXYtXHUwMDNlbmFtZSk7XG4gNTM0Olx0XHRcdFx0Z290byBwdXQ7XG4gNTM1Olx0XHRcdH1cbiA1MzY6XHRcbiA1Mzc6XHRcdFx0cnRubF91bmxvY2soKTtcbiA1Mzg6XHRcdFx0bmV0Y29uc193YWl0X2NhcnJpZXIobnAsIG5kZXYpO1xuIDUzOTpcdFx0XHRydG5sX2xvY2soKTtcbiA1NDA6XHRcdH1cbiA1NDE6XHRcbiA1NDI6XHRcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG4gNTQzOlx0XHRcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIDU0NDpcdFx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTtcbiA1NDU6XHRcdFx0ZWxzZVxuIDU0NjpcdFx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbiA1NDc6XHRcdFx0aWYgKGVycilcbiA1NDg6XHRcdFx0XHRnb3RvIHB1dDtcbiA1NDk6XHRcdFx0aXBfb3ZlcndyaXR0ZW4gPSB0cnVlO1xuIDU1MDpcdFx0fVxuIDU1MTpcdFxuIDU1MjpcdFx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBuZGV2KTtcbiA1NTM6XHRcdGlmIChlcnIpXG4gNTU0Olx0XHRcdGdvdG8gcHV0O1xuIDU1NTpcdFx0cnRubF91bmxvY2soKTtcbiA1NTY6XHRcbiA1NTc6XHRcdC8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtXHUwMDNlbnBpbmZvXG4gNTU4Olx0XHQgKiB3YXMgdmlzaWJsZSBoYXZlIGV4aXRlZCBiZWZvcmUgd2Ugc3RhcnQgY2FsbGluZyBOQVBJIHBvbGwuXG4gNTU5Olx0XHQgKiBOQVBJIHNraXBzIGxvY2tpbmcgaWYgZGV2LVx1MDAzZW5waW5mbyBpcyBOVUxMLlxuIDU2MDpcdFx0ICovXG4gNTYxOlx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiA1NjI6XHRcbiA1NjM6XHRcdHJldHVybiAwO1xuIDU2NDpcdFxuIDU2NTpcdHB1dDpcbiA1NjY6XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobnAtXHUwMDNlZGV2KTtcbiA1Njc6XHRcdGlmIChpcF9vdmVyd3JpdHRlbilcbiA1Njg6XHRcdFx0bWVtc2V0KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLCAwLCBzaXplb2YobnQtXHUwMDNlbG9jYWxfaXApKTtcbiA1Njk6XHRcdG5ldGRldl9wdXQobmRldiwgXHUwMDI2bnAtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIDU3MDpcdHVubG9jazpcbiA1NzE6XHRcdHJ0bmxfdW5sb2NrKCk7XG4gNTcyOlx0XHRyZXR1cm4gZXJyO1xuIDU3MzpcdH1cbiA1NzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZW5hYmxlZGAgRmxhZyBCZWhhdmlvcioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBgZW5hYmxlZGAgZmxhZyBhY3R1YWxseSBmdW5jdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQmIzM5O3Mgc2V0LCB1bnNldCwgb3IgbW9kaWZpZWQgZHVyaW5nIHJ1bnRpbWUuIFRoaXMgcmVxdWlyZXMgbWUgdG8gdGhvcm91Z2hseSBkaXNzZWN0IGl0cyBiZWhhdmlvciBpbiBhbGwgc3RhdGVzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIGhvdyB0aGUgdmFyaWFibGUgaW5mbHVlbmNlcyB0aGUgb3ZlcmFsbCBwcm9ncmFtIGZsb3cuCgpTbywgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVhZCB0aGUgY29kZSB0aGF0IGludGVyYWN0cyB3aXRoIGBlbmFibGVkX3N0b3JlYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCByb3VnaGx5IGFyb3VuZCBsaW5lcyAxMDEwIHRvIDExMTAuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRoZXNlIHN0YXRlcyBwcm9wYWdhdGUgdGhyb3VnaG91dCB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAxMDpcdCAqIFRoZSB1c2VyIGlzIGV4cGVjdGVkIHRvIHNldCB0aGUgZGVzaXJlZCBwYXJhbWV0ZXJzIGZpcnN0ICh3aGljaFxuMTAxMTpcdCAqIHdvdWxkIGVuYWJsZSBoaW0gdG8gZHluYW1pY2FsbHkgYWRkIG5ldyBuZXRwb2xsIHRhcmdldHMgZm9yIG5ld1xuMTAxMjpcdCAqIG5ldHdvcmsgaW50ZXJmYWNlcyBhcyBhbmQgd2hlbiB0aGV5IGNvbWUgdXApLlxuMTAxMzpcdCAqL1xuMTAxNDpcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuMTAxNTpcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbjEwMTY6XHR7XG4xMDE3Olx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuMTAxODpcdFx0Ym9vbCBlbmFibGVkLCBjdXJyZW50X2VuYWJsZWQ7XG4xMDE5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMTAyMDpcdFx0c3NpemVfdCByZXQ7XG4xMDIxOlx0XG4xMDIyOlx0XHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuMTAyMzpcdFx0cmV0ID0ga3N0cnRvYm9vbChidWYsIFx1MDAyNmVuYWJsZWQpO1xuMTAyNDpcdFx0aWYgKHJldClcbjEwMjU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTAyNjpcdFxuMTAyNzpcdFx0LyogV2hlbiB0aGUgdXNlciBleHBsaWNpdGx5IGVuYWJsZXMgb3IgZGlzYWJsZXMgYSB0YXJnZXQgdGhhdCBpc1xuMTAyODpcdFx0ICogY3VycmVudGx5IGRlYWN0aXZhdGVkLCByZXNldCBpdHMgc3RhdGUgdG8gZGlzYWJsZWQuIFRoZSBERUFDVElWQVRFRFxuMTAyOTpcdFx0ICogc3RhdGUgb25seSB0cmFja3MgaW50ZXJmYWNlLWRyaXZlbiBkZWFjdGl2YXRpb24gYW5kIHNob3VsZCBfbm90X1xuMTAzMDpcdFx0ICogcGVyc2lzdCB3aGVuIHRoZSB1c2VyIG1hbnVhbGx5IGNoYW5nZXMgdGhlIHRhcmdldCYjMzk7cyBlbmFibGVkIHN0YXRlLlxuMTAzMTpcdFx0ICovXG4xMDMyOlx0XHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQpXG4xMDMzOlx0XHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4xMDM0Olx0XG4xMDM1Olx0XHRyZXQgPSAtRUlOVkFMO1xuMTAzNjpcdFx0Y3VycmVudF9lbmFibGVkID0gbnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRDtcbjEwMzc6XHRcdGlmIChlbmFibGVkID09IGN1cnJlbnRfZW5hYmxlZCkge1xuMTAzODpcdFx0XHRwcl9pbmZvKFwmIzM0O25ldHdvcmsgbG9nZ2luZyBoYXMgYWxyZWFkeSAlc1xcblwmIzM0OyxcbjEwMzk6XHRcdFx0XHRjdXJyZW50X2VuYWJsZWQgPyBcJiMzNDtzdGFydGVkXCYjMzQ7IDogXCYjMzQ7c3RvcHBlZFwmIzM0Oyk7XG4xMDQwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEwNDE6XHRcdH1cbjEwNDI6XHRcbjEwNDM6XHRcdGlmIChlbmFibGVkKSB7XHQvKiB0cnVlICovXG4xMDQ0Olx0XHRcdGlmIChudC1cdTAwM2VyZWxlYXNlIFx1MDAyNlx1MDAyNiAhbnQtXHUwMDNlZXh0ZW5kZWQpIHtcbjEwNDU6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Tm90IGVuYWJsaW5nIG5ldGNvbnNvbGUuIFJlbGVhc2UgZmVhdHVyZSByZXF1aXJlcyBleHRlbmRlZCBsb2cgbWVzc2FnZVwmIzM0Oyk7XG4xMDQ2Olx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTA0NzpcdFx0XHR9XG4xMDQ4Olx0XG4xMDQ5Olx0XHRcdGlmIChudC1cdTAwM2VleHRlbmRlZCBcdTAwMjZcdTAwMjYgIWNvbnNvbGVfaXNfcmVnaXN0ZXJlZChcdTAwMjZuZXRjb25zb2xlX2V4dCkpIHtcbjEwNTA6XHRcdFx0XHRuZXRjb25zb2xlX2V4dC5mbGFncyB8PSBDT05fRU5BQkxFRDtcbjEwNTE6XHRcdFx0XHRyZWdpc3Rlcl9jb25zb2xlKFx1MDAyNm5ldGNvbnNvbGVfZXh0KTtcbjEwNTI6XHRcdFx0fVxuMTA1MzpcdFxuMTA1NDpcdFx0XHQvKiBVc2VyIG1pZ2h0IGJlIGVuYWJsaW5nIHRoZSBiYXNpYyBmb3JtYXQgdGFyZ2V0IGZvciB0aGUgdmVyeVxuMTA1NTpcdFx0XHQgKiBmaXJzdCB0aW1lLCBtYWtlIHN1cmUgdGhlIGNvbnNvbGUgaXMgcmVnaXN0ZXJlZC5cbjEwNTY6XHRcdFx0ICovXG4xMDU3Olx0XHRcdGlmICghbnQtXHUwMDNlZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFjb25zb2xlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2bmV0Y29uc29sZSkpIHtcbjEwNTg6XHRcdFx0XHRuZXRjb25zb2xlLmZsYWdzIHw9IENPTl9FTkFCTEVEO1xuMTA1OTpcdFx0XHRcdHJlZ2lzdGVyX2NvbnNvbGUoXHUwMDI2bmV0Y29uc29sZSk7XG4xMDYwOlx0XHRcdH1cbjEwNjE6XHRcbjEwNjI6XHRcdFx0LypcbjEwNjM6XHRcdFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxuMTA2NDpcdFx0XHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxuMTA2NTpcdFx0XHQgKi9cbjEwNjY6XHRcdFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xuMTA2NzpcdFxuMTA2ODpcdFx0XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sXG4xMDY5Olx0XHRcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xuMTA3MDpcdFx0XHQgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkXG4xMDcxOlx0XHRcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXG4xMDcyOlx0XHRcdCAqIHN0YXRlLlxuMTA3MzpcdFx0XHQgKi9cbjEwNzQ6XHRcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbjEwNzU6XHRcbjEwNzY6XHRcdFx0cmV0ID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcbjEwNzc6XHRcdFx0aWYgKHJldCkge1xuMTA3ODpcdFx0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuMTA3OTpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEwODA6XHRcdFx0fVxuMTA4MTpcdFxuMTA4MjpcdFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0VOQUJMRUQ7XG4xMDgzOlx0XHRcdHByX2luZm8oXCYjMzQ7bmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcXG5cJiMzNDspO1xuMTA4NDpcdFx0fSBlbHNlIHtcdC8qIGZhbHNlICovXG4xMDg1Olx0XHRcdC8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbmV0Y29uc29sZSBiZWZvcmUgY2xlYW5pbmcgaXQgdXBcbjEwODY6XHRcdFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXG4xMDg3Olx0XHRcdCAqIG50LVx1MDAzZW5wLmRldiA9PSBOVUxMIGFuZCBudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEXG4xMDg4Olx0XHRcdCAqL1xuMTA4OTpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIElQIEFkZHJlc3MgVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gaG93IGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBsaWtlbHkgc3VzcGVjdHMg4oCTIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBJUCBwYWNrZXQgY29uc3RydWN0aW9uIGFuZCB0cmFuc21pc3Npb24uIE15IGd1dCB0ZWxscyBtZSB0byBsb29rIGF0IGBuZXRjb25zb2xlX3dyaXRlYCwgYHB1c2hfaXB2NGAsIGBwdXNoX2lwdjZgLCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB3aGVyZSBJUCBhZGRyZXNzIGluZm9ybWF0aW9uIHdvdWxkIGJlIGNyaXRpY2FsLiBJIGV4cGVjdCB0aGV5IGFyZSBlaXRoZXIgcmVhZGluZyB0aGUgSVAgZnJvbSBhbiBhZGRyZXNzLCBvciBpbmplY3RpbmcgaXQgaW50byB0aGUgSVAgaGVhZGVycy4KClRvIHN0YXJ0LCBJJiMzOTtsbCBmb2N1cyBvbiBgbmV0Y29uc29sZS5jYCwgc2luY2UgdGhhdOKAmXMgcHJvYmFibHkgdGhlIGZpcnN0IHRoaW5nIHRvIGludmVzdGlnYXRlLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGxpbmVzIDIxMjUgdG8gMjIyMCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBzcGVjaWZpYyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgSVAgYWRkcmVzc2VzLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIHJlbGF0ZWQgdG8gaG93IG5ldHdvcmsgY29uc29sZSBvdXRwdXQgaXMgaGFuZGxlZCBhbmQgY29uZmlndXJlZCwgd2hpY2ggY291bGQgaGVhdmlseSBpbmZsdWVuY2UgSVAgYWRkcmVzcyB1c2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMjU6XHRcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4yMTI2Olx0fVxuMjEyNzpcdFxuMjEyODpcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjEyOTpcdFx0XHQgICAgICBpbnQgbGVuKVxuMjEzMDpcdHtcbjIxMzE6XHRcdHN0YXRpYyBhdG9taWNfdCBpcF9pZGVudDtcbjIxMzI6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuMjEzMzpcdFx0aW50IGlwX2xlbjtcbjIxMzQ6XHRcbjIxMzU6XHRcdGlwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4yMTM2Olx0XG4yMTM3Olx0XHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjIxMzg6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuMjEzOTpcdFx0aXBoID0gaXBfaGRyKHNrYik7XG4yMTQwOlx0XG4yMTQxOlx0XHQvKiBpcGgtXHUwMDNldmVyc2lvbiA9IDQ7IGlwaC1cdTAwM2VpaGwgPSA1OyAqL1xuMjE0MjpcdFx0Kih1bnNpZ25lZCBjaGFyICopaXBoID0gMHg0NTtcbjIxNDM6XHRcdGlwaC1cdTAwM2V0b3MgPSAwO1xuMjE0NDpcdFx0cHV0X3VuYWxpZ25lZChodG9ucyhpcF9sZW4pLCBcdTAwMjZpcGgtXHUwMDNldG90X2xlbik7XG4yMTQ1Olx0XHRpcGgtXHUwMDNlaWQgPSBodG9ucyhhdG9taWNfaW5jX3JldHVybihcdTAwMjZpcF9pZGVudCkpO1xuMjE0NjpcdFx0aXBoLVx1MDAzZWZyYWdfb2ZmID0gMDtcbjIxNDc6XHRcdGlwaC1cdTAwM2V0dGwgPSA2NDtcbjIxNDg6XHRcdGlwaC1cdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fVURQO1xuMjE0OTpcdFx0aXBoLVx1MDAzZWNoZWNrID0gMDtcbjIxNTA6XHRcdHB1dF91bmFsaWduZWQobnQtXHUwMDNlbG9jYWxfaXAuaXAsIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4yMTUxOlx0XHRwdXRfdW5hbGlnbmVkKG50LVx1MDAzZXJlbW90ZV9pcC5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbjIxNTI6XHRcdGlwaC1cdTAwM2VjaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLVx1MDAzZWlobCk7XG4yMTUzOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4yMTU0Olx0fVxuMjE1NTpcdFxuMjE1NjpcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjE1NzpcdFx0XHQgICAgICBpbnQgbGVuKVxuMjE1ODpcdHtcbjIxNTk6XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuMjE2MDpcdFxuMjE2MTpcdFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbjIxNjI6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuMjE2MzpcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4yMTY0Olx0XG4yMTY1Olx0XHQvKiBpcDZoLVx1MDAzZXZlcnNpb24gPSA2OyBpcDZoLVx1MDAzZXByaW9yaXR5ID0gMDsgKi9cbjIxNjY6XHRcdCoodW5zaWduZWQgY2hhciAqKWlwNmggPSAweDYwO1xuMjE2NzpcdFx0aXA2aC1cdTAwM2VmbG93X2xibFswXSA9IDA7XG4yMTY4Olx0XHRpcDZoLVx1MDAzZWZsb3dfbGJsWzFdID0gMDtcbjIxNjk6XHRcdGlwNmgtXHUwMDNlZmxvd19sYmxbMl0gPSAwO1xuMjE3MDpcdFxuMjE3MTpcdFx0aXA2aC1cdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBsZW4pO1xuMjE3MjpcdFx0aXA2aC1cdTAwM2VuZXh0aGRyID0gSVBQUk9UT19VRFA7XG4yMTczOlx0XHRpcDZoLVx1MDAzZWhvcF9saW1pdCA9IDMyO1xuMjE3NDpcdFx0aXA2aC1cdTAwM2VzYWRkciA9IG50LVx1MDAzZWxvY2FsX2lwLmluNjtcbjIxNzU6XHRcdGlwNmgtXHUwMDNlZGFkZHIgPSBudC1cdTAwM2VyZW1vdGVfaXAuaW42O1xuMjE3NjpcdFxuMjE3NzpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4yMTc4Olx0fVxuMjE3OTpcdFxuMjE4MDpcdHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4yMTgxOlx0XHRcdFx0ICAgIGludCBsZW4pXG4yMTgyOlx0e1xuMjE4MzpcdFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4yMTg0Olx0XHRpbnQgdG90YWxfbGVuLCBpcF9sZW4sIHVkcF9sZW47XG4yMTg1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMjE4NjpcdFxuMjE4NzpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbjIxODg6XHRcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuMjE4OTpcdFxuMjE5MDpcdFx0dWRwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4yMTkxOlx0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbjIxOTI6XHRcdFx0aXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuMjE5MzpcdFx0ZWxzZVxuMjE5NDpcdFx0XHRpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuMjE5NTpcdFxuMjE5NjpcdFx0dG90YWxfbGVuID0gaXBfbGVuICYjNDM7IExMX1JFU0VSVkVEX1NQQUNFKG5wLVx1MDAzZWRldik7XG4yMTk3Olx0XG4yMTk4Olx0XHRza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICYjNDM7IG5wLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20sXG4yMTk5Olx0XHRcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xuMjIwMDpcdFx0aWYgKCFza2IpXG4yMjAxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjIwMjpcdFxuMjIwMzpcdFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4yMjA0Olx0XHRza2JfcHV0KHNrYiwgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMzYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaDogQSBEZWVwIERpdmUgaW50byBBZGRyZXNzIEZhbWlseSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYG5ldGNvbnNvbGVgIHN1YnN5c3RlbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7VGhpcyBpcyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGhvdyBJUCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGFkZHJlc3MgZmFtaWxpZXMgYW5kIHRoZSBjb25jZXB0IG9mIGFuICYjMzk7dW5zZXQmIzM5OyBJUC4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIHRob3JvdWdobHkuCgpGaXJzdCwgSSBzZWUgdGhlIGNvcmUgY2hhbmdlOiB3ZSYjMzk7cmUgbW92aW5nIGF3YXkgZnJvbSB0aGUgb2xkIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCB0aGUgYm9vbGVhbiBgaXB2NmAgZmxhZyB3aXRoaW4gdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0LCBhbmQgaW5zdGVhZCB1c2luZyBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgd2l0aCBhIGBmYW1pbHlgIG1lbWJlciAoYW4gYEFGXypgIHZhbHVlKSBhbmQgYSB1bmlvbiBmb3IgdGhlIElQIGFkZHJlc3MgaXRzZWxmIChlaXRoZXIgSVB2NCBvciBJUHY2KS4gIFRoZSBvbGQgYXBwcm9hY2gsIHdoZXJlIGAwLjAuMC4wYCB3YXMgdHJlYXRlZCBhcyAmIzM5O3Vuc2V0JiMzOTssIHNlZW1zIGNsdW5reS4gIFRoaXMgbmV3IHN0cnVjdHVyZSBhbGxvd3MgZm9yIGEgbW9yZSBleHBsaWNpdCBhbmQgY2xlYW5lciB3YXkgdG8gcmVwcmVzZW50IGFuIHVuc2V0IGFkZHJlc3MgdmlhIGBBRl9VTlNQRUNgLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBwYXRjaCBhbmQgc2VlIGhvdyB0aGlzIG5ldyBzdHJ1Y3R1cmUgaXMgaW50ZWdyYXRlZDoKCjEuICAqKmBuZXRjb25zX3Rha2VfaXB2NmAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NGA6KiogVGhlc2UgZnVuY3Rpb25zIG5vdyBleHBsaWNpdGx5IHNldCB0aGUgYGZhbWlseWAgbWVtYmVyIHRvIGBBRl9JTkVUNmAgb3IgYEFGX0lORVRgLCByZXNwZWN0aXZlbHksIGFsb25nc2lkZSB0aGUgYWRkcmVzcyB2YWx1ZSBpdHNlbGYuIFRoaXMgaXMgbXVjaCBjbGVhcmVyIHRoYW4gdGhlIGltcGxpY2l0IGJlaGF2aW9yIGJlZm9yZS4KCjIuICAqKmBuZXRjb25zX25ldHBvbGxfc2V0dXBgOioqIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gIFdlIGhhdmUgc2V2ZXJhbCBjaGVja3MgaGVyZS4gIElmIHRoZSByZW1vdGUgSVAgaXMgdW5zZXQsIGl0JiMzOTtzIGFuIGVycm9yLiBJZiB0aGUgbG9jYWwgSVAgaXMgc2V0LCB0aGVyZSYjMzk7cyBhIGNoZWNrIHRvIGVuc3VyZSBpdCBoYXMgdGhlIHNhbWUgZmFtaWx5IGFzIHRoZSByZW1vdGUgSVAuIElmIHRoZSBsb2NhbCBJUCAqaXMqIHVuc2V0LCB0aGUgY29kZSBub3cgKmV4cGxpY2l0bHkqIHRha2VzIHRoZSBJUHY2IG9yIElQdjQgYWRkcmVzcyBkZXBlbmRpbmcgb24gdGhlIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlseS4gVGhlIGBtZW1zZXRgIGlmIGFuIGVycm9yIG9jY3VycyBzZWVtcyBhIGxpdHRsZSBoZWF2eSBoYW5kZWQuCgozLiAgKipgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgOioqICBUaGlzIGZ1bmN0aW9uIG5vdyBjb3JyZWN0bHkgcHJpbnRzIHRoZSBhcHByb3ByaWF0ZSBJUCBhZGRyZXNzIHR5cGUgYmFzZWQgb24gdGhlIGBmYW1pbHlgIG1lbWJlciwgYmUgaXQgSVB2NCwgSVB2Niwgb3Igbm90aGluZy4KCjQuICAqKmBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgOioqICBUaGlzIHVzZXMgYGluNF9wdG9uYCBhbmQgYGluNl9wdG9uYCwgdG8gcGFyc2UgYWRkcmVzc2VzIGFuZCBzZXQgdGhlIGBmYW1pbHlgIG1lbWJlciBhcHByb3ByaWF0ZWx5LiBJdCYjMzk7cyBhIGNsZWFuIHdheSB0byBoYW5kbGUgdGhlIGlucHV0IGFuZCBjb3JyZWN0bHkgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4KCjUuICAqKmBsb2NhbF9pcF9zaG93YCAvIGByZW1vdGVfaXBfc2hvd2A6KiogIFRoZXNlIHVzZSB0aGUgYGZhbWlseWAgbWVtYmVyIHRvIGZvcm1hdCB0aGUgb3V0cHV0LiBBIG5lYXQgaW1wbGVtZW50YXRpb24uCgo2LiAgKipgbG9jYWxfaXBfc3RvcmVgIC8gYHJlbW90ZV9pcF9zdG9yZWA6KiogVGhlc2UgZnVuY3Rpb25zIHBhc3MgYSBwb2ludGVyIHRvIGBpbmV0X2FkZHJgIHRvIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCB3aGljaCBpcyBleGFjdGx5IGhvdyBpdCBzaG91bGQgd29yay4KCjcuICAqKlBhY2tldCBUcmFuc21pc3Npb24gKGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGBuZXRwb2xsX3NlbmRfdWRwYCk6KiogSGVyZSwgdGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBgaXB2NmAgYm9vbGVhbiBmbGFnIHdpdGggYSBjaGVjayBhZ2FpbnN0IGBudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgaXMgYSBtdWNoIG1vcmUgcm9idXN0IGFuZCB1bmRlcnN0YW5kYWJsZSB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBJUCB2ZXJzaW9uLgoKOC4gICoqYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgOioqICBUaGlzIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoaXMgc2hvdWxkIGJlIGZpbmUuCgo5LiAgKipIZWFkZXIgQ2xlYW51cDoqKiBUaGUgcmVtb3ZhbCBvZiBgdW5pb24gaW5ldF9hZGRyYCBmcm9tIHRoZSBoZWFkZXIgZmlsZSBjbGVhbnMgdXAgdGhlIHN0cnVjdHVyZS4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRvIGEgZnVsbCBjb2RlLWJhc2Ugc2VhcmNoIHRvIGlkZW50aWZ5IGFueSBvdGhlciBpbnN0YW5jZXMgb2YgYHVuaW9uIGluZXRfYWRkcmAgdG8gbWFrZSBzdXJlIG5vdGhpbmcgd2FzIG1pc3NlZC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBmdWxseSBzZWxmLWNvbnRhaW5lZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwuICBJJiMzOTtsbCBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgdW5pb24gaW5ldF9hZGRyYCB0byBiZSB0aG9yb3VnaC4KCk92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIHdlbGwtdGhvdWdodC1vdXQgaW1wcm92ZW1lbnQsIG1ha2luZyBhZGRyZXNzIGZhbWlseSBoYW5kbGluZyBtdWNoIGNsZWFyZXIgYW5kIG1vcmUgZXhwbGljaXQgd2l0aGluIHRoZSBgbmV0Y29uc29sZWAgc3Vic3lzdGVtLiAgVGhlIHJlcGxhY2VtZW50IG9mIHRoZSBvbGQgbWV0aG9kIHdpdGggdGhlIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgc2VlbXMgYSBnb29kIG1vdmUuIEkgYW0gdmVyeSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgcGVyZm9ybWFuY2UgaW1wYWN0IHdpdGggdGhlIGNvZGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bmlvbiBpbmV0X2FkZHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIwOQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlIG9mIGBzdHJ1Y3QgaW5ldF9hZGRyYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBzdHJ1Y3QgaW5ldF9hZGRyYCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJIHdhbnQgdG8gaWRlbnRpZnkgYWxsIHRoZSBpbnN0YW5jZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaXRzIHJvbGUgaW4gdmFyaW91cyBuZXR3b3JrIG9wZXJhdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciwgZnJhbmtseSwgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgY29udGV4dHMsIGxpa2UgaG93IGl0JiMzOTtzIHRyZWF0ZWQgaW4ga2VybmVsIG5ldHdvcmtpbmcgY29kZSB2ZXJzdXMgdXNlci1zcGFjZSBsaWJyYXJpZXMgdGhhdCBpbnRlcmZhY2Ugd2l0aCBpdC4gQXJlIHRoZXJlIGFueSBjb2RpbmcgcGF0dGVybnMgdGhhdCBhcmUgY29uY2VybmluZz8gQW55IGluY29uc2lzdGVuY2llcyBpbiBob3cgaXQmIzM5O3MgaGFuZGxlZCwgd2hpY2ggY291bGQgbGVhZCB0byBzdWJ0bGUgYnVncyBkb3duIHRoZSBsaW5lPyBJIGFsc28gd2FudCB0byBtYWtlIGEgbm90ZSBvZiB3aGVyZSBpdCBpcyB1c2VkLiBJJiMzOTttIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQ6IGFyZSB0aGVyZSBuZXdlciwgYmV0dGVyIGFsdGVybmF0aXZlcyBlbWVyZ2luZyAoZS5nLiwgYGluX2FkZHJgLCBgaW42X2FkZHJgLCBldGMuKSB0aGF0IGFyZSBtb3JlIG1vZGVybiwgc2FmZXIsIG9yIHNpbXBseSBtb3JlIGVmZmljaWVudCBpbiBjZXJ0YWluIHNjZW5hcmlvcz8gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoaXMgZm91bmRhdGlvbmFsIHN0cnVjdHVyZSBpcyBiZWluZyB1c2VkIG9wdGltYWxseSwgYW5kIEkgbmVlZCB0byBiZSBwcm9hY3RpdmUgYWJvdXQgYW55IHBvdGVudGlhbCBpc3N1ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldF9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDg9ZW51bSB0YXJnZXRfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0OnN0cnVjdCBpbmV0X2FkZHIge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NS1cdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxOD1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzUtXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzY6XHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNy1cdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MjU9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzUwLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc1MTpzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzUyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYz01NT1lbnVtIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYy01OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jOjYwOnN0cnVjdCBpbmV0X2FkZHIge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNjEtXHRjb25zdCBjaGFyICppcDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYz02NT1zdHJ1Y3QgdGVzdCB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNzAtXHRpbnQgc290eXBlO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmM6NzE6XHRzdHJ1Y3QgaW5ldF9hZGRyIGNvbm5lY3RfdG87XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYzo3MjpcdHN0cnVjdCBpbmV0X2FkZHIgbGlzdGVuX2F0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNzMtXHRlbnVtIHNlcnZlciBhY2NlcHRfb247XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmM9MTE1MT1zdHJ1Y3QgdGVzdF9tdWx0aV9wcm9nIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYy0xMTU3LVx0aW50IGV4cGVjdF9lcnJubztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jOjExNTg6XHRzdHJ1Y3QgaW5ldF9hZGRyIGxpc3Rlbl9hdDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jLTExNTktfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyMDUKCQkJCQkJCW91dHB1dDogMzc3CgkJCQkJCQl0aG91Z2h0czogNTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBTYWZldHkgYW5kIFNhbml0aXplciBFdmFsdWF0aW9uOiBQYXRjaCBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gZXZhbHVhdGluZyB0aGlzIHBhdGNoIGZvciBtZW1vcnkgc2FmZXR5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIHBvdGVudGlhbCBsZWFrcyB2aWEga2VybmVsLXRvLXVzZXIgc3BhY2UgaW50ZXJhY3Rpb25zLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gcG90ZW50aWFsIHJpc2tzIGFuZCB0aGUgcmVsZXZhbnQgc2FuaXRpemVyIGNoZWNrcy4KCkZpcnN0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIHRoZSBLTVNBTiBjcml0ZXJpYS4KCjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIEkmIzM5O20gZXhhbWluaW5nIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGxlYWsgdG8gdXNlcnNwYWNlLiBUaGUgYHN5c2ZzX2VtaXRgIHVzYWdlIGluIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YCBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIFNwZWNpZmljYWxseSwgdGhlIGAlcEk2Y1xuYCwgYCVwSTRcbmAsIGFuZCBgXG5gIGZvcm1hdHMuIEhvd2V2ZXIsIHRoZSB0YXJnZXQgc3RydWN0dXJlIGBudGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLCB6ZXJvaW5nIHRoZSBlbnRpcmUgc3RydWN0dXJlLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gYGxvY2FsX2lwLmZhbWlseWAgbG9va3Mgc2FmZS4gV2hlbiBgQUZfVU5TUEVDYCwgbm90aGluZyBpcyBwcmludGVkIHRvIHVzZXIgc3BhY2UuIFdoZW4gYEFGX0lORVQ2YCwgdGhlIGBudC0mZ3Q7bG9jYWxfaXAuaW42YCBmaWVsZCBpcyBmaWxsZWQgZnJvbSBgaW42X3B0b25gIG9yIGBpZnAtJmd0O2FkZHJgLiBXaGVuIGBBRl9JTkVUYCwgYG50LSZndDtsb2NhbF9pcC5pcGAgaXMgZmlsbGVkIGZyb20gYGluNF9wdG9uYCBvciBgaWZhLSZndDtpZmFfbG9jYWxgLiBBbGwgbG9va3Mgc2FmZSBmcm9tIHRoaXMgcGVyc3BlY3RpdmUuCgoyLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBUaGUgY29kZSYjMzk7cyBjb25kaXRpb25hbCBicmFuY2hlcyBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZSBgbnRgIHN0cnVjdHVyZSYjMzk7cyBgZmFtaWx5YCBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBgMGAgYnkgYGt6YWxsb2Nfb2JqYCwgYW5kIHRoZSBhZGRyZXNzIGJ5dGVzIGFyZSB6ZXJvZWQuIFRoZSBjb2RlIGNsZWFubHkgY2hlY2tzIGZvciB0aGUgYEFGX1VOU1BFQ2AsIGBBRl9JTkVUNmAsIG9yIElQdjQgY2FzZXMsIGVuc3VyaW5nIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgYGZhbWlseWAgYXBwcm9wcmlhdGVseSBiZWZvcmUgYW55IHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGFjY2VzcywgYW5kIHRoaXMgYXBwZWFycyBzYWZlLgoKMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogSSBzZWUgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBwYXRjaCBpcyBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBhbnkgcGFydGljdWxhcmx5IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgZmFjdG9yIGluIGxhdGVyIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgoKNC4gICoqQm91bmRzIENoZWNrcy9Mb2dpYzoqKiBUaGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiBib3VuZHMgY2hlY2sgaXNzdWVzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB3aXRoaW4gZXhpc3RpbmcgYnVmZmVycy4KCkdpdmVuIHRoaXMgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBjb2RlLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IHRoaXMgcGF0Y2ggKipkb2VzIG5vdCoqIGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBBbGwgYWxsb2NhdGlvbnMgYXJlIHplcm9lZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgaW5wdXRzIGFyZSB2YWxpZGF0ZWQuIFRoZSBgaW40X3B0b25gIGFuZCBgaW42X3B0b25gIGZ1bmN0aW9ucyB3cml0ZSB0byB0aGUgcHJlY2lzZSBtZW1vcnkgbG9jYXRpb25zIGJlZm9yZSB0aGUgYGZhbWlseWAgZmllbGQgaXMgZXZlbiBhc3NpZ25lZC4gV2hlbiB1bnNldCwgYGZhbWlseWAgaXMgMCAoYEFGX1VOU1BFQ2ApLgoKVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSYjMzk7bGwgZmxhZyB0aGlzIGFzIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGUgcmF0aW9uYWxlIGFzIG91dGxpbmVkIGFib3ZlLiBUaGlzIGlzIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxuXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrOlxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cbjIuIFBhcnNpbmcgYW5kIHVwZGF0ZXM6IGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIHBvcHVsYXRlcyBgaXBgICh2aWEgYGluNF9wdG9uYCkgb3IgYGluNmAgKHZpYSBgaW42X3B0b25gKSBhbmQgc2V0cyBgZmFtaWx5YCBhY2NvcmRpbmdseSAoYEFGX0lORVRgIG9yIGBBRl9JTkVUNmApLiBXaGVuIGF1dG8tZGVyaXZlZCwgYG5ldGNvbnNfdGFrZV9pcHY0YCBhbmQgYG5ldGNvbnNfdGFrZV9pcHY2YCBmdWxseSBpbml0aWFsaXplIHRoZSBhZGRyZXNzIGFuZCBzZXQgYGZhbWlseWAuXG4zLiBVc2VyLXNwYWNlIG91dHB1dCAvIGluZm8gbGVha3M6IFN5c2ZzIGF0dHJpYnV0ZXMgYGxvY2FsX2lwX3Nob3dgIGFuZCBgcmVtb3RlX2lwX3Nob3dgIGVtaXQgZm9ybWF0dGVkIHN0cmluZ3MgYmFzZWQgb24gdGhlIHZlcmlmaWVkIGBmYW1pbHlgIGRpc2NyaW1pbmF0b3IgYW5kIHJlYWQgb25seSB0aGUgZnVsbHkgaW5pdGlhbGl6ZWQgYWRkcmVzcyB1bmlvbiBmaWVsZHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2Vyc3BhY2UuXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5YCBhbmQgcmVhZCBwcm9wZXJseSBpbml0aWFsaXplZCBgaW42YCBvciBgaXBgIGZpZWxkcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgaGFuZGxpbmcgaW4gbmV0Y29uc29sZSBieSBpbnRyb2R1Y2luZyBgc3RydWN0IGluZXRfYWRkcmAgd2l0aCBhbiBleHBsaWNpdCBgZmFtaWx5YCBmaWVsZCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBzZXBhcmF0ZSBib29sZWFuIGZsYWcgKGBpcHY2YCkgYW5kIGNoZWNraW5nIHdoZXRoZXIgYW4gYWRkcmVzcyBpcyB6ZXJvIHRvIGRldGVybWluZSBpZiBpdCB3YXMgdW5zZXQuXG5cbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6XG4xLiBPYmplY3QgYWxsb2NhdGlvbjogYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgKSBhcmUgemVyby1pbml0aWFsaXplZCAoYGZhbWlseWAgZGVmYXVsdHMgdG8gYDBgIC8gYEFGX1VOU1BFQ2ApLlxuMi4gUGFyc2luZyBhbmQgdXBkYXRlczogYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgcG9wdWxhdGVzIGBpcGAgKHZpYSBgaW40X3B0b25gKSBvciBgaW42YCAodmlhIGBpbjZfcHRvbmApIGFuZCBzZXRzIGBmYW1pbHlgIGFjY29yZGluZ2x5IChgQUZfSU5FVGAgb3IgYEFGX0lORVQ2YCkuIFdoZW4gYXV0by1kZXJpdmVkLCBgbmV0Y29uc190YWtlX2lwdjRgIGFuZCBgbmV0Y29uc190YWtlX2lwdjZgIGZ1bGx5IGluaXRpYWxpemUgdGhlIGFkZHJlc3MgYW5kIHNldCBgZmFtaWx5YC5cbjMuIFVzZXItc3BhY2Ugb3V0cHV0IC8gaW5mbyBsZWFrczogU3lzZnMgYXR0cmlidXRlcyBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AgZW1pdCBmb3JtYXR0ZWQgc3RyaW5ncyBiYXNlZCBvbiB0aGUgdmVyaWZpZWQgYGZhbWlseWAgZGlzY3JpbWluYXRvciBhbmQgcmVhZCBvbmx5IHRoZSBmdWxseSBpbml0aWFsaXplZCBhZGRyZXNzIHVuaW9uIGZpZWxkcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXJzcGFjZS5cbjQuIE5ldHdvcmsgcGFja2V0IGNvbnN0cnVjdGlvbjogUGFja2V0IGhlYWRlcnMgYW5kIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyBicmFuY2ggb24gYG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHlgIGFuZCByZWFkIHByb3Blcmx5IGluaXRpYWxpemVkIGBpbjZgIG9yIGBpcGAgZmllbGRzLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ4OjUxLjA2MDYzMDgyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTM4OTkzNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiLFxuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwibG9jYWxfaXBfc2hvd1wiLFxuICAgIFwicmVtb3RlX2lwX3Nob3dcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldGNvbnNfdGFrZV9pcHY0XCIsXG4gICAgXCJuZXRjb25zX3Rha2VfaXB2NlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgaGFuZGxpbmcgaW4gbmV0Y29uc29sZSBieSBpbnRyb2R1Y2luZyBgc3RydWN0IGluZXRfYWRkcmAgd2l0aCBhbiBleHBsaWNpdCBgZmFtaWx5YCBmaWVsZCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBzZXBhcmF0ZSBib29sZWFuIGZsYWcgKGBpcHY2YCkgYW5kIGNoZWNraW5nIHdoZXRoZXIgYW4gYWRkcmVzcyBpcyB6ZXJvIHRvIGRldGVybWluZSBpZiBpdCB3YXMgdW5zZXQuXFxuXFxuQW5hbHlzaXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzazpcXG4xLiBPYmplY3QgYWxsb2NhdGlvbjogYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgKSBhcmUgemVyby1pbml0aWFsaXplZCAoYGZhbWlseWAgZGVmYXVsdHMgdG8gYDBgIC8gYEFGX1VOU1BFQ2ApLlxcbjIuIFBhcnNpbmcgYW5kIHVwZGF0ZXM6IGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIHBvcHVsYXRlcyBgaXBgICh2aWEgYGluNF9wdG9uYCkgb3IgYGluNmAgKHZpYSBgaW42X3B0b25gKSBhbmQgc2V0cyBgZmFtaWx5YCBhY2NvcmRpbmdseSAoYEFGX0lORVRgIG9yIGBBRl9JTkVUNmApLiBXaGVuIGF1dG8tZGVyaXZlZCwgYG5ldGNvbnNfdGFrZV9pcHY0YCBhbmQgYG5ldGNvbnNfdGFrZV9pcHY2YCBmdWxseSBpbml0aWFsaXplIHRoZSBhZGRyZXNzIGFuZCBzZXQgYGZhbWlseWAuXFxuMy4gVXNlci1zcGFjZSBvdXRwdXQgLyBpbmZvIGxlYWtzOiBTeXNmcyBhdHRyaWJ1dGVzIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YCBlbWl0IGZvcm1hdHRlZCBzdHJpbmdzIGJhc2VkIG9uIHRoZSB2ZXJpZmllZCBgZmFtaWx5YCBkaXNjcmltaW5hdG9yIGFuZCByZWFkIG9ubHkgdGhlIGZ1bGx5IGluaXRpYWxpemVkIGFkZHJlc3MgdW5pb24gZmllbGRzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBsZWFrZWQgdG8gdXNlcnNwYWNlLlxcbjQuIE5ldHdvcmsgcGFja2V0IGNvbnN0cnVjdGlvbjogUGFja2V0IGhlYWRlcnMgYW5kIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyBicmFuY2ggb24gYG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5YCBhbmQgcmVhZCBwcm9wZXJseSBpbml0aWFsaXplZCBgaW42YCBvciBgaXBgIGZpZWxkcy5cXG5cXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDg6NTEuMDYwNjUxMDQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE3OTM5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyOWE5NjU1ZWNlMjVkOWEzZTJlYWI5ODg5YWRlNTI0MTQxMGI3MzI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDE6NDg6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFxuaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNjk0YmNhNDgwM2Q1MCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXG5AQCAtMTQxLDYgKzE0MSwxMSBAQCBUaGUgaW50ZXJmYWNlIGV4cG9zZXMgdGhlc2UgcGFyYW1ldGVycyBvZiBhIG5ldGNvbnNvbGUgdGFyZ2V0IHRvIHVzZXJzcGFjZTpcXG4gXFx0dHJhbnNtaXRfZXJyb3JzXFx0TnVtYmVyIG9mIHBhY2tldCBzZW5kIGVycm9yc1xcdFxcdChyZWFkLW9ubHkpXFxuIFxcdD09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09XFxuIFxcbitsb2NhbF9pcCBpcyBvcHRpb25hbDogaWYgaXQgaXMgbGVmdCB1bnNldCwgbmV0Y29uc29sZSBkZXJpdmVzIGEgc291cmNlXFxuK2FkZHJlc3MgZnJvbSB0aGUgZWdyZXNzIGludGVyZmFjZSB3aGVuIHRoZSB0YXJnZXQgaXMgZW5hYmxlZC4gV3JpdGluZyBhbnlcXG4rdmFsdWUgdG8gaXQsIGluY2x1ZGluZyAwLjAuMC4wLCB1c2VzIHRoYXQgdmFsdWUgdmVyYmF0aW0gYW5kIGRpc2FibGVzIHRoZVxcbithdXRvbWF0aWMgc2VsZWN0aW9uLlxcbitcXG4gVGhlIFxcXCJlbmFibGVkXFxcIiBhdHRyaWJ1dGUgaXMgYWxzbyB1c2VkIHRvIGNvbnRyb2wgd2hldGhlciB0aGUgcGFyYW1ldGVycyBvZlxcbiBhIHRhcmdldCBjYW4gYmUgdXBkYXRlZCBvciBub3QgLS0geW91IGNhbiBtb2RpZnkgdGhlIHBhcmFtZXRlcnMgb2Ygb25seVxcbiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmIFxcXCJlbmFibGVkXFxcIiBpcyAwKS5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuaW5kZXggYjM1OGU1YzM2NzM1MS4uMjY3MjU0ZjA0NmRlOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5AQCAtMTUxLDYgKzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XFxuIFxcdFNUQVRFX0RFQUNUSVZBVEVELFxcbiB9O1xcbiBcXG4rc3RydWN0IGluZXRfYWRkciB7XFxuK1xcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXFxuK1xcdHU4XFx0XFx0XFx0ZmFtaWx5O1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdF9fYmUzMlxcdFxcdGlwO1xcbitcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRpbjY7XFxuK1xcdH07XFxuK307XFxuK1xcbiAvKipcXG4gICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC5cXG4gICogQHJjdTpcXHRVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXFxuQEAgLTE5NSw3ICsyMDQsNiBAQCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuICAqXFx0XFx0bG9jYWxfbWFjXFx0KHJlYWQtb25seSlcXG4gICogQGxvY2FsX2lwOlxcdFNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbiAgKiBAcmVtb3RlX2lwOlxcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuLSAqIEBpcHY2OlxcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxcbiAgKiBAbG9jYWxfcG9ydDpcXHRTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuICAqIEByZW1vdGVfbWFjOlxcdERlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuQEAgLTIyNSw4ICsyMzMsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbiBcXHRib29sXFx0XFx0XFx0ZXh0ZW5kZWQ7XFxuIFxcdGJvb2xcXHRcXHRcXHRyZWxlYXNlO1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbFxcdFxcdG5wO1xcbi1cXHR1bmlvbiBpbmV0X2FkZHJcXHRcXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbi1cXHRib29sXFx0XFx0XFx0aXB2NjtcXG4rXFx0c3RydWN0IGluZXRfYWRkclxcdGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuIFxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbiBcXHR1OFxcdFxcdFxcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xcbiBcXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXFxuQEAgLTQyOCw2ICs0MzUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cXG4gXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2O1xcbiBcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC00NjksMjggKzQ3NywxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdH1cXG4gXFxuIFxcdG50LVxcdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cXHUwMDNlaWZhX2xvY2FsO1xcbitcXHRudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtXFx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXFxuLSAqXFxuLSAqIG50LVxcdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXFxuLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLFxcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXFxuLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLlxcbi0gKi9cXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi17XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4tXFx0XFx0cmV0dXJuIGlwdjZfYWRkcl9hbnkoXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbi1cXHRyZXR1cm4gIW50LVxcdTAwM2Vsb2NhbF9pcC5pcDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxuQEAgLTUwMCw2ICs0OTIsMTcgQEAgc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbitcXHRcXHRucF9lcnIobnAsIFxcXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVERVNUQUREUlJFUTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XFxuK1xcdFxcdG5wX2VycihucCwgXFxcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRpZiAobnAtXFx1MDAzZWRldl9uYW1lWzBdKVxcbiBcXHRcXHRuZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC1cXHUwMDNlZGV2X25hbWUpO1xcbkBAIC01MzYsMTYgKzUzOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRcXHRydG5sX2xvY2soKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XFxuLVxcdFxcdGlmICghbnQtXFx1MDAzZWlwdjYpIHtcXG4tXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XFxuK1xcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fVxcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuIFxcdFxcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtNzI3LDI0ICs3MjcsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVAgdW5zZXRcXFxcblxcXCIpO1xcbitcXHRlbHNlIGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmlwKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImludGVyZmFjZSBuYW1lICclcydcXFxcblxcXCIsIG5wLVxcdTAwM2VkZXZfbmFtZSk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBldGhlcm5ldCBhZGRyZXNzICclcE0nXFxcXG5cXFwiLCBucC1cXHUwMDNlZGV2X21hYyk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgcG9ydCAlZFxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9wb3J0KTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQIHVuc2V0XFxcXG5cXFwiKTtcXG4rXFx0ZWxzZSBpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmlwKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiB9XFxuIFxcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcXG4tICogcG9wdWxhdGVkLCAxIGlmIElQdjYgaXMgcG9wdWxhdGVkLCBhbmQgLTEgdXBvbiBmYWlsdXJlLlxcbisvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzXFxuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXFxuICAqL1xcbi1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxcbiB7XFxuIFxcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XFxuIFxcdGludCBsZW47XFxuQEAgLTc1NiwxNCArNzYwLDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbiBcXHRpZiAoc3RyW2xlbiAtIDFdID09ICdcXFxcbicpXFxuIFxcdFxcdGxlbiAtPSAxO1xcbiBcXG4tXFx0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKVxcbitcXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopXFx1MDAyNmFkZHItXFx1MDAzZWlwLCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSkge1xcbitcXHRcXHRhZGRyLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuK1xcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcXHUwMDI2YWRkci1cXHUwMDNlaW42LCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSkge1xcbitcXHRcXHRhZGRyLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbkBAIC04NjgsMjAgKzg3NiwyNCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuIFxcbi1cXHRpZiAobnQtXFx1MDAzZWlwdjYpXFxuK1xcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiXFxcXG5cXFwiKTtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuK1xcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiBcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCJcXFxcblxcXCIpO1xcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5AQCAtMTIyNiw3ICsxMjM4LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjM1LDEwICsxMjQ2LDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApO1xcbi1cXHRpZiAoaXB2NiA9PSAtMSlcXG4rXFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0xMjUxLDcgKzEyNjAsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjYwLDEwICsxMjY4LDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcCk7XFxuLVxcdGlmIChpcHY2ID09IC0xKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0yMDcyLDcgKzIwNzgsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXG4gXFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xcbiBcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IDA7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCxcXG5AQCAtMjExMyw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIG5wLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuQEAgLTIxODIsNyArMjE4OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdFxcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcXG4gXFxuIFxcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuQEAgLTIxOTgsNyArMjIwNCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbiBcXG4gXFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xcbkBAIC0yNTI3LDEwICsyNTMzLDggQEAgX19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4gc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbi1cXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcXG4gXFx0Y2hhciAqY3VyID0gb3B0O1xcbiBcXHRjaGFyICpkZWxpbTtcXG4tXFx0aW50IGlwdjY7XFxuIFxcbiBcXHRpZiAoKmN1ciAhPSAnQCcpIHtcXG4gXFx0XFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xcbkBAIC0yNTQ0LDE2ICsyNTQ4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuIFxcdGN1cisrO1xcbiBcXG4gXFx0aWYgKCpjdXIgIT0gJy8nKSB7XFxuLVxcdFxcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xcbiBcXHRcXHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XFxuIFxcdFxcdGlmICghZGVsaW0pXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbi1cXHRcXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuLVxcdFxcdGlmIChpcHY2IFxcdTAwM2MgMClcXG4rXFx0XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bnQtXFx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xcbiBcXHRcXHRjdXIgPSBkZWxpbTtcXG4gXFx0fVxcbiBcXHRjdXIrKztcXG5AQCAtMjU5NSwxMyArMjU5NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbiBcXHRpZiAoIWRlbGltKVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0KmRlbGltID0gMDtcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4tXFx0aWYgKGlwdjYgXFx1MDAzYyAwKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXFx1MDAyNlxcdTAwMjYgbnQtXFx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRudC1cXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XFxuIFxcdGN1ciA9IGRlbGltICsgMTtcXG4gXFxuIFxcdGlmICgqY3VyICE9IDApIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbkBAIC0xNiwxMSArMTYsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkcC5oXFx1MDAzZVxcbiBcXG4tdW5pb24gaW5ldF9hZGRyIHtcXG4tXFx0X19iZTMyXFx0XFx0aXA7XFxuLVxcdHN0cnVjdCBpbjZfYWRkclxcdGluNjtcXG4tfTtcXG4tXFxuIHN0cnVjdCBuZXRwb2xsIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ4OjUxLjUwMzE4MTg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTA3NzQzNTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIixcbiAgICBcImxvY2FsX2lwX3N0b3JlXCIsXG4gICAgXCJyZW1vdGVfaXBfc3RvcmVcIixcbiAgICBcImxvY2FsX2lwX3Nob3dcIixcbiAgICBcInJlbW90ZV9pcF9zaG93XCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zX3Rha2VfaXB2NFwiLFxuICAgIFwibmV0Y29uc190YWtlX2lwdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgSVAgYWRkcmVzcyBtYW5hZ2VtZW50IGluIHRoZSBuZXRjb25zb2xlIHN1YnN5c3RlbSBieSByZXBsYWNpbmcgdGhlIHNlcGFyYXRlIElQdjYgYm9vbGVhbiBmbGFnIGFuZCB1bmlvbiB3aXRoIGEgZGVkaWNhdGVkIGluZXRfYWRkciBzdHJ1Y3Qgc3RvcmluZyB0aGUgYWRkcmVzcyBmYW1pbHkuIEl0IG1vZGlmaWVzIGFkZHJlc3MgcGFyc2luZywgaW50ZXJmYWNlIElQIGF1dG8tcG9wdWxhdGlvbiwgYWRkcmVzcyBmYW1pbHkgdmFsaWRhdGlvbiBpbiBuZXRjb25zX25ldHBvbGxfc2V0dXAsIHN5c2ZzL2NvbmZpZ2ZzIGF0dHJpYnV0ZSBoYW5kbGVycywgYW5kIFVEUCB0cmFuc21pc3Npb24gcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgZHluYW1pYyBuZXRjb25zb2xlIHRhcmdldCBjb25maWd1cmF0aW9uIGluIGNvbmZpZ2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5YTk2NTVlY2UyNWQ5YTNlMmVhYjk4ODlhZGU1MjQxNDEwYjczMjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAxOjQ4OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5pbmRleCA0YWI1ZDdiMDVjZjEwLi42OTRiY2E0ODAzZDUwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcbkBAIC0xNDEsNiArMTQxLDExIEBAIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyB0aGVzZSBwYXJhbWV0ZXJzIG9mIGEgbmV0Y29uc29sZSB0YXJnZXQgdG8gdXNlcnNwYWNlOlxuIFx0dHJhbnNtaXRfZXJyb3JzXHROdW1iZXIgb2YgcGFja2V0IHNlbmQgZXJyb3JzXHRcdChyZWFkLW9ubHkpXG4gXHQ9PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgID09PT09PT09PT09PVxuIFxuK2xvY2FsX2lwIGlzIG9wdGlvbmFsOiBpZiBpdCBpcyBsZWZ0IHVuc2V0LCBuZXRjb25zb2xlIGRlcml2ZXMgYSBzb3VyY2VcbithZGRyZXNzIGZyb20gdGhlIGVncmVzcyBpbnRlcmZhY2Ugd2hlbiB0aGUgdGFyZ2V0IGlzIGVuYWJsZWQuIFdyaXRpbmcgYW55XG4rdmFsdWUgdG8gaXQsIGluY2x1ZGluZyAwLjAuMC4wLCB1c2VzIHRoYXQgdmFsdWUgdmVyYmF0aW0gYW5kIGRpc2FibGVzIHRoZVxuK2F1dG9tYXRpYyBzZWxlY3Rpb24uXG4rXG4gVGhlIFwiZW5hYmxlZFwiIGF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIG9mXG4gYSB0YXJnZXQgY2FuIGJlIHVwZGF0ZWQgb3Igbm90IC0tIHlvdSBjYW4gbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIG9mIG9ubHlcbiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmIFwiZW5hYmxlZFwiIGlzIDApLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggYjM1OGU1YzM2NzM1MS4uMjY3MjU0ZjA0NmRlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDYgKzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuK3N0cnVjdCBpbmV0X2FkZHIge1xuK1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbitcdHU4XHRcdFx0ZmFtaWx5O1xuK1x0dW5pb24ge1xuK1x0XHRfX2JlMzJcdFx0aXA7XG4rXHRcdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuK1x0fTtcbit9O1xuK1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4gICogQHJjdTpcdFVzZWQgdG8gZnJlZSB0aGUgcGF5bG9hZCBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbkBAIC0xOTUsNyArMjA0LDYgQEAgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIyNSw4ICsyMzMsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbi1cdHVuaW9uIGluZXRfYWRkclx0XHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuLVx0Ym9vbFx0XHRcdGlwdjY7XG4rXHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQyOCw2ICs0MzUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDY5LDI4ICs0NzcsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0fVxuIFxuIFx0bnQtXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXHUwMDNlaWZhX2xvY2FsO1xuK1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgSVAgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG4tICogbmV0Y29uc19uZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cbi0gKlxuLSAqIG50LVx1MDAzZWxvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6Mixcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXG4tICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmRcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cbi0gKi9cbi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4te1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4tXHRcdHJldHVybiBpcHY2X2FkZHJfYW55KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4tXHRyZXR1cm4gIW50LVx1MDAzZWxvY2FsX2lwLmlwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnM7XG5AQCAtNTAwLDYgKzQ5MiwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRucF9lcnIobnAsIFwicmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVERVNUQUREUlJFUTtcbitcdH1cbitcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG4rXHRcdG5wX2VycihucCwgXCJsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuQEAgLTUzNiwxNiArNTM5LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9XG4rXHRcdGVsc2VcbitcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MjcsMjQgKzcyNywyOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIHBvcnQgJWRcXG5cIiwgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQIHVuc2V0XFxuXCIpO1xuK1x0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUCB1bnNldFxcblwiKTtcbitcdGVsc2UgaWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4rLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc1NiwxNCArNzYwLDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuIFx0aWYgKHN0cltsZW4gLSAxXSA9PSAnXFxuJylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcbicpKVxuK1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODY4LDIwICs4NzYsMjQgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIlxcblwiKTtcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiXFxuXCIpO1xuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtMTIyNiw3ICsxMjM4LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTIzNSwxMCArMTI0Niw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0xMjUxLDcgKzEyNjAsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTI2MCwxMCArMTI2OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0yMDcyLDcgKzIwNzgsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFxuIFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xuIFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsXG5AQCAtMjExMyw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG5AQCAtMjE4Miw3ICsyMTg4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuIFxuIFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIFx0ZWxzZVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG5AQCAtMjE5OCw3ICsyMjA0LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdHNrYl9wdXQoc2tiLCBsZW4pO1xuIFxuIFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTtcbkBAIC0yNTI3LDEwICsyNTMzLDggQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4tXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcbiBcdGNoYXIgKmN1ciA9IG9wdDtcbiBcdGNoYXIgKmRlbGltO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRpZiAoKmN1ciAhPSAnQCcpIHtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xuQEAgLTI1NDQsMTYgKzI1NDgsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGN1cisrO1xuIFxuIFx0aWYgKCpjdXIgIT0gJy8nKSB7XG4tXHRcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRcdGlmIChpcHY2IFx1MDAzYyAwKVxuK1x0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0XHRlbHNlXG4tXHRcdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuIFx0Y3VyKys7XG5AQCAtMjU5NSwxMyArMjU5NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0aWYgKCFkZWxpbSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHQqZGVsaW0gPSAwO1xuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXHUwMDI2XHUwMDI2IG50LVx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2Vcbi1cdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRjdXIgPSBkZWxpbSArIDE7XG4gXG4gXHRpZiAoKmN1ciAhPSAwKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggMWM2YjFlZWM1ZWZkNi4uZWMwODIxYTViMDJkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTE2LDExICsxNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gXG4tdW5pb24gaW5ldF9hZGRyIHtcbi1cdF9fYmUzMlx0XHRpcDtcbi1cdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuLX07XG4tXG4gc3RydWN0IG5ldHBvbGwge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDg6NTEuNTAzMTgzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxNTg3MzkyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3QgYmFzZWQgb24gdGhlIGNoYW5nZWQgZmlsZXM6IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCBgaW5jbHVkZS9saW51eC9uZXRwb2xsLmhgLCBhbmQgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdGAuIFRoaXMgc2NyZWFtcyBhbiBhcmNoaXRlY3R1cmFsIGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0uXG5cblJpZ2h0LCBzbyBpdCdzIHJlZmFjdG9yaW5nIGhvdyBhZGRyZXNzZXMgYXJlIGhhbmRsZWQuIFJlcGxhY2luZyB0aGF0IG9sZCBgdW5pb24gaW5ldF9hZGRyYCBhbmQgdGhlIGBib29sIGlwdjZgIHdpdGggYSBgc3RydWN0IGluZXRfYWRkcmAgaXMgYSBzbWFydCBtb3ZlLiBJdCBzaW1wbGlmaWVzIHRoaW5ncyBhbmQgbWFrZXMgdGhlIGNvZGUgY2xlYW5lci4gVGhhdCB1bmlvbiBpbnNpZGUgdGhlIHN0cnVjdCwgd2l0aCB0aGUgYHU4IGZhbWlseWAgdG8gZGlzY3JpbWluYXRlIGJldHdlZW4gSVB2NCBhbmQgSVB2NiwgbWFrZXMgcGVyZmVjdCBzZW5zZSBhbmQgSSdtIGdsYWQgdG8gc2VlIHRoaXMgaW1wbGVtZW50ZWQuXG5cblNvLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgZ29uZSB0aHJvdWdoIGFuZCB1cGRhdGVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IGBpbmV0X2FkZHJgIHN0cnVjdHVyZTogYG5ldGNvbnNfdGFrZV9pcHY2YCwgYG5ldGNvbnNfdGFrZV9pcHY0YCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcmAsIGFsbCB0aGUgcGFyc2luZyBhbmQgZGlzcGxheSBmdW5jdGlvbnMsIGNoZWNrc3VtIGNhbGN1bGF0aW9ucywgYW5kIHNlbmQgcm91dGluZXMuIFRob3JvdWdoLCBhcyBpdCBzaG91bGQgYmUuIFRoZSByZWZhY3RvciBvZiBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBzZWVtcyBpbXBvcnRhbnQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IHRob3NlIGFkZGVkIGNoZWNrcyBjYXJlZnVsbHkuIFRob3NlIHJldHVybiBjb2RlcyBhcmUgY3J1Y2lhbCBmb3IgZXJyb3IgaGFuZGxpbmcuIEEgbWlzc2luZyByZW1vdGUgYWRkcmVzcyBvciBhIG1pc21hdGNoIGluIElQIGZhbWlseSB3aWxsIGNhdXNlIGlzc3Vlcywgb2J2aW91c2x5LiBUaGUgYXV0b2NvbXBsZXRpb24gb2YgdGhlIGxvY2FsIElQIGJhc2VkIG9uIHRoZSByZW1vdGUgSVAgZmFtaWx5IGlzIGEgbmljZSB0b3VjaCwgdG9vLlxuXG5Ob3csIG15IG5leHQgbW92ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBicmVhayBhbnkgb2YgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLiBJcyBuZXRjb25zb2xlIHN0aWxsIHJlYWNoYWJsZT8gSG93IGlzIGl0IGNvbmZpZ3VyZWQ/IEkgbmVlZCB0byBjaGVjayBpZiB0aGUgY2hhbmdlcyBpbXBhY3QgaXRzIGFjY2Vzc2liaWxpdHkgdGhyb3VnaCBjb25maWdmcywgc3lzZnMsIFN5c1JxLCB0aGUgY29tbWFuZCBsaW5lLCBvciBhbnkgb3RoZXIgbWVhbnMuIEkgbmVlZCB0byByZXZpZXcgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYG5ldGNvbnNvbGVgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbmV3IGRlcGVuZGVuY2llcyBvciBjaGFuZ2VzIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTY1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDg6NTguNjYxOTI2MDI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY2OTgwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVENPTlNPTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTowMC4zNDg2MzI5NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzIwMjI3NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuZXR3b3JrIGNvbnNvbGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIHdpdGhpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG51YW5jZXMgb3IgcG90ZW50aWFsIGdvdGNoYXMgcmVsYXRlZCB0byB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMuIEkgcmVjYWxsIHRoZXJlIHdlcmUgc29tZSByZWNlbnQgZGlzY3Vzc2lvbnMgYXJvdW5kIHRoZSB1c2Ugb2YgZHluYW1pYyBhbGxvY2F0aW9uIHZlcnN1cyBzdGF0aWMgY29uZmlndXJhdGlvbiwgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBpbXBhY3QgdGhlIG5ldHdvcmsgY29uc29sZSdzIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgZnJvbSBhIGJvb3QtdGltZSBwZXJzcGVjdGl2ZSBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3Qgb24gZmlybXdhcmUgdXNhZ2UuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzZXR0aW5ncyBJIHVsdGltYXRlbHkgcmVjb21tZW5kIHdvbid0IGNhdXNlIGFueSBjb25mbGljdHMgd2l0aCBvdXIgZXhpc3RpbmcgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZSBvciBpbnRyb2R1Y2Ugc2VjdXJpdHkgY29uY2VybnMsIGV2ZW4gaWYgdW5saWtlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTowNy4wNjg4NjMyODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyNTpcXHRcXHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXFxuIDMyNjpcXHRcXG4gMzI3OlxcdGNvbmZpZyBORVRDT05TT0xFXFxuIDMyODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4gMzI5OlxcdFxcdGRlcGVuZHMgb24gUFJJTlRLXFxuIDMzMDpcXHRcXHRoZWxwXFxuIDMzMTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXFxuIDMzMjpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuIDMzNTpcXHRcXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuIDMzNjpcXHRcXHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlMgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAzMzc6XFx0XFx0XFx0XFx0IShORVRDT05TT0xFPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG4gMzM4OlxcdFxcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxcbiAzMzk6XFx0XFx0aGVscFxcbiAzNDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxcbiAzNDE6XFx0XFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxcbiAzNDI6XFx0XFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxcbiAzNDM6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzQ0OlxcdFxcbiAzNDU6XFx0Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuIDM0NjpcXHRcXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4gMzQ3OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRVxcbiAzNDg6XFx0XFx0ZGVmYXVsdCBuXFxuIDM0OTpcXHRcXHRoZWxwXFxuIDM1MDpcXHRcXHQgIFNldCBleHRlbmRlZCBsb2cgc3VwcG9ydCBmb3IgbmV0Y29uc29sZSBtZXNzYWdlLiBJZiB0aGlzIG9wdGlvbiBpc1xcbiAzNTE6XFx0XFx0ICBzZXQsIGxvZyBtZXNzYWdlcyBhcmUgdHJhbnNtaXR0ZWQgd2l0aCBleHRlbmRlZCBtZXRhZGF0YSBoZWFkZXIgaW4gYVxcbiAzNTI6XFx0XFx0ICBmb3JtYXQgc2ltaWxhciB0byAvZGV2L2ttc2cuICBTZWVcXG4gMzUzOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzU0OlxcdFxcbiAzNTU6XFx0Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXFxuIDM1NjpcXHRcXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4gMzU3OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzU4OlxcdFxcdGRlZmF1bHQgblxcbiAzNTk6XFx0XFx0aGVscFxcbiAzNjA6XFx0XFx0ICBTZXQga2VybmVsIHJlbGVhc2UgdG8gYmUgcHJlcGVuZGVkIHRvIGVhY2ggbmV0Y29uc29sZSBtZXNzYWdlIGJ5XFxuIDM2MTpcXHRcXHQgIGRlZmF1bHQuIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGtlcm5lbCByZWxlYXNlIGlzIHByZXBlbmRlZCBpbnRvXFxuIDM2MjpcXHRcXHQgIHRoZSBmaXJzdCBmaWVsZCBvZiBldmVyeSBuZXRjb25zb2xlIG1lc3NhZ2UsIHNvLCB0aGUgbmV0Y29uc29sZVxcbiAzNjM6XFx0XFx0ICBzZXJ2ZXIvcGVlciBjYW4gZWFzaWx5IGlkZW50aWZ5IHdoYXQga2VybmVsIHJlbGVhc2UgaXMgbG9nZ2luZyBlYWNoXFxuIDM2NDpcXHRcXHQgIG1lc3NhZ2UuICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3JcXG4gMzY1OlxcdFxcdCAgZGV0YWlscy5cXG4gMzY2OlxcdFxcbiAzNjc6XFx0Y29uZmlnIE5FVFBPTExcXG4gMzY4OlxcdFxcdGRlZl9ib29sIE5FVENPTlNPTEVcXG4gMzY5OlxcdFxcbiAzNzA6XFx0Y29uZmlnIE5FVF9QT0xMX0NPTlRST0xMRVJcXG4gMzcxOlxcdFxcdGRlZl9ib29sIE5FVFBPTExcXG4gMzcyOlxcdFxcbiAzNzM6XFx0Y29uZmlnIE5UQl9ORVRERVZcXG4gMzc0OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIEV0aGVybmV0IG92ZXIgTlRCIFRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6MDcuMDY4OTQ0NDQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI1NDMzMzI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgRHluYW1pYyBDb25maWd1cmF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYE5FVENPTlNPTEVfRFlOQU1JQ2AgaXMgdGhlIGtleSBoZXJlLiBJdCBlbmFibGVzIHVzZXJzcGFjZSB0byBkeW5hbWljYWxseSBjcmVhdGUgYW5kIHJlY29uZmlndXJlIG5ldGNvbnNvbGUgdGFyZ2V0cyBhdCBydW50aW1lIHRocm91Z2ggdGhlIGAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZS9gIGludGVyZmFjZSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhZGRpdGlvbi4gSSBzZWUgdGhhdCB0aGlzIHJlbGllcyBvbiBmdW5jdGlvbnMgbGlrZSBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBhbmQgYGVuYWJsZWRfc3RvcmVgIHRvIGludGVyYWN0IHdpdGggbmV0Y29uc29sZSBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBldmVudHVhbGx5IHNldCB1cCB3aXRoIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLiBBbmQsIG9mIGNvdXJzZSwgd2hlbiB0aGVyZSdzIGFjdHVhbGx5IGxvZ2dpbmcgb3IgY29uc29sZSBvdXRwdXQgdG8gdHJhbnNtaXQsIGBuZXRwb2xsX3NlbmRfdWRwYCBoYW5kbGVzIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGlzIHNlZW1zIGZhaXJseSBzdGFuZGFyZCBhbmQgSSdkIGV4cGVjdCB0aGlzIHRvIHdvcmsgYXMgYWR2ZXJ0aXNlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBlbnZpcm9ubWVudHMsIGFzc3VtaW5nIGNvbmZpZ2ZzIGFuZCBuZXRjb25zb2xlIGFyZSBlbmFibGVkLCBvZiBjb3Vyc2UuXG5cbk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB0aGUgY2hhbmdlcywgc28gSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYW55IG90aGVyIGNvZGUgaW4gYG5ldGNvbnNvbGUuY2AgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgb3IgY2FsbHMuIEl0J3MgdGltZSB0byBnbyBiYWNrIG92ZXIgdGhlIHBhdGNoIGNoYW5nZXMgYW5kIG1ha2UgYSBsaXN0IG9mIGV2ZXJ5dGhpbmc6IEkgc2VlIGBuZXRjb25zX3Rha2VfaXB2NmAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgLCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYG5ldHBvbGxfdWRwX2NoZWNrc3VtYCwgYHB1c2hfZXRoYCwgYG5ldHBvbGxfc2VuZF91ZHBgLCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgLiBPaywgZ290IHRoZSBsaXN0LlxuXG5JIHdhbnQgdG8ga25vdyBob3cgYWxsIHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgY2FsbGluZyBmbG93IHNvIEknbGwgY2hlY2sgd2hhdCBjYWxscyBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgIGV0Yy4gaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjEyLjMyMzI3OTY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjkxMjI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00NTc9c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDg2OnN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NTc2PXN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU4NTpcXHRpZiAobmV0Y29uc19uZXRwb2xsX3NldHVwKG50KSkge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODYtXFx0XFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMTQ9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA3NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA3NjpcXHRcXHRyZXQgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDc3LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjIxPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NjA6XFx0ZXJyID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2MS1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjEyLjQ0MDE5NjMzNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2Mjg5NTg2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRGlhZ25vc3RpYyBDaGVja2xpc3QqKlxuXG5Pa2F5LCB0aW1lIHRvIHRyb3VibGVzaG9vdC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSByZXZpZXcgdGhlIGtleSBjb21wb25lbnRzIGludm9sdmVkLiBMZXQncyBzdGFydCB3aXRoIHRoZSBmdW5kYW1lbnRhbCB2YXJpYWJsZXM6IEknbGwgcXVpY2tseSBjaGVjayB0aGUgc3RhdGVzIG9mIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGFuZCBvdGhlciByZWxldmFudCBzdG9yZXMuIE1ha2Ugc3VyZSB0aG9zZSBhcmUgYXMgZXhwZWN0ZWQgYW5kIGNvbnRhaW4gdGhlIHJpZ2h0IGluZm9ybWF0aW9uLlxuXG5OZXh0LCBzaW5jZSBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc3RhY2sgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyByZWx5IG9uIGl0LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBuZXRwb2xsX3NlbmRfdWRwYCB0byBmaW5kIHRoZSBzb3VyY2UuIExldCdzIHNlZSB3aGF0IGlzIGNhbGxpbmcgYG5ldHBvbGxfc2VuZF91ZHBgIHNvIEkgdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBmbG93aW5nLiBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6MTUuMDY5MTU4MTA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA3Njc2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNTY9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE4MDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTgxLVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTctLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTg6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjItICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyMzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIyNz1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjI5OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjE1LjMxOTkzMjQ4NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODcxNjQzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOZXRjb25zb2xlIER5bmFtaWMgTWVzc2FnZSBIYW5kbGluZyoqXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuZXR3b3JrIGNvbnNvbGUgbWVzc2FnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBudWFuY2VzIG9mIGhvdyBpdCBiZWhhdmVzIHdoZW4gZHluYW1pYyBOZXRjb25zb2xlIGlzIGVuYWJsZWQgdmVyc3VzIHdoZW4gaXQncyBkaXNhYmxlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHNlbmRfdWRwX2R5bmAsIG9yIHBlcmhhcHMgYHdyaXRlX21zZ2AgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgbWVzc2FnZSBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGUgZGlmZmVyZW5jZXMgaW4gbWVzc2FnZSBzZW5kaW5nLCBhbmQgcG90ZW50aWFsbHkgZnJhbWluZywgc2hvdWxkIGJlIGFwcGFyZW50IGluIHRob3NlIGZ1bmN0aW9ucy4gSSdtIHJlYWxseSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaWZmZXJlbmNlcyBhdCB0aGUgdW5kZXJseWluZyBsZXZlbCwgYW5kIHdoaWNoIHBpZWNlcyBvZiB0aGUgcHV6emxlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OToxNy4xOTE1ODM0OTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzMyMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbmRfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1Nj1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTgwOnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxODEtXFx0XFx0XFx0ICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNy0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxODogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTktICogQG50OiB0YXJnZXQgdG8gc2VuZCBtZXNzYWdlIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyMi0gKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjIzOiAqIENhbGxzIG5ldHBvbGxfc2VuZF91ZHAgYW5kIGNsYXNzaWZpZXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgYW4gZXJyb3JcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXFx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjI1OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjI3OnN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyOC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjk6XFx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIzMC1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjQ0PXN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjc3OlxcdHNlbmRfdWRwKG50LCBudC1cXHUwMDNlYnVmLCBtc2dfbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI3OC19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI4OD1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNzY6XFx0XFx0c2VuZF91ZHAobnQsIG50LVxcdTAwM2VidWYsIGJ1Zl9vZmZzZXQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzc3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDI2PXN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDM0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDM1OlxcdC8qIEtlZXBzIHRoZSBwYXlsb2FkIHBpY2tlZCBiZWxvdyBhbGl2ZSB1bnRpbCB0aGUgbGFzdCBzZW5kX3VkcCgpLiAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDM2LVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDU4PXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ2NS1cXHRcXHRmcmFnID0gbWluKGxlZnQsIE1BWF9QUklOVF9DSFVOSyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NjY6XFx0XFx0c2VuZF91ZHAobnQsIHRtcCwgZnJhZyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjctXFx0XFx0dG1wICs9IGZyYWc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjE3LjIzNzMyMDE4M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTU0OTE4MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBUcmFuc21pc3Npb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc2VuZF91ZHBgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCdzIGNhbGxpbmcgYG5ldHBvbGxfc2VuZF91ZHBgLiBOb3csIHRoZXJlJ3MgYSBjb21tZW50IHJpZ2h0IGhlcmUgdGhhdCdzIGltbWVkaWF0ZWx5IGdyYWJiaW5nIG15IGF0dGVudGlvbi4gSXQgc3RhdGVzIHNvbWV0aGluZyBhYm91dCB0aGUgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIGBuZXRwb2xsX3NlbmRfdWRwYCBjYWxsLiBUaGF0J3MgYSBjbGFzc2ljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNjZW5hcmlvLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGVudGlyZSBmbG93LiBUaW1lIHRvIGxvb2sgdXAgdGhvc2Ugc3BlY2lmaWMgbGluZXMgaW4gdGhlIG5ldGNvbnNvbGUuYyBmaWxlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGF0IGNvbmZpZyBvcHRpb24uIExldCdzIHNlZSBpZiB0aGF0IGR5bmFtaWMgY29uc29sZSBoYW5kbGluZyBpcyBhY3R1YWxseSBhY3RpdmUgb3Igbm90IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjIzLjM5MjI0MTIwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMTU6XFx0fVxcbjIyMTY6XFx0XFxuMjIxNzpcXHQvKipcXG4yMjE4OlxcdCAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcXG4yMjE5OlxcdCAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbjIyMjA6XFx0ICogQG1zZzogbWVzc2FnZSB0byBzZW5kXFxuMjIyMTpcXHQgKiBAbGVuOiBsZW5ndGggb2YgbWVzc2FnZVxcbjIyMjI6XFx0ICpcXG4yMjIzOlxcdCAqIENhbGxzIG5ldHBvbGxfc2VuZF91ZHAgYW5kIGNsYXNzaWZpZXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgYW4gZXJyb3JcXG4yMjI0OlxcdCAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXFxuMjIyNTpcXHQgKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG4yMjI2OlxcdCAqL1xcbjIyMjc6XFx0c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbjIyMjg6XFx0e1xcbjIyMjk6XFx0XFx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcXG4yMjMwOlxcdFxcbjIyMzE6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcXG4yMjMyOlxcdFxcdFxcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xcbjIyMzM6XFx0XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2bnQtXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4yMjM0OlxcdFxcdFxcdFxcdHU2NF9zdGF0c19pbmMoXFx1MDAyNm50LVxcdTAwM2VzdGF0cy54bWl0X2Ryb3BfY291bnQpO1xcbjIyMzU6XFx0XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNm50LVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuMjIzNjpcXHRcXHRcXHR9IGVsc2UgaWYgKHJlc3VsdCA9PSAtRU5PTUVNKSB7XFxuMjIzNzpcXHRcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZudC1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbjIyMzg6XFx0XFx0XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2bnQtXFx1MDAzZXN0YXRzLmVub21lbV9jb3VudCk7XFxuMjIzOTpcXHRcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2bnQtXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4yMjQwOlxcdFxcdFxcdH1cXG4yMjQxOlxcdFxcdH1cXG4yMjQyOlxcdH1cXG4yMjQzOlxcdFxcbjIyNDQ6XFx0c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbjIyNDU6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqbXNnLFxcbjIyNDY6XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IG1zZ19sZW4sXFxuMjI0NzpcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcmVsZWFzZV9sZW4sXFxuMjI0ODpcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXFxuMjI0OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjIzLjM5MjM2NzUzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTEwNTE2NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZCB3YXMgYSBzbGlnaHRseSBvdXRkYXRlZCBsaW5lIGluIHRoZSBjb21tZW50LCBidXQgdGhlIGtleSB0aGluZyBpcyB0aGF0IGBzZW5kX3VkcGAgYWx3YXlzIGNhbGxzIGBuZXRwb2xsX3NlbmRfdWRwYC4gVGhhdCdzIGltcG9ydGFudC5cblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJcyB0aGlzIHRoaW5nIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0IG1vZGlmaWVzIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgaW4gUUVNVSwgR0NFLiBXZSdyZSB0YWxraW5nIGFib3V0IGR5bmFtaWMgY29uZmlnZnMgdGFyZ2V0IGNyZWF0aW9uLCBzZXR0aW5nIGxvY2FsIGFuZCByZW1vdGUgSVBzLCBlbmFibGluZyB0aGUgdGFyZ2V0LCBwdXNoaW5nIGNvbnNvbGUgbWVzc2FnZXMgb3ZlciB2aXJ0dWFsIGV0aGVybmV0IGludGVyZmFjZXMgKGR1bW15LCB2ZXRoLCB0YXApLCBhbmQgcG9raW5nIGFyb3VuZCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGVzLiBUaGF0J3MgYSBqdWljeSB0YXJnZXQuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMuIEl04oCZcyBwYXJzaW5nIElQIGFkZHJlc3NlcyBkaWZmZXJlbnRseSwgY2hhbmdpbmcgaG93IHRoZSBhZGRyZXNzIGZhbWlseSBpcyB0cmFja2VkLCB1c2luZyBgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5YCBhbmQgYG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHlgIGluc3RlYWQgb2YganVzdCBhbiBgaXB2NmAgZmxhZy4gSXTigJlzIGFkZGluZyB2YWxpZGF0aW9uIGluIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBjaGVja2luZyBpZiB0aGUgcmVtb3RlIElQIGlzIHNldCBhbmQgaWYgdGhlcmXigJlzIGEgZmFtaWx5IG1pc21hdGNoLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc190YWtlX2lwdjZgLCBhbmQgdGhlIHN5c2ZzIGhhbmRsZXJzIGZvciBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgbmV0cG9sbF91ZHBfY2hlY2tzdW1gLCBgcHVzaF9ldGhgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGFuZCB0aGUgY29tbWFuZC1saW5lIHBhcnNlciBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIEdpdmVuIGFsbCB0aGF0LCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSByaWdodCBjb25maWcgb3B0aW9ucyBlbmFibGVkLiBXZSBkZWZpbml0ZWx5IG5lZWQgYE5FVENPTlNPTEVgLCBhbmQgYWxzbyBgTkVUQ09OU09MRV9EWU5BTUlDYCAoYmVjYXVzZSBvZiBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBhbmQgYENPTkZJR0ZTX0ZTYCkuIFdlIG5lZWQgYENPTkZJR0ZTX0ZTYCAoaXQncyBhIGRlcGVuZGVuY3kgb2YgYE5FVENPTlNPTEVfRFlOQU1JQ2ApLiBXZSBvYnZpb3VzbHkgbmVlZCBgSU5FVGAgZm9yIElQdjQuIEFuZCwgdG8gYmUgY29tcGxldGUsIGBJUFY2YCBzaW5jZSB3ZSBoYXZlIElQdjYgc3VwcG9ydC4gSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIGluIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5Ob3csIGxldOKAmXMgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIG9uZXMgd2UgcmVhbGx5IHdhbnQgdG8gZm9jdXMgb24uIE9rYXksIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AsIGl0J3MgdGhlc2UgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZDogYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX3Rha2VfaXB2NmAsIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIExldCdzIGNvbmZpcm0gd2hpY2ggb25lcyBhcmUgaW1wb3J0YW50IGFuZCBub24tc3RhdGljIHNvIHdlIGNhbiBjYWxsIHRoZW0gZGlyZWN0bHkuIEFmdGVyIHZlcmlmaWNhdGlvbiwgaGVyZSBhcmUgdGhlIGltcG9ydGFudCBzeW1ib2xzIGZvciBtZTogYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX3Rha2VfaXB2NmAuXG5cbkFyZSB0aGVzZSBmdW5jdGlvbnMgdWJpcXVpdG91cz8gTm8sIHRoZXkncmUgYWxsIG5ldGNvbnNvbGUtc3BlY2lmaWMsIHNvIHRoZXkncmUgZXhjZWxsZW50IGZvY3VzIHN5bWJvbHMuIFRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgYWRkcmVzcyBwYXJzaW5nLCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGFjdHVhbCBzZW5kaW5nIG9mIFVEUCBwYWNrZXRzLlxuXG5MZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHJlYXNvbmluZyBtYWtlcyBzZW5zZS4gVGhlIHBhdGNoIGlzIGFsbCBhYm91dCByZWZhY3RvcmluZyBob3cgbmV0Y29uc29sZSBtYW5hZ2VzIElQIGFkZHJlc3Nlcy4gSXQncyBtb3ZpbmcgYXdheSBmcm9tIHRoZSBgaXB2NmAgZmxhZyBhbmQgdGhlIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBpbnN0ZWFkIGludHJvZHVjaW5nIGBzdHJ1Y3QgaW5ldF9hZGRyYCB0byBleHBsaWNpdGx5IHN0b3JlIGFkZHJlc3MgZmFtaWxpZXMuIEl0J3MgYWRkaW5nIHNvbWUgaW1wb3J0YW50IGFkZHJlc3MgZmFtaWx5IGNvbnNpc3RlbmN5IGNoZWNrcy4gVGhlIG5ldHBvbGwgc2V0dXAsIHBhcnNpbmcsIGFuZCBwYWNrZXQgY29uc3RydWN0aW9uIGxvZ2ljIGFyZSBhbGwgYmVpbmcgdXBkYXRlZC4gQW5kIHllcywgYWxsIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBkeW5hbWljIG5ldGNvbnNvbGUgY29uZmlnZnMgaW50ZXJmYWNlIHVuZGVyIGAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZWAuIEl0J3MgYSBuaWNlbHkgc2VsZi1jb250YWluZWQgbGl0dGxlIHN1YnN5c3RlbSwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuT2theSwgSSB0aGluayBJJ20gZ29vZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCByZWNvcmQgbXkgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDE1LCJPdXRwdXRUb2tlbnMiOjIxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTozMi41MDI4ODY4NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzcyNzczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGNvbnNfbmV0cG9sbF9zZXR1cFwiLFxuICAgIFwibmV0cG9sbF9wYXJzZV9pcF9hZGRyXCIsXG4gICAgXCJsb2NhbF9pcF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX2lwX3N0b3JlXCIsXG4gICAgXCJsb2NhbF9pcF9zaG93XCIsXG4gICAgXCJyZW1vdGVfaXBfc2hvd1wiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwibmV0Y29uc190YWtlX2lwdjRcIixcbiAgICBcIm5ldGNvbnNfdGFrZV9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIixcbiAgICBcImxvY2FsX2lwX3N0b3JlXCIsXG4gICAgXCJyZW1vdGVfaXBfc3RvcmVcIixcbiAgICBcImxvY2FsX2lwX3Nob3dcIixcbiAgICBcInJlbW90ZV9pcF9zaG93XCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zX3Rha2VfaXB2NFwiLFxuICAgIFwibmV0Y29uc190YWtlX2lwdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgSVAgYWRkcmVzcyBtYW5hZ2VtZW50IGluIHRoZSBuZXRjb25zb2xlIHN1YnN5c3RlbSBieSByZXBsYWNpbmcgdGhlIHNlcGFyYXRlIElQdjYgYm9vbGVhbiBmbGFnIGFuZCB1bmlvbiB3aXRoIGEgZGVkaWNhdGVkIGluZXRfYWRkciBzdHJ1Y3Qgc3RvcmluZyB0aGUgYWRkcmVzcyBmYW1pbHkuIEl0IG1vZGlmaWVzIGFkZHJlc3MgcGFyc2luZywgaW50ZXJmYWNlIElQIGF1dG8tcG9wdWxhdGlvbiwgYWRkcmVzcyBmYW1pbHkgdmFsaWRhdGlvbiBpbiBuZXRjb25zX25ldHBvbGxfc2V0dXAsIHN5c2ZzL2NvbmZpZ2ZzIGF0dHJpYnV0ZSBoYW5kbGVycywgYW5kIFVEUCB0cmFuc21pc3Npb24gcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgZHluYW1pYyBuZXRjb25zb2xlIHRhcmdldCBjb25maWd1cmF0aW9uIGluIGNvbmZpZ2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTozMi41ODA2MjA5MDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjE4OTk0NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6MzIuNTgxMTkwODkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTc2MTg0MjA5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxcblxcbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6XFxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cXG4yLiBQYXJzaW5nIGFuZCB1cGRhdGVzOiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBwb3B1bGF0ZXMgYGlwYCAodmlhIGBpbjRfcHRvbmApIG9yIGBpbjZgICh2aWEgYGluNl9wdG9uYCkgYW5kIHNldHMgYGZhbWlseWAgYWNjb3JkaW5nbHkgKGBBRl9JTkVUYCBvciBgQUZfSU5FVDZgKS4gV2hlbiBhdXRvLWRlcml2ZWQsIGBuZXRjb25zX3Rha2VfaXB2NGAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NmAgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYWRkcmVzcyBhbmQgc2V0IGBmYW1pbHlgLlxcbjMuIFVzZXItc3BhY2Ugb3V0cHV0IC8gaW5mbyBsZWFrczogU3lzZnMgYXR0cmlidXRlcyBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AgZW1pdCBmb3JtYXR0ZWQgc3RyaW5ncyBiYXNlZCBvbiB0aGUgdmVyaWZpZWQgYGZhbWlseWAgZGlzY3JpbWluYXRvciBhbmQgcmVhZCBvbmx5IHRoZSBmdWxseSBpbml0aWFsaXplZCBhZGRyZXNzIHVuaW9uIGZpZWxkcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXJzcGFjZS5cXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseWAgYW5kIHJlYWQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYGluNmAgb3IgYGlwYCBmaWVsZHMuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5YTk2NTVlY2UyNWQ5YTNlMmVhYjk4ODlhZGU1MjQxNDEwYjczMjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAxOjQ4OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5pbmRleCA0YWI1ZDdiMDVjZjEwLi42OTRiY2E0ODAzZDUwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcbkBAIC0xNDEsNiArMTQxLDExIEBAIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyB0aGVzZSBwYXJhbWV0ZXJzIG9mIGEgbmV0Y29uc29sZSB0YXJnZXQgdG8gdXNlcnNwYWNlOlxuIFx0dHJhbnNtaXRfZXJyb3JzXHROdW1iZXIgb2YgcGFja2V0IHNlbmQgZXJyb3JzXHRcdChyZWFkLW9ubHkpXG4gXHQ9PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgID09PT09PT09PT09PVxuIFxuK2xvY2FsX2lwIGlzIG9wdGlvbmFsOiBpZiBpdCBpcyBsZWZ0IHVuc2V0LCBuZXRjb25zb2xlIGRlcml2ZXMgYSBzb3VyY2VcbithZGRyZXNzIGZyb20gdGhlIGVncmVzcyBpbnRlcmZhY2Ugd2hlbiB0aGUgdGFyZ2V0IGlzIGVuYWJsZWQuIFdyaXRpbmcgYW55XG4rdmFsdWUgdG8gaXQsIGluY2x1ZGluZyAwLjAuMC4wLCB1c2VzIHRoYXQgdmFsdWUgdmVyYmF0aW0gYW5kIGRpc2FibGVzIHRoZVxuK2F1dG9tYXRpYyBzZWxlY3Rpb24uXG4rXG4gVGhlIFwiZW5hYmxlZFwiIGF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIG9mXG4gYSB0YXJnZXQgY2FuIGJlIHVwZGF0ZWQgb3Igbm90IC0tIHlvdSBjYW4gbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIG9mIG9ubHlcbiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmIFwiZW5hYmxlZFwiIGlzIDApLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggYjM1OGU1YzM2NzM1MS4uMjY3MjU0ZjA0NmRlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDYgKzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuK3N0cnVjdCBpbmV0X2FkZHIge1xuK1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbitcdHU4XHRcdFx0ZmFtaWx5O1xuK1x0dW5pb24ge1xuK1x0XHRfX2JlMzJcdFx0aXA7XG4rXHRcdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuK1x0fTtcbit9O1xuK1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4gICogQHJjdTpcdFVzZWQgdG8gZnJlZSB0aGUgcGF5bG9hZCBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbkBAIC0xOTUsNyArMjA0LDYgQEAgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIyNSw4ICsyMzMsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbi1cdHVuaW9uIGluZXRfYWRkclx0XHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuLVx0Ym9vbFx0XHRcdGlwdjY7XG4rXHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQyOCw2ICs0MzUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDY5LDI4ICs0NzcsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0fVxuIFxuIFx0bnQtXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXHUwMDNlaWZhX2xvY2FsO1xuK1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgSVAgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG4tICogbmV0Y29uc19uZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cbi0gKlxuLSAqIG50LVx1MDAzZWxvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6Mixcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXG4tICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmRcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cbi0gKi9cbi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4te1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4tXHRcdHJldHVybiBpcHY2X2FkZHJfYW55KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4tXHRyZXR1cm4gIW50LVx1MDAzZWxvY2FsX2lwLmlwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnM7XG5AQCAtNTAwLDYgKzQ5MiwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRucF9lcnIobnAsIFwicmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVERVNUQUREUlJFUTtcbitcdH1cbitcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG4rXHRcdG5wX2VycihucCwgXCJsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuQEAgLTUzNiwxNiArNTM5LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9XG4rXHRcdGVsc2VcbitcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MjcsMjQgKzcyNywyOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIHBvcnQgJWRcXG5cIiwgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQIHVuc2V0XFxuXCIpO1xuK1x0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUCB1bnNldFxcblwiKTtcbitcdGVsc2UgaWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4rLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc1NiwxNCArNzYwLDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuIFx0aWYgKHN0cltsZW4gLSAxXSA9PSAnXFxuJylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcbicpKVxuK1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODY4LDIwICs4NzYsMjQgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIlxcblwiKTtcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiXFxuXCIpO1xuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtMTIyNiw3ICsxMjM4LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTIzNSwxMCArMTI0Niw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0xMjUxLDcgKzEyNjAsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTI2MCwxMCArMTI2OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0yMDcyLDcgKzIwNzgsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFxuIFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xuIFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsXG5AQCAtMjExMyw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG5AQCAtMjE4Miw3ICsyMTg4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuIFxuIFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIFx0ZWxzZVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG5AQCAtMjE5OCw3ICsyMjA0LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdHNrYl9wdXQoc2tiLCBsZW4pO1xuIFxuIFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTtcbkBAIC0yNTI3LDEwICsyNTMzLDggQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4tXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcbiBcdGNoYXIgKmN1ciA9IG9wdDtcbiBcdGNoYXIgKmRlbGltO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRpZiAoKmN1ciAhPSAnQCcpIHtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xuQEAgLTI1NDQsMTYgKzI1NDgsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGN1cisrO1xuIFxuIFx0aWYgKCpjdXIgIT0gJy8nKSB7XG4tXHRcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRcdGlmIChpcHY2IFx1MDAzYyAwKVxuK1x0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0XHRlbHNlXG4tXHRcdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuIFx0Y3VyKys7XG5AQCAtMjU5NSwxMyArMjU5NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0aWYgKCFkZWxpbSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHQqZGVsaW0gPSAwO1xuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXHUwMDI2XHUwMDI2IG50LVx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2Vcbi1cdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRjdXIgPSBkZWxpbSArIDE7XG4gXG4gXHRpZiAoKmN1ciAhPSAwKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggMWM2YjFlZWM1ZWZkNi4uZWMwODIxYTViMDJkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTE2LDExICsxNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gXG4tdW5pb24gaW5ldF9hZGRyIHtcbi1cdF9fYmUzMlx0XHRpcDtcbi1cdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuLX07XG4tXG4gc3RydWN0IG5ldHBvbGwge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6MzIuNTgxMTkyMDgzWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MjcwNzg3NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRGVjaXNpb246IEFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGBuZXRjb25zb2xlYCBwYXRjaCB3YXJyYW50IHNwaW5uaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGVmZm9ydHM/IExldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZC4gTG9va3MgbGlrZSB3ZSd2ZSBnb3Qgc29tZSBkb2N1bWVudGF0aW9uIHR3ZWFrcyBpbiBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0YCDigJMgc3BlY2lmaWNhbGx5LCBjbGFyaWZ5aW5nIHRoYXQgYGxvY2FsX2lwYCBpcyBub3cgb3B0aW9uYWwuIEZpbmUsIG5vdCBpbW1lZGlhdGVseSBjb25jZXJuaW5nIGZyb20gYSBtZW1vcnkgc2FmZXR5IFBPVi5cblxuVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSwgaXQgc2VlbXMsIGlzIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBBaGEsIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCBkZWZpbml0aW9uOlxuXG5gYGBjXG5zdHJ1Y3QgaW5ldF9hZGRyIHtcblx0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cblx0dTggZmFtaWx5O1xuXHR1bmlvbiB7XG5cdFx0X19iZTMyIGlwO1xuXHRcdHN0cnVjdCBpbjZfYWRkciBpbjY7XG5cdH07XG59O1xuYGBgXG5cblRoaXMgaXMgdGhlIGtleS4gVGhleSd2ZSByZXBsYWNlZCBgdW5pb24gaW5ldF9hZGRyIGxvY2FsX2lwLCByZW1vdGVfaXA7IGJvb2wgaXB2NjtgIHdpdGggYHN0cnVjdCBpbmV0X2FkZHIgbG9jYWxfaXAsIHJlbW90ZV9pcDtgIGluIGBuZXRjb25zb2xlX3RhcmdldGAuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSB1c2luZyBhIHVuaW9uIHRvIHJlcHJlc2VudCB0aGUgSVAgYWRkcmVzcyBmYW1pbHksIHdpdGggdGhlIGBmYW1pbHlgIG1lbWJlciwgY291bGQgYmUgaW50ZXJlc3RpbmcuIFRoZSBjb21waWxlciAqc2hvdWxkKiBiZSBoYW5kbGluZyB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWNjZXNzIGNvcnJlY3RseSwgYnV0IHRoZXNlIHNvcnRzIG9mIGNoYW5nZXMgYXJlIHByaW1lIHRhcmdldHMgZm9yIHN1YnRsZSB1c2UtYWZ0ZXItZnJlZSBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIHBhcnRpY3VsYXJseSBpZiB0aGUgZmFtaWx5IGlzbid0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgb3B0aW9uYWwgbmF0dXJlIG9mIGBsb2NhbF9pcGAgbWlnaHQgY29tcGxpY2F0ZSBtYXR0ZXJzIGV2ZW4gZnVydGhlci5cblxuU28sIHdoZXJlIGFyZSB0aGVzZSBgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZD8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZS4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyBgbmV0Y29uc29sZV90YXJnZXRgIGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1c2VkLiBUaGF0IHdpbGwgdGVsbCBtZSBpZiB0aGVyZSBpcyBhbnkgcGxhY2UgdG8gdHJpZ2dlciBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMuIE9uY2UgSSBoYXZlIHRoZSBhbGxvY2F0aW9uIGFuZCB1c2Ugb2YgdGhhdCBzdHJ1Y3QgdW5kZXIgY29udHJvbCwgSSBjYW4gbWFrZSBhIGRlY2lzaW9uIGFib3V0IGFkZGluZyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjQ2Ljg1MTk4MzM4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTQxNjQzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipuZXRjb25zb2xlX3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjQ3LjAwNzkzMzAxMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTMxOTkwNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBNZW1vcnkgQWxsb2NhdGlvbnMgaW4gbmV0Y29uc29sZS5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBuZXRjb25zb2xlLmNgLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBldmVyeSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBtb2R1bGUuIFRoaXMgaXMgbGlrZWx5IG1vdGl2YXRlZCBieSBhIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhIG1lbW9yeSBsZWFrIGludmVzdGlnYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIHNlY3VyaXR5IGF1ZGl0LiBHaXZlbiB0aGUgbmF0dXJlIG9mIG5ldHdvcmtpbmcgY29kZSwgSSdtIGV4cGVjdGluZyBzb21lIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQsIHByb2JhYmx5IGZvciBidWZmZXJpbmcgcGFja2V0cywgY29uZmlndXJpbmcgY29ubmVjdGlvbnMsIG9yIHN0b3JpbmcgY29ubmVjdGlvbiBzdGF0ZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuXG5cbkknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCB0ZXh0IHNlYXJjaCB3aXRoaW4gdGhlIGZpbGUsIGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogYGttYWxsb2NgLCBga3phbGxvY2AsIGB2bWFsbG9jYCwgYGttZW1fY2FjaGVfYWxsb2NgLCBldGMuIEknbGwgbmVlZCB0byBiZSBtaW5kZnVsIG9mIG1hY3JvIHVzYWdlIHRoYXQgbWlnaHQgd3JhcCB0aGVzZSBmdW5jdGlvbnMuIENvbW1vbiBwYXR0ZXJucyBsaWtlIGFsbG9jYXRpb24gd3JhcHBlcnMsIGUuZy4gYE5FVERFVl9BTExPQ2Agb3Igc2ltaWxhciwgYXJlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIEkgYWxzbyBjYW4ndCBmb3JnZXQgY3VzdG9tIG1lbW9yeSBwb29sIGltcGxlbWVudGF0aW9ucyB0aGF0IGFyZSB1bmZvcnR1bmF0ZWx5IGNvbW1vbiBpbiBrZXJuZWwgY29kZSBhbmQgbWlnaHQgYmUgdXNlZCBpbiB0aGUgbW9kdWxlLCBzbyBJJ2xsIGFsc28gYmUgc2Nhbm5pbmcgZm9yIGN1c3RvbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB3aGljaCBtaWdodCBub3QgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9ycy5cblxuT25jZSBJJ3ZlIGlkZW50aWZpZWQgcG90ZW50aWFsIGFsbG9jYXRpb24gcG9pbnRzLCBJJ2xsIG5lZWQgdG8gdHJhY2UgZWFjaCBhbGxvY2F0aW9uIGJhY2sgdG8gaXRzIGNvcnJlc3BvbmRpbmcgZnJlZWluZyBtZWNoYW5pc20uIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFzc29jaWF0ZWQgYGtmcmVlYCBjYWxscz8gRG8gdGhleSBmb2xsb3cgYSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgcGF0aD8gQXJlIHRoZXJlIGFueSBkYW5nbGluZyBwb2ludGVycyBpZiB0aGVyZSdzIGFuIGVycm9yPyBBcmUgdGhlcmUgYW55IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcz8gV2l0aG91dCB0aGlzLCBJJ20ganVzdCBsaXN0aW5nIGFsbG9jYXRpb25zLiBJIGhhdmUgdG8gbG9vayBmb3IgdGhlIGFsbG9jYXRpb24gLyBkZWFsbG9jYXRpb24gcGFpcnMuXG5cbkknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiB0aGVzZSBhbGxvY2F0aW9ucy4gSXMgaXQgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3IgYSB0YXNrbGV0PyBUaGUgY29udGV4dCBkcmFtYXRpY2FsbHkgaW1wYWN0cyB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlIG5lZWQgZm9yIGFwcHJvcHJpYXRlIGxvY2tpbmcgbWVjaGFuaXNtcy4gSSdsbCBiZSBsb29raW5nIGZvciBzcGlubG9ja3MsIG11dGV4ZXMsIGFuZCBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSBuZWVkIHRvIGtub3cgaWYgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgb3Igbm90LlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIGNvbW1vbiBwaXRmYWxsczogYXJlIHRoZXJlIGFsbG9jYXRpb24gc2l6ZSBsaW1pdHMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBXaGF0IGFib3V0IG1lbW9yeSBmcmFnbWVudGF0aW9uIG92ZXIgdGltZT8gQW55IHVzZSBvZiBzbGFiIGNhY2hlcyBhbmQgYXJlIHRoZXkgY29uZmlndXJlZCBvcHRpbWFsbHkgZm9yIHRoZSBleHBlY3RlZCB3b3JrbG9hZD8gVGhpcyBtb2R1bGUgbWF5IGJlIGRlYWxpbmcgd2l0aCBkYXRhIHRoYXQgaXMgdXNlci1zdXBwbGllZCwgc28gSSBhbSB2ZXJ5IG11Y2ggb24gdGhlIGxvb2tvdXQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgdmFsaWRhdGlvbiwgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93cyBhbmQgb3RoZXIgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIG5ldHdvcmsgY29kZSwgYWZ0ZXIgYWxsLlxuXG5GaW5hbGx5LCBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IHRoZSBhbGxvY2F0aW9ucyBhZmZlY3QgcGVyZm9ybWFuY2UgYW5kIHdoZXRoZXIgd2UgY2FuIGltcHJvdmUgYW55dGhpbmcuIElzIHRoZXJlIGEgYmV0dGVyIGFsZ29yaXRobSBvciBkYXRhIHN0cnVjdHVyZSB0aGF0IGNvdWxkIHJlZHVjZSB0aGUgbmVlZCBmb3IgZHluYW1pYyBtZW1vcnk/IENvdWxkIHdlIHByZS1hbGxvY2F0ZSBzb21lIG1lbW9yeSBvciB1c2UgYSBzbGFiIGNhY2hlIG1vcmUgZWZmZWN0aXZlbHk/IFRoZSBnb2FsIGlzIHRvIG9idGFpbiBhIGhvbGlzdGljIHZpZXcgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1MS4xMzk5MjY3MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODg2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE4PXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCwgbmV0Y29uc29sZTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjA6c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0X3N0YXRzICB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMS1cXHR1NjRfc3RhdHNfdCB4bWl0X2Ryb3BfY291bnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcyPXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzgtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3OTogKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgwLSAqIEBsaXN0OlxcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0Llxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNy0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE4OnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzAtI2VuZGlmXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgc3RhdHM7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMi1cXHRlbnVtIHRhcmdldF9zdGF0ZVxcdHN0YXRlO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MD1zdGF0aWMgdm9pZCBfX2V4aXQgZHluYW1pY19uZXRjb25zb2xlX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3NjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yOTk9c3RhdGljIHZvaWQgX19leGl0IGR5bmFtaWNfbmV0Y29uc29sZV9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzA2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMDc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzEwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMTE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcHV0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMxMi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMTU6c3RhdGljIHZvaWQgcG9wdWxhdGVfY29uZmlnZnNfaXRlbShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTYtXFx0XFx0XFx0XFx0ICAgaW50IGNtZGxpbmVfY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzI0PXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMzAtLyogQ2hlY2sgaWYgdGhlIHRhcmdldCB3YXMgYm91bmQgYnkgbWFjIGFkZHJlc3MuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzMTpzdGF0aWMgYm9vbCBib3VuZF9ieV9tYWMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzMyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzNjpzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDM6c3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zNTc9c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU4LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU5OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNjA6XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzYxLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM2OC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzY5OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM3My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mzc0OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzc1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00MDE9c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDEzOnN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDE0LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0NTc6c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NTgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00ODUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ4NjpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00ODcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3NS0vKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTc2OnN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01OTYtLyogQ2hlY2tzIGlmIGEgZGVhY3RpdmF0ZWQgdGFyZ2V0IG1hdGNoZXMgYSBkZXZpY2UuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU5NzpzdGF0aWMgYm9vbCBkZWFjdGl2YXRlZF90YXJnZXRfbWF0Y2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTk4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjA5PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxMC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjYxMTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTItXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjEzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MTQ6XFx0bnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0LCByZXN1bWVfd3EpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjY5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NzA6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjcxLXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjcyOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3My1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MDA9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzAxLXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzAyOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcwMy1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzI1OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzUxPXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjgwNTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICp0b190YXJnZXQoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgxMi1cXHRyZXR1cm4gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODEzOlxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQsIGdyb3VwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODE0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MzA9c3RhdGljIHZvaWQgdHJpbV9uZXdsaW5lKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQxLS8qXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0MjogKiBBdHRyaWJ1dGUgb3BlcmF0aW9ucyBmb3IgbmV0Y29uc29sZV90YXJnZXQuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0My0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04NzU9c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc2LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODc3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg3OC1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04ODc9c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4OC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg4OTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OTAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTEyPXN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTMte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTQ6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTE1LVxcdHU2NCB4bWl0X2Ryb3BfY291bnQsIGVub21lbV9jb3VudDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05Mjg9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Mjkte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MzA6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtLVxcdTAwM2VjaV9wYXJlbnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MzEtXFx0Ym9vbCBjcHVfbnJfZW5hYmxlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NDE9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0My17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk0NDpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXFx1MDAzZWNpX3BhcmVudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0NS1cXHRib29sIHRhc2tuYW1lX2VuYWJsZWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTU0PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1Ni17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk1NzpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXFx1MDAzZWNpX3BhcmVudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1OC1cXHRib29sIHJlbGVhc2VfZW5hYmxlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NzA9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uZXRjb25zX2NvbnNvbGVzKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk3MS17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk3MjpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NzMtXFx0dTMyIGNvbnNvbGVfdHlwZV9uZWVkZWQgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTk5ND1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX21zZ2lkX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTk2LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTk3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cXHUwMDNlY2lfcGFyZW50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTk4LVxcdGJvb2wgbXNnaWRfZW5hYmxlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDE0PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMTYte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDE3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMTgtXFx0Ym9vbCBlbmFibGVkLCBjdXJyZW50X2VuYWJsZWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTExMj1zdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTQte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTE1OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTYtXFx0Ym9vbCByZWxlYXNlO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExMzk9c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE0MS17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNDI6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE0My1cXHRib29sIGV4dGVuZGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExNjU9c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2Ny17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNjg6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2OS1cXHRzaXplX3QgbGVuID0gY291bnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE5Mj1zdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExOTQte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTk1OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExOTYtXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEyMTQ9c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMTYte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjE3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMTgtXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEyMzY9c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzOC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMzk6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI0MC1cXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI1OD1zdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI2MC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNjE6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI2Mi1cXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI4NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI4NTpzdGF0aWMgc2l6ZV90IGNvdW50X3VzZXJkYXRhX2VudHJpZXMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI4Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI5MD1zdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyOTIte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjkzOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyOTQtXFx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTMzMD1zdGF0aWMgc3RydWN0IHVzZXJkYXRhICp0b191c2VyZGF0YShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMzNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMzNTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICp1c2VyZGF0YV90b190YXJnZXQoc3RydWN0IHVzZXJkYXRhICp1ZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMzNi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM0Mz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzUxLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzUyOnN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM3MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM3MTpzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDE5PXN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDIzLVxcdGNoYXIgb2xkX3ZhbHVlW01BWF9FWFRSQURBVEFfVkFMVUVfTEVOXTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQyNDpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDI1LVxcdHN0cnVjdCB1c2VyZGF0YSAqdWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ1Ny0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ1ODpzdGF0aWMgdm9pZCBkaXNhYmxlX3N5c2RhdGFfZmVhdHVyZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDU5LVxcdFxcdFxcdFxcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0NjU9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY3LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ2ODpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXFx1MDAzZWNpX3BhcmVudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NjktXFx0Ym9vbCBtc2dpZF9lbmFibGVkLCBjdXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0OTQ9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9yZWxlYXNlX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTYte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDk3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cXHUwMDNlY2lfcGFyZW50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ5OC1cXHRib29sIHJlbGVhc2VfZW5hYmxlZCwgY3VycjtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTIzPXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyNS17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1MjY6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtLVxcdTAwM2VjaV9wYXJlbnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI3LVxcdGJvb2wgdGFza25hbWVfZW5hYmxlZCwgY3VycjtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTUzPXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NTUte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTU2OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cXHUwMDNlY2lfcGFyZW50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1Ny1cXHRib29sIGNwdV9ucl9lbmFibGVkLCBjdXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MTI9c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjE0LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYxNTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjE2LVxcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjM1PXN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzYte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjM3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzgtXFx0c3RydWN0IHVzZXJkYXRhICp1ZDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjc5PUNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjgwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjgxOnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjgyLVxcdFxcdTAwMjZhdHRyX2VuYWJsZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5Ni0vKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjk3OiAqIEl0ZW0gb3BlcmF0aW9ucyBhbmQgdHlwZSBmb3IgbmV0Y29uc29sZV90YXJnZXQuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTgtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MDA6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDEte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzAyOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDMtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwODpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwOTpcXHQucmVsZWFzZVxcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxMC19O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzExLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzEyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzEzOlxcdC5jdF9hdHRyc1xcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfYXR0cnMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MTQ6XFx0LmN0X2l0ZW1fb3BzXFx0XFx0PSBcXHUwMDI2bmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MTUtXFx0LmN0X293bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzE4OnN0YXRpYyB2b2lkIGluaXRfdGFyZ2V0X2NvbmZpZ19ncm91cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE5LVxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcyMC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MjE6XFx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFxcdTAwMjZudC1cXHUwMDNlZ3JvdXAsIG5hbWUsIFxcdTAwMjZuZXRjb25zb2xlX3RhcmdldF90eXBlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcyMi1cXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXFx1MDAyNm50LVxcdTAwM2V1c2VyZGF0YV9ncm91cCwgXFxcInVzZXJkYXRhXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzI2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzI3OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmZpbmRfY21kbGluZV90YXJnZXQoY29uc3QgY2hhciAqbmFtZSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcyOC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3Mjk6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgKnJldCA9IE5VTEw7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MzAtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQ3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzQ4OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTAte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzUxOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTItXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzgxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzgyOnN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzg0LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc4NTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzg2LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTgzND1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM1OlxcdC5tYWtlX2dyb3VwXFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM2OlxcdC5kcm9wX2l0ZW1cXHQ9IGRyb3BfbmV0Y29uc29sZV90YXJnZXQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MzctfTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODQ1PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIG5ldGNvbnNvbGVfc3Vic3lzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NTQ6c3RhdGljIHZvaWQgcG9wdWxhdGVfY29uZmlnZnNfaXRlbShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODU1LVxcdFxcdFxcdFxcdCAgIGludCBjbWRsaW5lX2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NjQ6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9jcHVfbnIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg2NS1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzI6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF90YXNrbmFtZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgb2Zmc2V0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODczLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODgwOnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfcmVsZWFzZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgb2Zmc2V0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODg2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODg3OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfbXNnaWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg4OC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTkwMDpzdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTAxLVxcdFxcdFxcdCAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTI2PXN0YXRpYyBpbnQgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MjktXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTMwOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MzEtXFx0Ym9vbCBzdG9wcGVkID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk0MS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnQsIHRtcCwgXFx1MDAyNnRhcmdldF9saXN0LCBsaXN0KSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5NDI6XFx0XFx0bmV0Y29uc29sZV90YXJnZXRfZ2V0KG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk0My1cXHRcXHRpZiAobnQtXFx1MDAzZW5wLmRldiA9PSBkZXYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTcxLVxcdFxcdFxcdHF1ZXVlX3dvcmsobmV0Y29uc29sZV93cSwgXFx1MDAyNm50LVxcdTAwM2VyZXN1bWVfd3EpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTcyOlxcdFxcdG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NzMtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwMDQ9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXRjb25zb2xlX25ldGRldl9ub3RpZmllciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDE5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDIwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMjEte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNDItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNDM6c3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDQ0LVxcdFxcdFxcdFxcdGludCByZXNlcnZlKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNjktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzA6c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3MS1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDk0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDk1OnN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwOTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMTItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMTM6c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjExNC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjEyODpzdGF0aWMgdm9pZCBwdXNoX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyOS1cXHRcXHQgICAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTY6c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTctXFx0XFx0ICAgICAgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTgwOnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxODEtXFx0XFx0XFx0ICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNzpzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNDMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNDQ6c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQ1LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjgwPXN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjg4OnN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyODktXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzgwOnN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM4MS1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyNS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQyNjpzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ1Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ1ODpzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDU5LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0Nzk9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODAte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDgxOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODItXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUyOD1fX3JlbGVhc2VzKFxcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MzItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MzM6c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzNC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyMC0vKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYyMTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNtZGxpbmVfY291bnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MjMte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjI0OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MjUtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjgyLS8qIENsZWFudXAgbmV0cG9sbCBmb3IgZ2l2ZW4gdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgZnJlZSBpdCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjgzOnN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3MTM9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcxNS1cXHRpbnQgZXJyO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzE2OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MTctXFx0dTMyIGNvbnNvbGVfdHlwZV9uZWVkZWQgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3OTQ9c3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmV0Y29uc29sZSh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzk1LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc5NjpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCAqdG1wO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1MS4xODY4MjA1NjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0MDI5NTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBOZXR3b3JrIENvbnNvbGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMuIExldCdzIHN0YXJ0IGJ5IGNyYWNraW5nIG9wZW4gYGFsbG9jX2FuZF9pbml0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGFuZCBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAgdXNpbmcgYHJlYWQtZmlsZWAuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggbmV0d29yayBjb25zb2xlIGluaXRpYWxpemF0aW9uIGhlcmUsIGFuZCB0aGVzZSBhcmUgbGlrZWx5IHRoZSBidWlsZGluZyBibG9ja3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgYWxsb2NhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgY29uc29sZSB0YXJnZXRzLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJlsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBwYXJhbWV0ZXIgcGFyc2luZywgYW5kIHRoZSBvdmVyYWxsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGRlZmluZSB0aGUgbmV0d29yayBjb25zb2xlIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlIHRvIGVuYWJsZSBuZXR3b3JrIGRlYnVnZ2luZy4gSSBleHBlY3QgdG8gc2VlIGFsbG9jYXRpb24gZm9yIGJ1ZmZlcnMsIHBlcmhhcHMgc3RydWN0dXJlcyB0byBob2xkIG5ldHdvcmsgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGRhdGEuIFRoZSBcInRhcmdldFwiIHBhcnQgaW1wbGllcyB0aGVzZSBhcmUgZGVzY3JpYmluZyB3aGVyZSB0aGUgY29uc29sZSBvdXRwdXQgaXMgZ29pbmcgdG8uIFRoZSBcInBhcmFtXCIgYXNwZWN0IHByb2JhYmx5IHJlbGF0ZXMgdG8gcGFzc2luZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQncyBnZXQgdG8gdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1My45MjcxMTk4NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjU6XFx0fVxcbiA2NjY6XFx0XFxuIDY2NzpcXHQvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHRzLlxcbiA2Njg6XFx0ICogTm90ZSB0aGF0IHRoZXNlIHRhcmdldHMgZ2V0IHRoZWlyIGNvbmZpZ19pdGVtIGZpZWxkcyB6ZXJvZWQtb3V0LlxcbiA2Njk6XFx0ICovXFxuIDY3MDpcXHRzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxcbiA2NzE6XFx0e1xcbiA2NzI6XFx0XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcXG4gNjczOlxcdFxcbiA2NzQ6XFx0XFx0bnQgPSBremFsbG9jX29iaigqbnQpO1xcbiA2NzU6XFx0XFx0aWYgKCFudClcXG4gNjc2OlxcdFxcdFxcdHJldHVybiBudDtcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRVhURU5ERURfTE9HKSlcXG4gNjc5OlxcdFxcdFxcdG50LVxcdTAwM2VleHRlbmRlZCA9IHRydWU7XFxuIDY4MDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0UpKVxcbiA2ODE6XFx0XFx0XFx0bnQtXFx1MDAzZXJlbGVhc2UgPSB0cnVlO1xcbiA2ODI6XFx0XFxuIDY4MzpcXHRcXHRudC1cXHUwMDNlbnAubmFtZSA9IFxcXCJuZXRjb25zb2xlXFxcIjtcXG4gNjg0OlxcdFxcdHN0cnNjcHkobnQtXFx1MDAzZW5wLmRldl9uYW1lLCBcXFwiZXRoMFxcXCIsIElGTkFNU0laKTtcXG4gNjg1OlxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wb3J0ID0gNjY2NTtcXG4gNjg2OlxcdFxcdG50LVxcdTAwM2VyZW1vdGVfcG9ydCA9IDY2NjY7XFxuIDY4NzpcXHRcXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiA2ODg6XFx0XFx0bnQtXFx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XFxuIDY4OTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm50LVxcdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XFxuIDY5MDpcXHRcXHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xcbiA2OTE6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sKTtcXG4gNjkyOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0cmV0dXJuIG50O1xcbiA2OTU6XFx0fVxcbiA2OTY6XFx0XFxuIDY5NzpcXHQvKiBDbGVhbiB1cCBldmVyeSB0YXJnZXQgaW4gdGhlIGNsZWFudXBfbGlzdCBhbmQgbW92ZSB0aGUgY2xlYW4gdGFyZ2V0cyBiYWNrIHRvXFxuIDY5ODpcXHQgKiB0aGUgbWFpbiB0YXJnZXRfbGlzdC5cXG4gNjk5OlxcdCAqL1xcbiA3MDA6XFx0c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG4gNzAxOlxcdHtcXG4gNzAyOlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuIDcwMzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA3MDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjUzLjkyNzI0ODYxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM5NjAyMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBQYXJhbWV0ZXIgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gQmVmb3JlIGRpdmluZyBkZWVwZXIsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gVGhlIGN1cnJlbnQgZm9jdXMgc2VlbXMgdG8gYmUgb24gYSBzcGVjaWZpYyBhcmVhLCBidXQgaXQncyBjcnVjaWFsIHRvIHBlcmZvcm0gYSBjb21wbGV0ZSBzeXN0ZW1zIGNoZWNrLiBUaGF0IG1lYW5zIG5vdCBvbmx5IGNoZWNraW5nIHRoZSBtb3JlIG9idmlvdXMgYXJlYSwgYnV0IGFsc28gY29uc2lkZXJpbmcgdGhlIGJyb2FkZXIgcGljdHVyZS4gU28sIHJpZ2h0IG5vdywgdGhlIG1vc3QgcHJlc3NpbmcgdGhpbmcgaXMgdGhhdCBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzY29wZSBhIGJpdC4gTGV0J3Mgc2VlIGlmIHdlJ3ZlIGFkZHJlc3NlZCB0aGlzIHdpdGggYGFsbG9jX3BhcmFtX3RhcmdldGAgYXMgd2VsbC4gUGVyaGFwcyB0aGUgaXNzdWVzIHN0ZW0gZnJvbSBob3cgdGhhdCdzIGJlaW5nIGhhbmRsZWQuIFdlIG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSB0byBlbnN1cmUgd2UncmUgbm90IG1pc3NpbmcgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODUxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1NS44NjY4NTM3NDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjIwOlxcdC8qIEFsbG9jYXRlIG5ldyB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBzZXR1cCBuZXRwb2xsIGZvciBpdCAqL1xcbjI2MjE6XFx0c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuMjYyMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNtZGxpbmVfY291bnQpXFxuMjYyMzpcXHR7XFxuMjYyNDpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbjI2MjU6XFx0XFx0aW50IGVycjtcXG4yNjI2OlxcdFxcbjI2Mjc6XFx0XFx0bnQgPSBhbGxvY19hbmRfaW5pdCgpO1xcbjI2Mjg6XFx0XFx0aWYgKCFudCkge1xcbjI2Mjk6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yNjMwOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNjMxOlxcdFxcdH1cXG4yNjMyOlxcdFxcbjI2MzM6XFx0XFx0aWYgKCp0YXJnZXRfY29uZmlnID09ICcrJykge1xcbjI2MzQ6XFx0XFx0XFx0bnQtXFx1MDAzZWV4dGVuZGVkID0gdHJ1ZTtcXG4yNjM1OlxcdFxcdFxcdHRhcmdldF9jb25maWcrKztcXG4yNjM2OlxcdFxcdH1cXG4yNjM3OlxcdFxcbjI2Mzg6XFx0XFx0aWYgKCp0YXJnZXRfY29uZmlnID09ICdyJykge1xcbjI2Mzk6XFx0XFx0XFx0aWYgKCFudC1cXHUwMDNlZXh0ZW5kZWQpIHtcXG4yNjQwOlxcdFxcdFxcdFxcdHByX2VycihcXFwiTmV0Y29uc29sZSBjb25maWd1cmF0aW9uIGVycm9yLiBSZWxlYXNlIGZlYXR1cmUgcmVxdWlyZXMgZXh0ZW5kZWQgbG9nIG1lc3NhZ2VcXFwiKTtcXG4yNjQxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMjY0MjpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjY0MzpcXHRcXHRcXHR9XFxuMjY0NDpcXHRcXHRcXHRudC1cXHUwMDNlcmVsZWFzZSA9IHRydWU7XFxuMjY0NTpcXHRcXHRcXHR0YXJnZXRfY29uZmlnKys7XFxuMjY0NjpcXHRcXHR9XFxuMjY0NzpcXHRcXG4yNjQ4OlxcdFxcdC8qIFBhcnNlIHBhcmFtZXRlcnMgYW5kIHNldHVwIG5ldHBvbGwgKi9cXG4yNjQ5OlxcdFxcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xcbjI2NTA6XFx0XFx0aWYgKGVycilcXG4yNjUxOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xcbjI2NTQ6XFx0XFx0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZS4gVGhlIHRhcmdldCBpcyBub3RcXG4yNjU1OlxcdFxcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxcbjI2NTY6XFx0XFx0ICogbWlycm9yIHRoZSBjb25maWdmcyBwYXRoIGZvciBzeW1tZXRyeS5cXG4yNjU3OlxcdFxcdCAqL1xcbjI2NTg6XFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcXG4yNjU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1NS44NjY5OTMyNDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMTk5MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIERlZXBlcjogRXhwYW5kaW5nIHRoZSBTY29wZSBvZiB0aGUgSW5xdWlyeSoqXG5cbk9rYXksIEkndmUganVzdCBiZWVuIGxvb2tpbmcgYXQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIG1vZHVsZSwgYnV0IEkgdGhpbmsgSSBuZWVkIHRvIGJyb2FkZW4gbXkgaW52ZXN0aWdhdGlvbiBhIGJpdC4gTXkgaW5pdGlhbCBmb2N1cyB3YXMgb24gW2ltcGxpZWQgcHJldmlvdXMgdG9waWMsIGUuZy4sIGVycm9yIGhhbmRsaW5nLCBhIHNwZWNpZmljIGRyaXZlcl0uIEhvd2V2ZXIsIGl0J3Mgb2NjdXJyZWQgdG8gbWUgdGhhdCBhIHJlbGF0ZWQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAsIG1pZ2h0IGJlIHJlbGV2YW50IGFuZCBJIHNob3VsZG4ndCBpZ25vcmUgaXQuIEl0J3MgbGlrZWx5IHRoYXQgYSBjaGFuZ2Ugb3IgaXNzdWUgaW4gb25lIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMgaW4gdGhlIG90aGVyLiBJdCBtaWdodCBwcm92aWRlIG1vcmUgY29udGV4dCBvciByZXZlYWwgYSBtb3JlIGhvbGlzdGljIHBlcnNwZWN0aXZlIG9uIHRoZSBwcm9ibGVtIG9yIHRhc2sgYXQgaGFuZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgb3IgbW9kdWxlIGFuZCBleGFtaW5lIHRoZSBsb2dpYyB0aGVyZSB0b28sIGFzIHBhcnQgb2YgdGhpcyBhbmFseXNpcy4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBpbnRlcnBsYXkgb3Igc2hhcmVkIHJlc291cmNlcywgYW5kIEkgd2FudCB0byBjb3ZlciBhbGwgYmFzZXMgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6NTguMDc4OTg3OTgyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc0NTpcXHQgKiBHcm91cCBvcGVyYXRpb25zIGFuZCB0eXBlIGZvciBuZXRjb25zb2xlX3N1YnN5cy5cXG4xNzQ2OlxcdCAqL1xcbjE3NDc6XFx0XFxuMTc0ODpcXHRzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4xNzQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuMTc1MDpcXHR7XFxuMTc1MTpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbjE3NTI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xNzUzOlxcdFxcbjE3NTQ6XFx0XFx0LyogQ2hlY2tpbmcgaWYgYSB0YXJnZXQgYnkgdGhpcyBuYW1lIHdhcyBjcmVhdGVkIGF0IGJvb3QgdGltZS4gIElmIHNvLFxcbjE3NTU6XFx0XFx0ICogYXR0YWNoIGEgY29uZmlnZnMgZW50cnkgdG8gdGhhdCB0YXJnZXQuICBUaGlzIGVuYWJsZXMgZHluYW1pY1xcbjE3NTY6XFx0XFx0ICogY29udHJvbC5cXG4xNzU3OlxcdFxcdCAqL1xcbjE3NTg6XFx0XFx0aWYgKCFzdHJuY21wKG5hbWUsIE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCxcXG4xNzU5OlxcdFxcdFxcdCAgICAgc3RybGVuKE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCkpKSB7XFxuMTc2MDpcXHRcXHRcXHRudCA9IGZpbmRfY21kbGluZV90YXJnZXQobmFtZSk7XFxuMTc2MTpcXHRcXHRcXHRpZiAobnQpIHtcXG4xNzYyOlxcdFxcdFxcdFxcdGluaXRfdGFyZ2V0X2NvbmZpZ19ncm91cChudCwgbmFtZSk7XFxuMTc2MzpcXHRcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNm50LVxcdTAwM2Vncm91cDtcXG4xNzY0OlxcdFxcdFxcdH1cXG4xNzY1OlxcdFxcdH1cXG4xNzY2OlxcdFxcbjE3Njc6XFx0XFx0bnQgPSBhbGxvY19hbmRfaW5pdCgpO1xcbjE3Njg6XFx0XFx0aWYgKCFudClcXG4xNzY5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjE3NzA6XFx0XFxuMTc3MTpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSBjb25maWdfZ3JvdXAgbWVtYmVyICovXFxuMTc3MjpcXHRcXHRpbml0X3RhcmdldF9jb25maWdfZ3JvdXAobnQsIG5hbWUpO1xcbjE3NzM6XFx0XFxuMTc3NDpcXHRcXHQvKiBBZGRpbmcsIGJ1dCBpdCBpcyBkaXNhYmxlZCAqL1xcbjE3NzU6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4xNzc2OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZudC1cXHUwMDNlbGlzdCwgXFx1MDAyNnRhcmdldF9saXN0KTtcXG4xNzc3OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4xNzc4OlxcdFxcbjE3Nzk6XFx0XFx0cmV0dXJuIFxcdTAwMjZudC1cXHUwMDNlZ3JvdXA7XFxuMTc4MDpcXHR9XFxuMTc4MTpcXHRcXG4xNzgyOlxcdHN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuMTc4MzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuMTc4NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjU4LjA3OTEzNDYwMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjkyOTEzMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW5ldF9hZGRyIFN0cnVjdHVyZSBpbiBuZXRjb25zb2xlLmMqKlxuXG5Pa2F5LCBzbyBgYWxsb2NfYW5kX2luaXRgIHVzZXMgYGt6YWxsb2Nfb2JqKCpudClgLCBtZWFuaW5nIHRoZSBgbnRgIHN0cnVjdCBpcyBjb21wbGV0ZWx5IHplcm8taW5pdGlhbGl6ZWQuIFRoYXQncyBnb29kIHRvIGtub3cuIFNwZWNpZmljYWxseSwgdGhpcyBtZWFucyB0aGUgYGZhbWlseWAgbWVtYmVyLCB3aGljaCBJIHNlZSBpcyBwYXJ0IG9mIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3R1cmUsIHdpbGwgc3RhcnQgYXMgYDBgLCB3aGljaCB0cmFuc2xhdGVzIHRvIGBBRl9VTlNQRUNgLiBUaGUgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgbWVtYmVycywgYWxzbyBgaW5ldF9hZGRyYCBzdHJ1Y3RzLCBhcmUgYWxzbyB6ZXJvZWQgb3V0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpbmV0X2FkZHJgIGlzIHVzZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgcG90ZW50aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gSVB2NCBhbmQgSVB2Ni4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgaGFuZGxlcyBpdDpcblxuYGBgY1xuc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxue1xuXHRjb25zdCBjaGFyICplbmQgPSBOVUxMO1xuXHRpbnQgbGVuO1xuXG5cdGxlbiA9IHN0cmxlbihzdHIpO1xuXHRpZiAobGVuID09IDApXG5cdFx0cmV0dXJuIC0xO1xuXHRpZiAoc3RyW2xlbiAtIDFdID09ICdcXG4nKVxuXHRcdGxlbiAtPSAxO1xuXG5cdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWlwLCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcblx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuXHRcdGFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjZcblx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaW42LCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcblx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuXHRcdGFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDY7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gLTE7XG59XG5gYGBcblxuT2theSwgc28gd2hlbiBgaW40X3B0b25gIHN1Y2NlZWRzLCBpdCB3cml0ZXMgNCBieXRlcyB0byBgYWRkci1cdTAwM2VpcGAgYW5kIHNldHMgYGFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVGAuIE1ha2VzIHNlbnNlLiBXaGVuIGBpbjZfcHRvbmAgc3VjY2VlZHMsIGl0IHdyaXRlcyAxNiBieXRlcyB0byBgYWRkci1cdTAwM2VpbjZgLCBhbmQgc2V0cyBgYWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNmAuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgaG93IGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIGFyZSB1cGRhdGVkLCBiZWNhdXNlIHRoZXkgYXJlIGBpbmV0X2FkZHJgIHN0cnVjdHVyZXMsIHdoaWNoIGFyZSBsaWtlbHkgdW5pb25zLlxuXG5UaGUgdnVsbmVyYWJpbGl0eSBjb3VsZCBjb21lIGludG8gcGxheSB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXMuIGBsb2NhbF9pcF9zdG9yZWAgaXMgYSBnb29kIGV4YW1wbGUuXG5cbmBgYGNcblx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcblx0XHRnb3RvIG91dF91bmxvY2s7XG5gYGBcblxuTGV0J3Mgc2F5IGBudC1cdTAwM2Vsb2NhbF9pcGAgd2FzIHByZXZpb3VzbHkgSVB2NiAobWVhbmluZyB0aGUgYGluNmAgbWVtYmVyIGhlbGQgMTYgYnl0ZXMpLiBOb3csIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIHBhcnNlcyBhbiBJUHY0IGFkZHJlc3MuICBgaW40X3B0b25gIHdyaXRlcyBvbmx5IDQgYnl0ZXMgaW50byBgYWRkci1cdTAwM2VpcGAgKHRoZSBzdGFydCBvZiB0aGUgdW5pb24pLCBhbmQgc2V0cyBgYWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUYC4gIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgd2hlbiBgYWRkci1cdTAwM2VmYW1pbHlgIGlzIGBBRl9JTkVUYCwgaXMgYW55dGhpbmcgYWN0dWFsbHkgKnJlYWRpbmcqIHRoZSAqcmVtYWluaW5nKiAxMiBieXRlcyBvZiB0aGUgdW5pb24/IElmIG5vdCwgdGhlcmUncyBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIG9yIGNvcnJ1cHRpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHN1YnNlcXVlbnQgY29kZSBwYXRocyBtaWdodCB1c2UgdGhlIGBpbjZgIG1lbWJlciBhZnRlciB0aGlzIGtpbmQgb2YgdHJhbnNpdGlvbi4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgYWxsIGFjY2Vzc2VzIHRvIGJvdGggYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgdG8gYmUgc3VyZS4gU28sIGxldCdzIGdyZXAgZm9yIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gVGhhdCBzaG91bGQgcmV2ZWFsIGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoZXNlIG1lbWJlcnMgYXJlIHVzZWQgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjUwOjAzLjM3MjA1MDc2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4MDg0NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihsb2NhbF9pcHxyZW1vdGVfaXApXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcyPXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDQtICpcXHRcXHRsb2NhbF9tYWNcXHQocmVhZC1vbmx5KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDU6ICogQGxvY2FsX2lwOlxcdFNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDY6ICogQHJlbW90ZV9pcDpcXHREZXN0aW5hdGlvbiBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDctICogQGxvY2FsX3BvcnQ6XFx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxOD1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNS1cXHRzdHJ1Y3QgbmV0cG9sbFxcdFxcdG5wO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzY6XFx0c3RydWN0IGluZXRfYWRkclxcdGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNy1cXHR1MTZcXHRcXHRcXHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00MDE9c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxMC0vKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0MTE6ICogUG9wdWxhdGUgdGhlIHRhcmdldCdzIGxvY2FsX2lwIHdpdGggdGhlIElQdjYgYWRkcmVzcyBmcm9tIG5kZXYuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDEzPXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzMtXFx0XFx0XFx0aWYgKCEhKGlwdjZfYWRkcl90eXBlKFxcdTAwMjZpZnAtXFx1MDAzZWFkZHIpIFxcdTAwMjYgSVBWNl9BRERSX0xJTktMT0NBTCkgIT1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDM0OlxcdFxcdFxcdFxcdCEhKGlwdjZfYWRkcl90eXBlKFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmluNikgXFx1MDAyNiBJUFY2X0FERFJfTElOS0xPQ0FMKSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDM1LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzYtXFx0XFx0XFx0LyogR290IHRoZSBJUCwgbGV0J3MgcmV0dXJuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQzNzpcXHRcXHRcXHRudC1cXHUwMDNlbG9jYWxfaXAuaW42ID0gaWZwLVxcdTAwM2VhZGRyO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0Mzg6XFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzktXFx0XFx0XFx0ZXJyID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NDktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1MDpcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NiAlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU0LS8qXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1NTogKiBQb3B1bGF0ZSB0aGUgdGFyZ2V0J3MgbG9jYWxfaXAgd2l0aCB0aGUgSVB2NCBhZGRyZXNzIGZyb20gbmRldi5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00NTc9c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ3OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDc5OlxcdG50LVxcdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cXHUwMDNlaWZhX2xvY2FsO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0ODA6XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ4MTpcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVAgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pcCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00ODY9c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00OTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ5NTpcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ5Ni1cXHRcXHRucF9lcnIobnAsIFxcXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ5OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTAwOlxcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1MDE6XFx0ICAgIG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTAyLVxcdFxcdG5wX2VycihucCwgXFxcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NDEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU0MjpcXHRpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTQzOlxcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQ0LVxcdFxcdFxcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NjctXFx0aWYgKGlwX292ZXJ3cml0dGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1Njg6XFx0XFx0bWVtc2V0KFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAsIDAsIHNpemVvZihudC1cXHUwMDNlbG9jYWxfaXApKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTY5LVxcdG5ldGRldl9wdXQobmRldiwgXFx1MDAyNm5wLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzI1PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI5LVxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjczMDpcXHRpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczMS1cXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVAgdW5zZXRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MzI6XFx0ZWxzZSBpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzMzOlxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaW42KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM0LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM1OlxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pcCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNi1cXHRucF9pbmZvKG5wLCBcXFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcXFxuXFxcIiwgbnAtXFx1MDAzZWRldl9uYW1lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzgtXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3Mzk6XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQwLVxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVAgdW5zZXRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NDE6XFx0ZWxzZSBpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc0MjpcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQzLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzQ0OlxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmlwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQ1LVxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXFxcblxcXCIsIG50LVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03NTE9c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5MS0gKlxcdFxcdFxcdFxcdHxcXHRyZW1vdGVfcG9ydFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3OTI6ICpcXHRcXHRcXHRcXHR8XFx0bG9jYWxfaXBcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzkzOiAqXFx0XFx0XFx0XFx0fFxcdHJlbW90ZV9pcFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03OTQtICpcXHRcXHRcXHRcXHR8XFx0bG9jYWxfbWFjXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9ODcwPXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NzU6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NzgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3OTpcXHRpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4MC1cXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODE6XFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg4MjpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODMtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODQ6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pcCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4NS19XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODg3OnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODkxOlxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5Mi1cXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTM6XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTQ6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmluNik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5NS1cXHRlbHNlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg5NjpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pcCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5Ny19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTIxND1zdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIzNjpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzNy1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI0OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI0OTpcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCkgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjUwLVxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjU4OnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1OS1cXHQgICAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNzAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNzE6XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKSBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNzItXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NzM9Q09ORklHRlNfQVRUUigsIHJlbW90ZV9wb3J0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3NDpDT05GSUdGU19BVFRSKCwgbG9jYWxfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjc1OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjc2LUNPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2ODE9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4Ny1cXHRcXHUwMDI2YXR0cl9yZW1vdGVfcG9ydCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY4ODpcXHRcXHUwMDI2YXR0cl9sb2NhbF9pcCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY4OTpcXHRcXHUwMDI2YXR0cl9yZW1vdGVfaXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTAtXFx0XFx1MDAyNmF0dHJfbG9jYWxfbWFjLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwNzA9c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDgwLVxcdHVkcGgtXFx1MDAzZWNoZWNrID0gMDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA4MTpcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwODI6XFx0XFx0dWRwaC1cXHUwMDNlY2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwODM6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDg0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODYtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDg3OlxcdFxcdHVkcGgtXFx1MDAzZWNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMobnQtXFx1MDAzZWxvY2FsX2lwLmlwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDg4OlxcdFxcdFxcdFxcdFxcdFxcdG50LVxcdTAwM2VyZW1vdGVfaXAuaXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODktXFx0XFx0XFx0XFx0XFx0XFx0dWRwX2xlbiwgSVBQUk9UT19VRFAsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjExMz1zdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjEtXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMjI6XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTIzLVxcdFxcdGV0aC1cXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMjg9c3RhdGljIHZvaWQgcHVzaF9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE0OS1cXHRpcGgtXFx1MDAzZWNoZWNrID0gMDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1MDpcXHRwdXRfdW5hbGlnbmVkKG50LVxcdTAwM2Vsb2NhbF9pcC5pcCwgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTUxOlxcdHB1dF91bmFsaWduZWQobnQtXFx1MDAzZXJlbW90ZV9pcC5pcCwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUyLVxcdGlwaC1cXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKilpcGgsIGlwaC1cXHUwMDNlaWhsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTU2PXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzMtXFx0aXA2aC1cXHUwMDNlaG9wX2xpbWl0ID0gMzI7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNzQ6XFx0aXA2aC1cXHUwMDNlc2FkZHIgPSBudC1cXHUwMDNlbG9jYWxfaXAuaW42O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTc1OlxcdGlwNmgtXFx1MDAzZWRhZGRyID0gbnQtXFx1MDAzZXJlbW90ZV9pcC5pbjY7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE4MD1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTAtXFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5MTpcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTItXFx0XFx0aXBfbGVuID0gdWRwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNi1cXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjA3OlxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC1cXHRcXHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTMzPXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU1NC1cXHRcXHQqZGVsaW0gPSAwO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTU1OlxcdFxcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwKSBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NTYtXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU5Ny1cXHQqZGVsaW0gPSAwO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTk4OlxcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcCkgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTk5LVxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAwOlxcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAxOlxcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjAyLVxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDowMy42MjAxNDM0MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNTQwNzExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIGxvb2tpbmcgaW50byByZWdhcmRpbmcgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGA6XG5cbioqRGlzc2VjdGluZyBuZXRjb25zX25ldHBvbGxfc2V0dXAgYW5kIFRhcmdldCBFbmFibGVtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAg4oCTIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0YXJnZXQgZW5hYmxlbWVudCB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgc2VlbXMgdG8gYmUgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGNyaXRpY2FsIHNlY3Rpb24gZnJvbSBsaW5lIDQ4MCB0byA1NzUuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoaXMgY29kZSBjaHVuayB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGFyZ2V0IGZvciB0aGUgY29uc29sZSBpcyBzZXQgdXAgYW5kIGFjdGl2YXRlZCB2aWEgdGhlIG5ldHBvbGwgbWVjaGFuaXNtLiBJdCdzIGxpa2VseSBpbiB0aGlzIHNlY3Rpb24gSSdsbCBmaW5kIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgd2hlcmUgYW5kIGhvdyBjb25zb2xlIG1lc3NhZ2VzIGFyZSB1bHRpbWF0ZWx5IHJvdXRlZCwgYW5kIHdoYXQgdHJpZ2dlcnMgdGhhdCByZWRpcmVjdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGFsbG93IG1lIHRvIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGEga2V5IGVsZW1lbnQgb2YgbmV0Y29uc29sZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjUwOjA1LjYyNTU1NDc5MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4NSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4NTpcXHRcXG4gNDg2OlxcdHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIDQ4NzpcXHR7XFxuIDQ4ODpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxuIDQ4OTpcXHRcXHRjaGFyIGJ1ZltNQUNfQUREUl9TVFJfTEVOICsgMV07XFxuIDQ5MDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IE5VTEw7XFxuIDQ5MTpcXHRcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbiA0OTI6XFx0XFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xcbiA0OTM6XFx0XFx0aW50IGVycjtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbiA0OTY6XFx0XFx0XFx0bnBfZXJyKG5wLCBcXFwicmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4gNDk3OlxcdFxcdFxcdHJldHVybiAtRURFU1RBRERSUkVRO1xcbiA0OTg6XFx0XFx0fVxcbiA0OTk6XFx0XFxuIDUwMDpcXHRcXHRpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4gNTAxOlxcdFxcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XFxuIDUwMjpcXHRcXHRcXHRucF9lcnIobnAsIFxcXCJsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuIDUwMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTA0OlxcdFxcdH1cXG4gNTA1OlxcdFxcbiA1MDY6XFx0XFx0cnRubF9sb2NrKCk7XFxuIDUwNzpcXHRcXHRpZiAobnAtXFx1MDAzZWRldl9uYW1lWzBdKVxcbiA1MDg6XFx0XFx0XFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXFx1MDAzZWRldl9uYW1lKTtcXG4gNTA5OlxcdFxcdGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobnAtXFx1MDAzZWRldl9tYWMpKVxcbiA1MTA6XFx0XFx0XFx0bmRldiA9IGRldl9nZXRieWh3YWRkcihuZXQsIEFSUEhSRF9FVEhFUiwgbnAtXFx1MDAzZWRldl9tYWMpO1xcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRpZiAoIW5kZXYpIHtcXG4gNTEzOlxcdFxcdFxcdG5wX2VycihucCwgXFxcIiVzIGRvZXNuJ3QgZXhpc3QsIGFib3J0aW5nXFxcXG5cXFwiLFxcbiA1MTQ6XFx0XFx0XFx0ICAgICAgIG5ldGNvbnNfZWdyZXNzX2RldihucCwgYnVmLCBzaXplb2YoYnVmKSkpO1xcbiA1MTU6XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gNTE2OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiA1MTc6XFx0XFx0fVxcbiA1MTg6XFx0XFx0bmV0ZGV2X2hvbGQobmRldiwgXFx1MDAyNm5wLVxcdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuIDUxOTpcXHRcXG4gNTIwOlxcdFxcdGlmIChuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmRldikpIHtcXG4gNTIxOlxcdFxcdFxcdG5wX2VycihucCwgXFxcIiVzIGlzIGEgc2xhdmUgZGV2aWNlLCBhYm9ydGluZ1xcXFxuXFxcIixcXG4gNTIyOlxcdFxcdFxcdCAgICAgICBuZXRjb25zX2VncmVzc19kZXYobnAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTtcXG4gNTIzOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4gNTI0OlxcdFxcdFxcdGdvdG8gcHV0O1xcbiA1MjU6XFx0XFx0fVxcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHRpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpIHtcXG4gNTI4OlxcdFxcdFxcdG5wX2luZm8obnAsIFxcXCJkZXZpY2UgJXMgbm90IHVwIHlldCwgZm9yY2luZyBpdFxcXFxuXFxcIixcXG4gNTI5OlxcdFxcdFxcdFxcdG5ldGNvbnNfZWdyZXNzX2RldihucCwgYnVmLCBzaXplb2YoYnVmKSkpO1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRcXHRlcnIgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcXG4gNTMyOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4gNTMzOlxcdFxcdFxcdFxcdG5wX2VycihucCwgXFxcImZhaWxlZCB0byBvcGVuICVzXFxcXG5cXFwiLCBuZGV2LVxcdTAwM2VuYW1lKTtcXG4gNTM0OlxcdFxcdFxcdFxcdGdvdG8gcHV0O1xcbiA1MzU6XFx0XFx0XFx0fVxcbiA1MzY6XFx0XFxuIDUzNzpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbiA1Mzg6XFx0XFx0XFx0bmV0Y29uc193YWl0X2NhcnJpZXIobnAsIG5kZXYpO1xcbiA1Mzk6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuIDU0MDpcXHRcXHR9XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbiA1NDM6XFx0XFx0XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiA1NDQ6XFx0XFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xcbiA1NDU6XFx0XFx0XFx0ZWxzZVxcbiA1NDY6XFx0XFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xcbiA1NDc6XFx0XFx0XFx0aWYgKGVycilcXG4gNTQ4OlxcdFxcdFxcdFxcdGdvdG8gcHV0O1xcbiA1NDk6XFx0XFx0XFx0aXBfb3ZlcndyaXR0ZW4gPSB0cnVlO1xcbiA1NTA6XFx0XFx0fVxcbiA1NTE6XFx0XFxuIDU1MjpcXHRcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xcbiA1NTM6XFx0XFx0aWYgKGVycilcXG4gNTU0OlxcdFxcdFxcdGdvdG8gcHV0O1xcbiA1NTU6XFx0XFx0cnRubF91bmxvY2soKTtcXG4gNTU2OlxcdFxcbiA1NTc6XFx0XFx0LyogTWFrZSBzdXJlIGFsbCBOQVBJIHBvbGxzIHdoaWNoIHN0YXJ0ZWQgYmVmb3JlIGRldi1cXHUwMDNlbnBpbmZvXFxuIDU1ODpcXHRcXHQgKiB3YXMgdmlzaWJsZSBoYXZlIGV4aXRlZCBiZWZvcmUgd2Ugc3RhcnQgY2FsbGluZyBOQVBJIHBvbGwuXFxuIDU1OTpcXHRcXHQgKiBOQVBJIHNraXBzIGxvY2tpbmcgaWYgZGV2LVxcdTAwM2VucGluZm8gaXMgTlVMTC5cXG4gNTYwOlxcdFxcdCAqL1xcbiA1NjE6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDU2MjpcXHRcXG4gNTYzOlxcdFxcdHJldHVybiAwO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRwdXQ6XFxuIDU2NjpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVxcdTAwM2VkZXYpO1xcbiA1Njc6XFx0XFx0aWYgKGlwX292ZXJ3cml0dGVuKVxcbiA1Njg6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAsIDAsIHNpemVvZihudC1cXHUwMDNlbG9jYWxfaXApKTtcXG4gNTY5OlxcdFxcdG5ldGRldl9wdXQobmRldiwgXFx1MDAyNm5wLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuIDU3MDpcXHR1bmxvY2s6XFxuIDU3MTpcXHRcXHRydG5sX3VubG9jaygpO1xcbiA1NzI6XFx0XFx0cmV0dXJuIGVycjtcXG4gNTczOlxcdH1cXG4gNTc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDowNS42MjU3MTk2NzJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2Nzk5OTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGVuYWJsZWRgIEZsYWcgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBgZW5hYmxlZGAgZmxhZyBhY3R1YWxseSBmdW5jdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQncyBzZXQsIHVuc2V0LCBvciBtb2RpZmllZCBkdXJpbmcgcnVudGltZS4gVGhpcyByZXF1aXJlcyBtZSB0byB0aG9yb3VnaGx5IGRpc3NlY3QgaXRzIGJlaGF2aW9yIGluIGFsbCBzdGF0ZXMuIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBob3cgdGhlIHZhcmlhYmxlIGluZmx1ZW5jZXMgdGhlIG92ZXJhbGwgcHJvZ3JhbSBmbG93LlxuXG5TbywgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWFkIHRoZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggYGVuYWJsZWRfc3RvcmVgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMsIHJvdWdobHkgYXJvdW5kIGxpbmVzIDEwMTAgdG8gMTExMC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMgYW5kIGhvdyB0aGVzZSBzdGF0ZXMgcHJvcGFnYXRlIHRocm91Z2hvdXQgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwODQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjUwOjA3Ljc5MzcyMzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAxMDpcXHQgKiBUaGUgdXNlciBpcyBleHBlY3RlZCB0byBzZXQgdGhlIGRlc2lyZWQgcGFyYW1ldGVycyBmaXJzdCAod2hpY2hcXG4xMDExOlxcdCAqIHdvdWxkIGVuYWJsZSBoaW0gdG8gZHluYW1pY2FsbHkgYWRkIG5ldyBuZXRwb2xsIHRhcmdldHMgZm9yIG5ld1xcbjEwMTI6XFx0ICogbmV0d29yayBpbnRlcmZhY2VzIGFzIGFuZCB3aGVuIHRoZXkgY29tZSB1cCkuXFxuMTAxMzpcXHQgKi9cXG4xMDE0OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbjEwMTU6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuMTAxNjpcXHR7XFxuMTAxNzpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbjEwMTg6XFx0XFx0Ym9vbCBlbmFibGVkLCBjdXJyZW50X2VuYWJsZWQ7XFxuMTAxOTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjEwMjA6XFx0XFx0c3NpemVfdCByZXQ7XFxuMTAyMTpcXHRcXG4xMDIyOlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuMTAyMzpcXHRcXHRyZXQgPSBrc3RydG9ib29sKGJ1ZiwgXFx1MDAyNmVuYWJsZWQpO1xcbjEwMjQ6XFx0XFx0aWYgKHJldClcXG4xMDI1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMDI2OlxcdFxcbjEwMjc6XFx0XFx0LyogV2hlbiB0aGUgdXNlciBleHBsaWNpdGx5IGVuYWJsZXMgb3IgZGlzYWJsZXMgYSB0YXJnZXQgdGhhdCBpc1xcbjEwMjg6XFx0XFx0ICogY3VycmVudGx5IGRlYWN0aXZhdGVkLCByZXNldCBpdHMgc3RhdGUgdG8gZGlzYWJsZWQuIFRoZSBERUFDVElWQVRFRFxcbjEwMjk6XFx0XFx0ICogc3RhdGUgb25seSB0cmFja3MgaW50ZXJmYWNlLWRyaXZlbiBkZWFjdGl2YXRpb24gYW5kIHNob3VsZCBfbm90X1xcbjEwMzA6XFx0XFx0ICogcGVyc2lzdCB3aGVuIHRoZSB1c2VyIG1hbnVhbGx5IGNoYW5nZXMgdGhlIHRhcmdldCdzIGVuYWJsZWQgc3RhdGUuXFxuMTAzMTpcXHRcXHQgKi9cXG4xMDMyOlxcdFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQpXFxuMTAzMzpcXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4xMDM0OlxcdFxcbjEwMzU6XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMDM2OlxcdFxcdGN1cnJlbnRfZW5hYmxlZCA9IG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEO1xcbjEwMzc6XFx0XFx0aWYgKGVuYWJsZWQgPT0gY3VycmVudF9lbmFibGVkKSB7XFxuMTAzODpcXHRcXHRcXHRwcl9pbmZvKFxcXCJuZXR3b3JrIGxvZ2dpbmcgaGFzIGFscmVhZHkgJXNcXFxcblxcXCIsXFxuMTAzOTpcXHRcXHRcXHRcXHRjdXJyZW50X2VuYWJsZWQgPyBcXFwic3RhcnRlZFxcXCIgOiBcXFwic3RvcHBlZFxcXCIpO1xcbjEwNDA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEwNDE6XFx0XFx0fVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRpZiAoZW5hYmxlZCkge1xcdC8qIHRydWUgKi9cXG4xMDQ0OlxcdFxcdFxcdGlmIChudC1cXHUwMDNlcmVsZWFzZSBcXHUwMDI2XFx1MDAyNiAhbnQtXFx1MDAzZWV4dGVuZGVkKSB7XFxuMTA0NTpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIk5vdCBlbmFibGluZyBuZXRjb25zb2xlLiBSZWxlYXNlIGZlYXR1cmUgcmVxdWlyZXMgZXh0ZW5kZWQgbG9nIG1lc3NhZ2VcXFwiKTtcXG4xMDQ2OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMDQ3OlxcdFxcdFxcdH1cXG4xMDQ4OlxcdFxcbjEwNDk6XFx0XFx0XFx0aWYgKG50LVxcdTAwM2VleHRlbmRlZCBcXHUwMDI2XFx1MDAyNiAhY29uc29sZV9pc19yZWdpc3RlcmVkKFxcdTAwMjZuZXRjb25zb2xlX2V4dCkpIHtcXG4xMDUwOlxcdFxcdFxcdFxcdG5ldGNvbnNvbGVfZXh0LmZsYWdzIHw9IENPTl9FTkFCTEVEO1xcbjEwNTE6XFx0XFx0XFx0XFx0cmVnaXN0ZXJfY29uc29sZShcXHUwMDI2bmV0Y29uc29sZV9leHQpO1xcbjEwNTI6XFx0XFx0XFx0fVxcbjEwNTM6XFx0XFxuMTA1NDpcXHRcXHRcXHQvKiBVc2VyIG1pZ2h0IGJlIGVuYWJsaW5nIHRoZSBiYXNpYyBmb3JtYXQgdGFyZ2V0IGZvciB0aGUgdmVyeVxcbjEwNTU6XFx0XFx0XFx0ICogZmlyc3QgdGltZSwgbWFrZSBzdXJlIHRoZSBjb25zb2xlIGlzIHJlZ2lzdGVyZWQuXFxuMTA1NjpcXHRcXHRcXHQgKi9cXG4xMDU3OlxcdFxcdFxcdGlmICghbnQtXFx1MDAzZWV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFjb25zb2xlX2lzX3JlZ2lzdGVyZWQoXFx1MDAyNm5ldGNvbnNvbGUpKSB7XFxuMTA1ODpcXHRcXHRcXHRcXHRuZXRjb25zb2xlLmZsYWdzIHw9IENPTl9FTkFCTEVEO1xcbjEwNTk6XFx0XFx0XFx0XFx0cmVnaXN0ZXJfY29uc29sZShcXHUwMDI2bmV0Y29uc29sZSk7XFxuMTA2MDpcXHRcXHRcXHR9XFxuMTA2MTpcXHRcXG4xMDYyOlxcdFxcdFxcdC8qXFxuMTA2MzpcXHRcXHRcXHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXFxuMTA2NDpcXHRcXHRcXHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxcbjEwNjU6XFx0XFx0XFx0ICovXFxuMTA2NjpcXHRcXHRcXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihudCk7XFxuMTA2NzpcXHRcXG4xMDY4OlxcdFxcdFxcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcXG4xMDY5OlxcdFxcdFxcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXFx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUgdG9cXG4xMDcwOlxcdFxcdFxcdCAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGRcXG4xMDcxOlxcdFxcdFxcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXFxuMTA3MjpcXHRcXHRcXHQgKiBzdGF0ZS5cXG4xMDczOlxcdFxcdFxcdCAqL1xcbjEwNzQ6XFx0XFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0XFx0cmV0ID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcXG4xMDc3OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMDc4OlxcdFxcdFxcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbjEwNzk6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEwODA6XFx0XFx0XFx0fVxcbjEwODE6XFx0XFxuMTA4MjpcXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9FTkFCTEVEO1xcbjEwODM6XFx0XFx0XFx0cHJfaW5mbyhcXFwibmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcXFxcblxcXCIpO1xcbjEwODQ6XFx0XFx0fSBlbHNlIHtcXHQvKiBmYWxzZSAqL1xcbjEwODU6XFx0XFx0XFx0LyogV2UgbmVlZCB0byBkaXNhYmxlIHRoZSBuZXRjb25zb2xlIGJlZm9yZSBjbGVhbmluZyBpdCB1cFxcbjEwODY6XFx0XFx0XFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXFxuMTA4NzpcXHRcXHRcXHQgKiBudC1cXHUwMDNlbnAuZGV2ID09IE5VTEwgYW5kIG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEXFxuMTA4ODpcXHRcXHRcXHQgKi9cXG4xMDg5OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjUwOjA3Ljc5Mzg3MjY2MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDI1NzgwNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVAgQWRkcmVzcyBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCBhcmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBsaWtlbHkgc3VzcGVjdHMg4oCTIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBJUCBwYWNrZXQgY29uc3RydWN0aW9uIGFuZCB0cmFuc21pc3Npb24uIE15IGd1dCB0ZWxscyBtZSB0byBsb29rIGF0IGBuZXRjb25zb2xlX3dyaXRlYCwgYHB1c2hfaXB2NGAsIGBwdXNoX2lwdjZgLCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB3aGVyZSBJUCBhZGRyZXNzIGluZm9ybWF0aW9uIHdvdWxkIGJlIGNyaXRpY2FsLiBJIGV4cGVjdCB0aGV5IGFyZSBlaXRoZXIgcmVhZGluZyB0aGUgSVAgZnJvbSBhbiBhZGRyZXNzLCBvciBpbmplY3RpbmcgaXQgaW50byB0aGUgSVAgaGVhZGVycy5cblxuVG8gc3RhcnQsIEknbGwgZm9jdXMgb24gYG5ldGNvbnNvbGUuY2AsIHNpbmNlIHRoYXTigJlzIHByb2JhYmx5IHRoZSBmaXJzdCB0aGluZyB0byBpbnZlc3RpZ2F0ZS4gSSdsbCB6ZXJvIGluIG9uIGxpbmVzIDIxMjUgdG8gMjIyMCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBzcGVjaWZpYyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgSVAgYWRkcmVzc2VzLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIHJlbGF0ZWQgdG8gaG93IG5ldHdvcmsgY29uc29sZSBvdXRwdXQgaXMgaGFuZGxlZCBhbmQgY29uZmlndXJlZCwgd2hpY2ggY291bGQgaGVhdmlseSBpbmZsdWVuY2UgSVAgYWRkcmVzcyB1c2UuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDoxMS4yMTk2NjkyNjVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTI1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTI1OlxcdFxcdFxcdGV0aC1cXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTtcXG4yMTI2OlxcdH1cXG4yMTI3OlxcdFxcbjIxMjg6XFx0c3RhdGljIHZvaWQgcHVzaF9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjEyOTpcXHRcXHRcXHQgICAgICBpbnQgbGVuKVxcbjIxMzA6XFx0e1xcbjIxMzE6XFx0XFx0c3RhdGljIGF0b21pY190IGlwX2lkZW50O1xcbjIxMzI6XFx0XFx0c3RydWN0IGlwaGRyICppcGg7XFxuMjEzMzpcXHRcXHRpbnQgaXBfbGVuO1xcbjIxMzQ6XFx0XFxuMjEzNTpcXHRcXHRpcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4yMTM2OlxcdFxcbjIxMzc6XFx0XFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMjEzODpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4yMTM5OlxcdFxcdGlwaCA9IGlwX2hkcihza2IpO1xcbjIxNDA6XFx0XFxuMjE0MTpcXHRcXHQvKiBpcGgtXFx1MDAzZXZlcnNpb24gPSA0OyBpcGgtXFx1MDAzZWlobCA9IDU7ICovXFxuMjE0MjpcXHRcXHQqKHVuc2lnbmVkIGNoYXIgKilpcGggPSAweDQ1O1xcbjIxNDM6XFx0XFx0aXBoLVxcdTAwM2V0b3MgPSAwO1xcbjIxNDQ6XFx0XFx0cHV0X3VuYWxpZ25lZChodG9ucyhpcF9sZW4pLCBcXHUwMDI2aXBoLVxcdTAwM2V0b3RfbGVuKTtcXG4yMTQ1OlxcdFxcdGlwaC1cXHUwMDNlaWQgPSBodG9ucyhhdG9taWNfaW5jX3JldHVybihcXHUwMDI2aXBfaWRlbnQpKTtcXG4yMTQ2OlxcdFxcdGlwaC1cXHUwMDNlZnJhZ19vZmYgPSAwO1xcbjIxNDc6XFx0XFx0aXBoLVxcdTAwM2V0dGwgPSA2NDtcXG4yMTQ4OlxcdFxcdGlwaC1cXHUwMDNlcHJvdG9jb2wgPSBJUFBST1RPX1VEUDtcXG4yMTQ5OlxcdFxcdGlwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbjIxNTA6XFx0XFx0cHV0X3VuYWxpZ25lZChudC1cXHUwMDNlbG9jYWxfaXAuaXAsIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4yMTUxOlxcdFxcdHB1dF91bmFsaWduZWQobnQtXFx1MDAzZXJlbW90ZV9pcC5pcCwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbjIxNTI6XFx0XFx0aXBoLVxcdTAwM2VjaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLVxcdTAwM2VpaGwpO1xcbjIxNTM6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcXG4yMTU0OlxcdH1cXG4yMTU1OlxcdFxcbjIxNTY6XFx0c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjE1NzpcXHRcXHRcXHQgICAgICBpbnQgbGVuKVxcbjIxNTg6XFx0e1xcbjIxNTk6XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuMjE2MDpcXHRcXG4yMTYxOlxcdFxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuMjE2MjpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4yMTYzOlxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbjIxNjQ6XFx0XFxuMjE2NTpcXHRcXHQvKiBpcDZoLVxcdTAwM2V2ZXJzaW9uID0gNjsgaXA2aC1cXHUwMDNlcHJpb3JpdHkgPSAwOyAqL1xcbjIxNjY6XFx0XFx0Kih1bnNpZ25lZCBjaGFyICopaXA2aCA9IDB4NjA7XFxuMjE2NzpcXHRcXHRpcDZoLVxcdTAwM2VmbG93X2xibFswXSA9IDA7XFxuMjE2ODpcXHRcXHRpcDZoLVxcdTAwM2VmbG93X2xibFsxXSA9IDA7XFxuMjE2OTpcXHRcXHRpcDZoLVxcdTAwM2VmbG93X2xibFsyXSA9IDA7XFxuMjE3MDpcXHRcXG4yMTcxOlxcdFxcdGlwNmgtXFx1MDAzZXBheWxvYWRfbGVuID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgbGVuKTtcXG4yMTcyOlxcdFxcdGlwNmgtXFx1MDAzZW5leHRoZHIgPSBJUFBST1RPX1VEUDtcXG4yMTczOlxcdFxcdGlwNmgtXFx1MDAzZWhvcF9saW1pdCA9IDMyO1xcbjIxNzQ6XFx0XFx0aXA2aC1cXHUwMDNlc2FkZHIgPSBudC1cXHUwMDNlbG9jYWxfaXAuaW42O1xcbjIxNzU6XFx0XFx0aXA2aC1cXHUwMDNlZGFkZHIgPSBudC1cXHUwMDNlcmVtb3RlX2lwLmluNjtcXG4yMTc2OlxcdFxcbjIxNzc6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbjIxNzg6XFx0fVxcbjIxNzk6XFx0XFxuMjE4MDpcXHRzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbjIxODE6XFx0XFx0XFx0XFx0ICAgIGludCBsZW4pXFxuMjE4MjpcXHR7XFxuMjE4MzpcXHRcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbjIxODQ6XFx0XFx0aW50IHRvdGFsX2xlbiwgaXBfbGVuLCB1ZHBfbGVuO1xcbjIxODU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4yMTg2OlxcdFxcbjIxODc6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4yMTg4OlxcdFxcdFxcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4yMTkxOlxcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4yMTkyOlxcdFxcdFxcdGlwX2xlbiA9IHVkcF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbjIxOTM6XFx0XFx0ZWxzZVxcbjIxOTQ6XFx0XFx0XFx0aXBfbGVuID0gdWRwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbjIxOTU6XFx0XFxuMjE5NjpcXHRcXHR0b3RhbF9sZW4gPSBpcF9sZW4gKyBMTF9SRVNFUlZFRF9TUEFDRShucC1cXHUwMDNlZGV2KTtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0c2tiID0gZmluZF9za2IobnQsIHRvdGFsX2xlbiArIG5wLVxcdTAwM2VkZXYtXFx1MDAzZW5lZWRlZF90YWlscm9vbSxcXG4yMTk5OlxcdFxcdFxcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xcbjIyMDA6XFx0XFx0aWYgKCFza2IpXFxuMjIwMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMjAyOlxcdFxcbjIyMDM6XFx0XFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XFxuMjIwNDpcXHRcXHRza2JfcHV0KHNrYiwgbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NTA6MTEuMjE5ODMzMjc1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczODQzMjAwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIEFkZHJlc3MgRmFtaWx5IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYG5ldGNvbnNvbGVgIHN1YnN5c3RlbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiVGhpcyBpcyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGhvdyBJUCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGFkZHJlc3MgZmFtaWxpZXMgYW5kIHRoZSBjb25jZXB0IG9mIGFuICd1bnNldCcgSVAuXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aG9yb3VnaGx5LlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNvcmUgY2hhbmdlOiB3ZSdyZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBvbGQgYHVuaW9uIGluZXRfYWRkcmAgYW5kIHRoZSBib29sZWFuIGBpcHY2YCBmbGFnIHdpdGhpbiB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QsIGFuZCBpbnN0ZWFkIHVzaW5nIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB3aXRoIGEgYGZhbWlseWAgbWVtYmVyIChhbiBgQUZfKmAgdmFsdWUpIGFuZCBhIHVuaW9uIGZvciB0aGUgSVAgYWRkcmVzcyBpdHNlbGYgKGVpdGhlciBJUHY0IG9yIElQdjYpLiAgVGhlIG9sZCBhcHByb2FjaCwgd2hlcmUgYDAuMC4wLjBgIHdhcyB0cmVhdGVkIGFzICd1bnNldCcsIHNlZW1zIGNsdW5reS4gIFRoaXMgbmV3IHN0cnVjdHVyZSBhbGxvd3MgZm9yIGEgbW9yZSBleHBsaWNpdCBhbmQgY2xlYW5lciB3YXkgdG8gcmVwcmVzZW50IGFuIHVuc2V0IGFkZHJlc3MgdmlhIGBBRl9VTlNQRUNgLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgcGF0Y2ggYW5kIHNlZSBob3cgdGhpcyBuZXcgc3RydWN0dXJlIGlzIGludGVncmF0ZWQ6XG5cbjEuICAqKmBuZXRjb25zX3Rha2VfaXB2NmAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NGA6KiogVGhlc2UgZnVuY3Rpb25zIG5vdyBleHBsaWNpdGx5IHNldCB0aGUgYGZhbWlseWAgbWVtYmVyIHRvIGBBRl9JTkVUNmAgb3IgYEFGX0lORVRgLCByZXNwZWN0aXZlbHksIGFsb25nc2lkZSB0aGUgYWRkcmVzcyB2YWx1ZSBpdHNlbGYuIFRoaXMgaXMgbXVjaCBjbGVhcmVyIHRoYW4gdGhlIGltcGxpY2l0IGJlaGF2aW9yIGJlZm9yZS5cblxuMi4gICoqYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGA6KiogVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiAgV2UgaGF2ZSBzZXZlcmFsIGNoZWNrcyBoZXJlLiAgSWYgdGhlIHJlbW90ZSBJUCBpcyB1bnNldCwgaXQncyBhbiBlcnJvci4gSWYgdGhlIGxvY2FsIElQIGlzIHNldCwgdGhlcmUncyBhIGNoZWNrIHRvIGVuc3VyZSBpdCBoYXMgdGhlIHNhbWUgZmFtaWx5IGFzIHRoZSByZW1vdGUgSVAuIElmIHRoZSBsb2NhbCBJUCAqaXMqIHVuc2V0LCB0aGUgY29kZSBub3cgKmV4cGxpY2l0bHkqIHRha2VzIHRoZSBJUHY2IG9yIElQdjQgYWRkcmVzcyBkZXBlbmRpbmcgb24gdGhlIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlseS4gVGhlIGBtZW1zZXRgIGlmIGFuIGVycm9yIG9jY3VycyBzZWVtcyBhIGxpdHRsZSBoZWF2eSBoYW5kZWQuXG5cbjMuICAqKmBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcmA6KiogIFRoaXMgZnVuY3Rpb24gbm93IGNvcnJlY3RseSBwcmludHMgdGhlIGFwcHJvcHJpYXRlIElQIGFkZHJlc3MgdHlwZSBiYXNlZCBvbiB0aGUgYGZhbWlseWAgbWVtYmVyLCBiZSBpdCBJUHY0LCBJUHY2LCBvciBub3RoaW5nLlxuXG40LiAgKipgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYDoqKiAgVGhpcyB1c2VzIGBpbjRfcHRvbmAgYW5kIGBpbjZfcHRvbmAsIHRvIHBhcnNlIGFkZHJlc3NlcyBhbmQgc2V0IHRoZSBgZmFtaWx5YCBtZW1iZXIgYXBwcm9wcmlhdGVseS4gSXQncyBhIGNsZWFuIHdheSB0byBoYW5kbGUgdGhlIGlucHV0IGFuZCBjb3JyZWN0bHkgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC5cblxuNS4gICoqYGxvY2FsX2lwX3Nob3dgIC8gYHJlbW90ZV9pcF9zaG93YDoqKiAgVGhlc2UgdXNlIHRoZSBgZmFtaWx5YCBtZW1iZXIgdG8gZm9ybWF0IHRoZSBvdXRwdXQuIEEgbmVhdCBpbXBsZW1lbnRhdGlvbi5cblxuNi4gICoqYGxvY2FsX2lwX3N0b3JlYCAvIGByZW1vdGVfaXBfc3RvcmVgOioqIFRoZXNlIGZ1bmN0aW9ucyBwYXNzIGEgcG9pbnRlciB0byBgaW5ldF9hZGRyYCB0byBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgd2hpY2ggaXMgZXhhY3RseSBob3cgaXQgc2hvdWxkIHdvcmsuXG5cbjcuICAqKlBhY2tldCBUcmFuc21pc3Npb24gKGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGBuZXRwb2xsX3NlbmRfdWRwYCk6KiogSGVyZSwgdGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBgaXB2NmAgYm9vbGVhbiBmbGFnIHdpdGggYSBjaGVjayBhZ2FpbnN0IGBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2YC4gVGhpcyBpcyBhIG11Y2ggbW9yZSByb2J1c3QgYW5kIHVuZGVyc3RhbmRhYmxlIHdheSB0byBkZXRlcm1pbmUgdGhlIElQIHZlcnNpb24uXG5cbjguICAqKmBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYDoqKiAgVGhpcyBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIHNob3VsZCBiZSBmaW5lLlxuXG45LiAgKipIZWFkZXIgQ2xlYW51cDoqKiBUaGUgcmVtb3ZhbCBvZiBgdW5pb24gaW5ldF9hZGRyYCBmcm9tIHRoZSBoZWFkZXIgZmlsZSBjbGVhbnMgdXAgdGhlIHN0cnVjdHVyZS5cblxuTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZG8gYSBmdWxsIGNvZGUtYmFzZSBzZWFyY2ggdG8gaWRlbnRpZnkgYW55IG90aGVyIGluc3RhbmNlcyBvZiBgdW5pb24gaW5ldF9hZGRyYCB0byBtYWtlIHN1cmUgbm90aGluZyB3YXMgbWlzc2VkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIGZ1bGx5IHNlbGYtY29udGFpbmVkIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiAgSSdsbCBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgdW5pb24gaW5ldF9hZGRyYCB0byBiZSB0aG9yb3VnaC5cblxuT3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgd2VsbC10aG91Z2h0LW91dCBpbXByb3ZlbWVudCwgbWFraW5nIGFkZHJlc3MgZmFtaWx5IGhhbmRsaW5nIG11Y2ggY2xlYXJlciBhbmQgbW9yZSBleHBsaWNpdCB3aXRoaW4gdGhlIGBuZXRjb25zb2xlYCBzdWJzeXN0ZW0uICBUaGUgcmVwbGFjZW1lbnQgb2YgdGhlIG9sZCBtZXRob2Qgd2l0aCB0aGUgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCBzZWVtcyBhIGdvb2QgbW92ZS4gSSBhbSB2ZXJ5IGludGVyZXN0ZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBwZXJmb3JtYW5jZSBpbXBhY3Qgd2l0aCB0aGUgY29kZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIzNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDoxOC42MDQxNTYzNDNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTgzODU0MjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaW9uIGluZXRfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NTA6MjAuMzIyNTU1NjdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0OTY0NTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUgb2YgYHN0cnVjdCBpbmV0X2FkZHJgKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyBgc3RydWN0IGluZXRfYWRkcmAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gSSB3YW50IHRvIGlkZW50aWZ5IGFsbCB0aGUgaW5zdGFuY2VzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGl0cyByb2xlIGluIHZhcmlvdXMgbmV0d29yayBvcGVyYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IsIGZyYW5rbHksIHZ1bG5lcmFiaWxpdGllcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgY29udGV4dHMsIGxpa2UgaG93IGl0J3MgdHJlYXRlZCBpbiBrZXJuZWwgbmV0d29ya2luZyBjb2RlIHZlcnN1cyB1c2VyLXNwYWNlIGxpYnJhcmllcyB0aGF0IGludGVyZmFjZSB3aXRoIGl0LiBBcmUgdGhlcmUgYW55IGNvZGluZyBwYXR0ZXJucyB0aGF0IGFyZSBjb25jZXJuaW5nPyBBbnkgaW5jb25zaXN0ZW5jaWVzIGluIGhvdyBpdCdzIGhhbmRsZWQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gc3VidGxlIGJ1Z3MgZG93biB0aGUgbGluZT8gSSBhbHNvIHdhbnQgdG8gbWFrZSBhIG5vdGUgb2Ygd2hlcmUgaXQgaXMgdXNlZC4gSSdtIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQ6IGFyZSB0aGVyZSBuZXdlciwgYmV0dGVyIGFsdGVybmF0aXZlcyBlbWVyZ2luZyAoZS5nLiwgYGluX2FkZHJgLCBgaW42X2FkZHJgLCBldGMuKSB0aGF0IGFyZSBtb3JlIG1vZGVybiwgc2FmZXIsIG9yIHNpbXBseSBtb3JlIGVmZmljaWVudCBpbiBjZXJ0YWluIHNjZW5hcmlvcz8gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhpcyBmb3VuZGF0aW9uYWwgc3RydWN0dXJlIGlzIGJlaW5nIHVzZWQgb3B0aW1hbGx5LCBhbmQgSSBuZWVkIHRvIGJlIHByb2FjdGl2ZSBhYm91dCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMDksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDoyMi43NzIyMDMxODZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODk2NTUwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGluZXRfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQ4PWVudW0gdGFyZ2V0X3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NDpzdHJ1Y3QgaW5ldF9hZGRyIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1LVxcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE4PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM1LVxcdHN0cnVjdCBuZXRwb2xsXFx0XFx0bnA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNjpcXHRzdHJ1Y3QgaW5ldF9hZGRyXFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM3LVxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcyNT1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc1MC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzUxOnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzUyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jPTU1PWVudW0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmM6NjA6c3RydWN0IGluZXRfYWRkciB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNjEtXFx0Y29uc3QgY2hhciAqaXA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYz02NT1zdHJ1Y3QgdGVzdCB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYy03MC1cXHRpbnQgc290eXBlO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jOjcxOlxcdHN0cnVjdCBpbmV0X2FkZHIgY29ubmVjdF90bztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYzo3MjpcXHRzdHJ1Y3QgaW5ldF9hZGRyIGxpc3Rlbl9hdDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYy03My1cXHRlbnVtIHNlcnZlciBhY2NlcHRfb247XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYz0xMTUxPXN0cnVjdCB0ZXN0X211bHRpX3Byb2cge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtMTE1Ny1cXHRpbnQgZXhwZWN0X2Vycm5vO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jOjExNTg6XFx0c3RydWN0IGluZXRfYWRkciBsaXN0ZW5fYXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtMTE1OS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDoyNC4zNjE4NjU5MTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzNzcyNTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZW1vcnkgU2FmZXR5IGFuZCBTYW5pdGl6ZXIgRXZhbHVhdGlvbjogUGF0Y2ggQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBldmFsdWF0aW5nIHRoaXMgcGF0Y2ggZm9yIG1lbW9yeSBzYWZldHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGxlYWtzIHZpYSBrZXJuZWwtdG8tdXNlciBzcGFjZSBpbnRlcmFjdGlvbnMuIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgZ29lcyB0byBwb3RlbnRpYWwgcmlza3MgYW5kIHRoZSByZWxldmFudCBzYW5pdGl6ZXIgY2hlY2tzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayB0aGUgS01TQU4gY3JpdGVyaWEuXG5cbjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIEknbSBleGFtaW5pbmcgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gbGVhayB0byB1c2Vyc3BhY2UuIFRoZSBgc3lzZnNfZW1pdGAgdXNhZ2UgaW4gYGxvY2FsX2lwX3Nob3dgIGFuZCBgcmVtb3RlX2lwX3Nob3dgIGp1bXBzIG91dCBpbW1lZGlhdGVseS4gU3BlY2lmaWNhbGx5LCB0aGUgYCVwSTZjXFxuYCwgYCVwSTRcXG5gLCBhbmQgYFxcbmAgZm9ybWF0cy4gSG93ZXZlciwgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgYG50YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24sIHplcm9pbmcgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBgbG9jYWxfaXAuZmFtaWx5YCBsb29rcyBzYWZlLiBXaGVuIGBBRl9VTlNQRUNgLCBub3RoaW5nIGlzIHByaW50ZWQgdG8gdXNlciBzcGFjZS4gV2hlbiBgQUZfSU5FVDZgLCB0aGUgYG50LVx1MDAzZWxvY2FsX2lwLmluNmAgZmllbGQgaXMgZmlsbGVkIGZyb20gYGluNl9wdG9uYCBvciBgaWZwLVx1MDAzZWFkZHJgLiBXaGVuIGBBRl9JTkVUYCwgYG50LVx1MDAzZWxvY2FsX2lwLmlwYCBpcyBmaWxsZWQgZnJvbSBgaW40X3B0b25gIG9yIGBpZmEtXHUwMDNlaWZhX2xvY2FsYC4gQWxsIGxvb2tzIHNhZmUgZnJvbSB0aGlzIHBlcnNwZWN0aXZlLlxuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBUaGUgY29kZSdzIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGFyZSBhbHNvIGltcG9ydGFudC4gVGhlIGBudGAgc3RydWN0dXJlJ3MgYGZhbWlseWAgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gYDBgIGJ5IGBremFsbG9jX29iamAsIGFuZCB0aGUgYWRkcmVzcyBieXRlcyBhcmUgemVyb2VkLiBUaGUgY29kZSBjbGVhbmx5IGNoZWNrcyBmb3IgdGhlIGBBRl9VTlNQRUNgLCBgQUZfSU5FVDZgLCBvciBJUHY0IGNhc2VzLCBlbnN1cmluZyB0aGF0IGl0J3MgaGFuZGxpbmcgYGZhbWlseWAgYXBwcm9wcmlhdGVseSBiZWZvcmUgYW55IHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGFjY2VzcywgYW5kIHRoaXMgYXBwZWFycyBzYWZlLlxuXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBJIHNlZSBubyBpbmRpY2F0aW9uIHRoYXQgdGhlIHBhdGNoIGlzIGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGFueSBwYXJ0aWN1bGFybHkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgYSBmYWN0b3IgaW4gbGF0ZXIgcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG5cbjQuICAqKkJvdW5kcyBDaGVja3MvTG9naWM6KiogVGhlcmUncyBubyBldmlkZW5jZSBvZiBib3VuZHMgY2hlY2sgaXNzdWVzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB3aXRoaW4gZXhpc3RpbmcgYnVmZmVycy5cblxuR2l2ZW4gdGhpcyB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGNvZGUsIEkgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlIHRoYXQgdGhpcyBwYXRjaCAqKmRvZXMgbm90KiogaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFsbCBhbGxvY2F0aW9ucyBhcmUgemVyb2VkIHVzaW5nIGBremFsbG9jX29iamAsIGFuZCBpbnB1dHMgYXJlIHZhbGlkYXRlZC4gVGhlIGBpbjRfcHRvbmAgYW5kIGBpbjZfcHRvbmAgZnVuY3Rpb25zIHdyaXRlIHRvIHRoZSBwcmVjaXNlIG1lbW9yeSBsb2NhdGlvbnMgYmVmb3JlIHRoZSBgZmFtaWx5YCBmaWVsZCBpcyBldmVuIGFzc2lnbmVkLiBXaGVuIHVuc2V0LCBgZmFtaWx5YCBpcyAwIChgQUZfVU5TUEVDYCkuXG5cblRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIEknbGwgZmxhZyB0aGlzIGFzIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGUgcmF0aW9uYWxlIGFzIG91dGxpbmVkIGFib3ZlLiBUaGlzIGlzIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjA1LCJPdXRwdXRUb2tlbnMiOjM3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDozMC4xOTk1OTM5NTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxcblxcbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6XFxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cXG4yLiBQYXJzaW5nIGFuZCB1cGRhdGVzOiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBwb3B1bGF0ZXMgYGlwYCAodmlhIGBpbjRfcHRvbmApIG9yIGBpbjZgICh2aWEgYGluNl9wdG9uYCkgYW5kIHNldHMgYGZhbWlseWAgYWNjb3JkaW5nbHkgKGBBRl9JTkVUYCBvciBgQUZfSU5FVDZgKS4gV2hlbiBhdXRvLWRlcml2ZWQsIGBuZXRjb25zX3Rha2VfaXB2NGAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NmAgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYWRkcmVzcyBhbmQgc2V0IGBmYW1pbHlgLlxcbjMuIFVzZXItc3BhY2Ugb3V0cHV0IC8gaW5mbyBsZWFrczogU3lzZnMgYXR0cmlidXRlcyBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AgZW1pdCBmb3JtYXR0ZWQgc3RyaW5ncyBiYXNlZCBvbiB0aGUgdmVyaWZpZWQgYGZhbWlseWAgZGlzY3JpbWluYXRvciBhbmQgcmVhZCBvbmx5IHRoZSBmdWxseSBpbml0aWFsaXplZCBhZGRyZXNzIHVuaW9uIGZpZWxkcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXJzcGFjZS5cXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseWAgYW5kIHJlYWQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYGluNmAgb3IgYGlwYCBmaWVsZHMuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxcblxcbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6XFxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cXG4yLiBQYXJzaW5nIGFuZCB1cGRhdGVzOiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBwb3B1bGF0ZXMgYGlwYCAodmlhIGBpbjRfcHRvbmApIG9yIGBpbjZgICh2aWEgYGluNl9wdG9uYCkgYW5kIHNldHMgYGZhbWlseWAgYWNjb3JkaW5nbHkgKGBBRl9JTkVUYCBvciBgQUZfSU5FVDZgKS4gV2hlbiBhdXRvLWRlcml2ZWQsIGBuZXRjb25zX3Rha2VfaXB2NGAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NmAgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYWRkcmVzcyBhbmQgc2V0IGBmYW1pbHlgLlxcbjMuIFVzZXItc3BhY2Ugb3V0cHV0IC8gaW5mbyBsZWFrczogU3lzZnMgYXR0cmlidXRlcyBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AgZW1pdCBmb3JtYXR0ZWQgc3RyaW5ncyBiYXNlZCBvbiB0aGUgdmVyaWZpZWQgYGZhbWlseWAgZGlzY3JpbWluYXRvciBhbmQgcmVhZCBvbmx5IHRoZSBmdWxseSBpbml0aWFsaXplZCBhZGRyZXNzIHVuaW9uIGZpZWxkcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXJzcGFjZS5cXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseWAgYW5kIHJlYWQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYGluNmAgb3IgYGlwYCBmaWVsZHMuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 01:46:54 +0000 UTC FinishedAt: 2026-09-05 01:50:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7042c8c193e5d634198b7c766bb3a01c8e3ee0e2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "7042c8c193e5d634198b7c766bb3a01c8e3ee0e2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETCONSOLE", "NETCONSOLE_DYNAMIC", "CONFIGFS_FS", "IPV6" ], "series_id": "c855f1c8-c0b9-4963-a39b-7878e6e5ddb2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "netcons_netpoll_setup", "netpoll_parse_ip_addr", "local_ip_store", "remote_ip_store", "local_ip_show", "remote_ip_show", "netpoll_send_udp", "netcons_take_ipv4", "netcons_take_ipv6" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9wYXJzZV9pcF9hZGRyJiMzNDssCiAgICAmIzM0O2xvY2FsX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtsb2NhbF9pcF9zaG93JiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zaG93JiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjQmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgSVAgYWRkcmVzcyBoYW5kbGluZyBpbiBuZXRjb25zb2xlIGJ5IGludHJvZHVjaW5nIGBzdHJ1Y3QgaW5ldF9hZGRyYCB3aXRoIGFuIGV4cGxpY2l0IGBmYW1pbHlgIGZpZWxkIGluc3RlYWQgb2YgcmVseWluZyBvbiBhIHNlcGFyYXRlIGJvb2xlYW4gZmxhZyAoYGlwdjZgKSBhbmQgY2hlY2tpbmcgd2hldGhlciBhbiBhZGRyZXNzIGlzIHplcm8gdG8gZGV0ZXJtaW5lIGlmIGl0IHdhcyB1bnNldC5cblxuQW5hbHlzaXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzazpcbjEuIE9iamVjdCBhbGxvY2F0aW9uOiBgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY19vYmpgLCBlbnN1cmluZyBhbGwgZmllbGRzIChpbmNsdWRpbmcgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGApIGFyZSB6ZXJvLWluaXRpYWxpemVkIChgZmFtaWx5YCBkZWZhdWx0cyB0byBgMGAgLyBgQUZfVU5TUEVDYCkuXG4yLiBQYXJzaW5nIGFuZCB1cGRhdGVzOiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBwb3B1bGF0ZXMgYGlwYCAodmlhIGBpbjRfcHRvbmApIG9yIGBpbjZgICh2aWEgYGluNl9wdG9uYCkgYW5kIHNldHMgYGZhbWlseWAgYWNjb3JkaW5nbHkgKGBBRl9JTkVUYCBvciBgQUZfSU5FVDZgKS4gV2hlbiBhdXRvLWRlcml2ZWQsIGBuZXRjb25zX3Rha2VfaXB2NGAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NmAgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYWRkcmVzcyBhbmQgc2V0IGBmYW1pbHlgLlxuMy4gVXNlci1zcGFjZSBvdXRwdXQgLyBpbmZvIGxlYWtzOiBTeXNmcyBhdHRyaWJ1dGVzIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YCBlbWl0IGZvcm1hdHRlZCBzdHJpbmdzIGJhc2VkIG9uIHRoZSB2ZXJpZmllZCBgZmFtaWx5YCBkaXNjcmltaW5hdG9yIGFuZCByZWFkIG9ubHkgdGhlIGZ1bGx5IGluaXRpYWxpemVkIGFkZHJlc3MgdW5pb24gZmllbGRzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBsZWFrZWQgdG8gdXNlcnNwYWNlLlxuNC4gTmV0d29yayBwYWNrZXQgY29uc3RydWN0aW9uOiBQYWNrZXQgaGVhZGVycyBhbmQgY2hlY2tzdW0gY2FsY3VsYXRpb25zIGJyYW5jaCBvbiBgbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseWAgYW5kIHJlYWQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYGluNmAgb3IgYGlwYCBmaWVsZHMuXG5cblNpbmNlIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrIHJpc2tzIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGlzIGNoYW5nZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI5YTk2NTVlY2UyNWQ5YTNlMmVhYjk4ODlhZGU1MjQxNDEwYjczMjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAxOjQ4OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxuaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNjk0YmNhNDgwM2Q1MCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5AQCAtMTQxLDYgJiM0MzsxNDEsMTEgQEAgVGhlIGludGVyZmFjZSBleHBvc2VzIHRoZXNlIHBhcmFtZXRlcnMgb2YgYSBuZXRjb25zb2xlIHRhcmdldCB0byB1c2Vyc3BhY2U6XG4gXHR0cmFuc21pdF9lcnJvcnNcdE51bWJlciBvZiBwYWNrZXQgc2VuZCBlcnJvcnNcdFx0KHJlYWQtb25seSlcbiBcdD09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09XG4gXG4mIzQzO2xvY2FsX2lwIGlzIG9wdGlvbmFsOiBpZiBpdCBpcyBsZWZ0IHVuc2V0LCBuZXRjb25zb2xlIGRlcml2ZXMgYSBzb3VyY2VcbiYjNDM7YWRkcmVzcyBmcm9tIHRoZSBlZ3Jlc3MgaW50ZXJmYWNlIHdoZW4gdGhlIHRhcmdldCBpcyBlbmFibGVkLiBXcml0aW5nIGFueVxuJiM0Mzt2YWx1ZSB0byBpdCwgaW5jbHVkaW5nIDAuMC4wLjAsIHVzZXMgdGhhdCB2YWx1ZSB2ZXJiYXRpbSBhbmQgZGlzYWJsZXMgdGhlXG4mIzQzO2F1dG9tYXRpYyBzZWxlY3Rpb24uXG4mIzQzO1xuIFRoZSBcJiMzNDtlbmFibGVkXCYjMzQ7IGF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIG9mXG4gYSB0YXJnZXQgY2FuIGJlIHVwZGF0ZWQgb3Igbm90IC0tIHlvdSBjYW4gbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIG9mIG9ubHlcbiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmIFwmIzM0O2VuYWJsZWRcJiMzNDsgaXMgMCkuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5pbmRleCBiMzU4ZTVjMzY3MzUxLi4yNjcyNTRmMDQ2ZGU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcbkBAIC0xNTEsNiAmIzQzOzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgaW5ldF9hZGRyIHtcbiYjNDM7XHQvKiBBZGRyZXNzIGZhbWlseTogQUZfVU5TUEVDIHdoZW4gdW5zZXQsIGVsc2UgQUZfSU5FVCBvciBBRl9JTkVUNiAqL1xuJiM0MztcdHU4XHRcdFx0ZmFtaWx5O1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdF9fYmUzMlx0XHRpcDtcbiYjNDM7XHRcdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuJiM0MztcdH07XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4gICogQHJjdTpcdFVzZWQgdG8gZnJlZSB0aGUgcGF5bG9hZCBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbkBAIC0xOTUsNyAmIzQzOzIwNCw2IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcbiAgKlx0XHRsb2NhbF9tYWNcdChyZWFkLW9ubHkpXG4gICogQGxvY2FsX2lwOlx0U291cmNlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9pcDpcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4tICogQGlwdjY6XHRXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS5cbiAgKiBAbG9jYWxfcG9ydDpcdFNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfbWFjOlx0RGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbkBAIC0yMjUsOCAmIzQzOzIzMyw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XG4gXHRib29sXHRcdFx0ZXh0ZW5kZWQ7XG4gXHRib29sXHRcdFx0cmVsZWFzZTtcbiBcdHN0cnVjdCBuZXRwb2xsXHRcdG5wO1xuLVx0dW5pb24gaW5ldF9hZGRyXHRcdGxvY2FsX2lwLCByZW1vdGVfaXA7XG4tXHRib29sXHRcdFx0aXB2NjtcbiYjNDM7XHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICYjNDM7MSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHNcbkBAIC00MjgsNiAmIzQzOzQzNSw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdC8qIEdvdCB0aGUgSVAsIGxldCYjMzk7cyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbiYjNDM7XHRcdFx0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDY7XG4gXHRcdFx0ZXJyID0gMDtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTQ2OSwyOCAmIzQzOzQ3NywxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHR9XG4gXG4gXHRudC1cdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cdTAwM2VpZmFfbG9jYWw7XG4mIzQzO1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQICVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKlxuLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtXHUwMDNlbG9jYWxfaXAgdW5zZXQsIHNvIHRoYXRcbi0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLlxuLSAqXG4tICogbnQtXHUwMDNlbG9jYWxfaXAgaXMgYSB1bmlvbiBvZiBfX2JlMzIgKElQdjQpIGFuZCBzdHJ1Y3QgaW42X2FkZHIgKElQdjYpLFxuLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLFxuLSAqIElQdjQtbWFwcGVkIDo6ZmZmZjphLmIuYy5kKSBtdXN0IG5vdCBiZSB0ZXN0ZWQgdmlhIHRoZSBJUHY0IGFybSDigJRcbi0gKiBkb2luZyBzbyB3b3VsZCBtaXNjbGFzc2lmeSBhIGNhbGxlci1zdXBwbGllZCBhZGRyZXNzIGFzIHVuc2V0IGFuZFxuLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLlxuLSAqL1xuLXN0YXRpYyBib29sIG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQoY29uc3Qgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi17XG4tXHRpZiAobnQtXHUwMDNlaXB2Nilcbi1cdFx0cmV0dXJuIGlwdjZfYWRkcl9hbnkoXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbi1cdHJldHVybiAhbnQtXHUwMDNlbG9jYWxfaXAuaXA7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucztcbkBAIC01MDAsNiAmIzQzOzQ5MiwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcbiYjNDM7XHRcdG5wX2VycihucCwgXCYjMzQ7cmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRURFU1RBRERSUkVRO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG4mIzQzO1x0XHRucF9lcnIobnAsIFwmIzM0O2xvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuQEAgLTUzNiwxNiAmIzQzOzUzOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0XHRydG5sX2xvY2soKTtcbiBcdH1cbiBcbi1cdGlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkge1xuLVx0XHRpZiAoIW50LVx1MDAzZWlwdjYpIHtcbi1cdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG4mIzQzO1x0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdGdvdG8gcHV0O1xuIFx0XHRpcF9vdmVyd3JpdHRlbiA9IHRydWU7XG4gXHR9XG4gXG5AQCAtNzI3LDI0ICYjNDM7NzI3LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcdTAwMjZudC1cdTAwM2VucDtcbiBcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIHBvcnQgJWRcXG5cJiMzNDssIG50LVx1MDAzZWxvY2FsX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4mIzQzO1x0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUCB1bnNldFxcblwmIzM0Oyk7XG4mIzQzO1x0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4gXHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIG5wLVx1MDAzZWRldl9uYW1lKTtcbiBcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIGV0aGVybmV0IGFkZHJlc3MgJiMzOTslcE0mIzM5O1xcblwmIzM0OywgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlcmVtb3RlX3BvcnQpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuJiM0MztcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQIHVuc2V0XFxuXCYjMzQ7KTtcbiYjNDM7XHRlbHNlIGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcJiMzNDtyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuIFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbiB9XG4gXG4tLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzXG4tICogcG9wdWxhdGVkLCAxIGlmIElQdjYgaXMgcG9wdWxhdGVkLCBhbmQgLTEgdXBvbiBmYWlsdXJlLlxuJiM0MzsvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzXG4mIzQzOyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4mIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcbiB7XG4gXHRjb25zdCBjaGFyICplbmQgPSBOVUxMO1xuIFx0aW50IGxlbjtcbkBAIC03NTYsMTQgJiM0Mzs3NjAsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4gXHRpZiAoc3RyW2xlbiAtIDFdID09ICYjMzk7XFxuJiMzOTspXG4gXHRcdGxlbiAtPSAxO1xuIFxuLVx0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XFxuJiMzOTspKVxuJiM0MztcdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWlwLCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcXG4mIzM5OykpIHtcbiYjNDM7XHRcdGFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcbiBcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XFxuJiMzOTspKVxuLVx0XHRyZXR1cm4gMTtcbiYjNDM7XHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xcbiYjMzk7KSkge1xuJiM0MztcdFx0YWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODY4LDIwICYjNDM7ODc2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuJiM0MztcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuJiM0MztcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuIHtcbiBcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG4gXG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0O1xcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4mIzQzO1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pcCk7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuQEAgLTEyMjYsNyAmIzQzOzEyMzgsNiBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuIFx0aWYgKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpIHtcbkBAIC0xMjM1LDEwICYjNDM7MTI0Niw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4mIzQzO1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMTI1MSw3ICYjNDM7MTI2MCw2IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuIFx0aWYgKG50LVx1MDAzZXN0YXRlID09IFNUQVRFX0VOQUJMRUQpIHtcbkBAIC0xMjYwLDEwICYjNDM7MTI2OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbiYjNDM7XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKSBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuLVx0bnQtXHUwMDNlaXB2NiA9ICEhaXB2NjtcbiBcbiBcdHJldCA9IGNvdW50O1xuIG91dF91bmxvY2s6XG5AQCAtMjA3Miw3ICYjNDM7MjA3OCw3IEBAIHN0YXRpYyB2b2lkIG5ldHBvbGxfdWRwX2NoZWNrc3VtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXG4gXHQvKiBjaGVjayBuZWVkcyB0byBiZSBzZXQsIHNpbmNlIGl0IHdpbGwgYmUgY29uc3VtZWQgaW4gY3N1bV9wYXJ0aWFsICovXG4gXHR1ZHBoLVx1MDAzZWNoZWNrID0gMDtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsXG5AQCAtMjExMyw3ICYjNDM7MjExOSw3IEBAIHN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX3NvdXJjZSwgbnAtXHUwMDNlZGV2LVx1MDAzZWRldl9hZGRyKTtcbiBcdGV0aGVyX2FkZHJfY29weShldGgtXHUwMDNlaF9kZXN0LCBudC1cdTAwM2VyZW1vdGVfbWFjKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xuIFx0ZWxzZVxuIFx0XHRldGgtXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTtcbkBAIC0yMTgyLDcgJiM0MzsyMTg4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuIFxuIFx0dWRwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbiYjNDM7XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0aXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIFx0ZWxzZVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuQEAgLTIxOTgsNyAmIzQzOzIyMDQsNyBAQCBzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuIFx0c2tiX3B1dChza2IsIGxlbik7XG4gXG4gXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4mIzQzO1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTtcbkBAIC0yNTI3LDEwICYjNDM7MjUzMyw4IEBAIF9fcmVsZWFzZXMoXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcbiBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIHtcbiBcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuLVx0Ym9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7XG4gXHRjaGFyICpjdXIgPSBvcHQ7XG4gXHRjaGFyICpkZWxpbTtcbi1cdGludCBpcHY2O1xuIFxuIFx0aWYgKCpjdXIgIT0gJiMzOTtAJiMzOTspIHtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5O0AmIzM5Oyk7XG5AQCAtMjU0NCwxNiAmIzQzOzI1NDgsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGN1ciYjNDM7JiM0Mzs7XG4gXG4gXHRpZiAoKmN1ciAhPSAmIzM5Oy8mIzM5Oykge1xuLVx0XHRpcHZlcnNpb25fc2V0ID0gdHJ1ZTtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5Oy8mIzM5Oyk7XG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRcdGlmIChpcHY2IFx1MDAzYyAwKVxuJiM0MztcdFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbiBcdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdFx0ZWxzZVxuLVx0XHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0XHRjdXIgPSBkZWxpbTtcbiBcdH1cbiBcdGN1ciYjNDM7JiM0Mzs7XG5AQCAtMjU5NSwxMyAmIzQzOzI1OTUsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGlmICghZGVsaW0pXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuIFx0KmRlbGltID0gMDtcbi1cdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApO1xuLVx0aWYgKGlwdjYgXHUwMDNjIDApXG4mIzQzO1x0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0ZWxzZSBpZiAoaXB2ZXJzaW9uX3NldCBcdTAwMjZcdTAwMjYgbnQtXHUwMDNlaXB2NiAhPSAoYm9vbClpcHY2KVxuJiM0MztcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4tXHRlbHNlXG4tXHRcdG50LVx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xuIFx0Y3VyID0gZGVsaW0gJiM0MzsgMTtcbiBcbiBcdGlmICgqY3VyICE9IDApIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG5pbmRleCAxYzZiMWVlYzVlZmQ2Li5lYzA4MjFhNWIwMmRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG5AQCAtMTYsMTEgJiM0MzsxNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gXG4tdW5pb24gaW5ldF9hZGRyIHtcbi1cdF9fYmUzMlx0XHRpcDtcbi1cdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuLX07XG4tXG4gc3RydWN0IG5ldHBvbGwge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9wYXJzZV9pcF9hZGRyJiMzNDssCiAgICAmIzM0O2xvY2FsX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtsb2NhbF9pcF9zaG93JiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zaG93JiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjQmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5YTk2NTVlY2UyNWQ5YTNlMmVhYjk4ODlhZGU1MjQxNDEwYjczMjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDAxOjQ4OjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0CmluZGV4IDRhYjVkN2IwNWNmMTAuLjY5NGJjYTQ4MDNkNTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QKQEAgLTE0MSw2ICYjNDM7MTQxLDExIEBAIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyB0aGVzZSBwYXJhbWV0ZXJzIG9mIGEgbmV0Y29uc29sZSB0YXJnZXQgdG8gdXNlcnNwYWNlOgogCXRyYW5zbWl0X2Vycm9ycwlOdW1iZXIgb2YgcGFja2V0IHNlbmQgZXJyb3JzCQkocmVhZC1vbmx5KQogCT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09CiAKJiM0Mztsb2NhbF9pcCBpcyBvcHRpb25hbDogaWYgaXQgaXMgbGVmdCB1bnNldCwgbmV0Y29uc29sZSBkZXJpdmVzIGEgc291cmNlCiYjNDM7YWRkcmVzcyBmcm9tIHRoZSBlZ3Jlc3MgaW50ZXJmYWNlIHdoZW4gdGhlIHRhcmdldCBpcyBlbmFibGVkLiBXcml0aW5nIGFueQomIzQzO3ZhbHVlIHRvIGl0LCBpbmNsdWRpbmcgMC4wLjAuMCwgdXNlcyB0aGF0IHZhbHVlIHZlcmJhdGltIGFuZCBkaXNhYmxlcyB0aGUKJiM0MzthdXRvbWF0aWMgc2VsZWN0aW9uLgomIzQzOwogVGhlICYjMzQ7ZW5hYmxlZCYjMzQ7IGF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIG9mCiBhIHRhcmdldCBjYW4gYmUgdXBkYXRlZCBvciBub3QgLS0geW91IGNhbiBtb2RpZnkgdGhlIHBhcmFtZXRlcnMgb2Ygb25seQogZGlzYWJsZWQgdGFyZ2V0cyAoaS5lLiBpZiAmIzM0O2VuYWJsZWQmIzM0OyBpcyAwKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwppbmRleCBiMzU4ZTVjMzY3MzUxLi4yNjcyNTRmMDQ2ZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCkBAIC0xNTEsNiAmIzQzOzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7CiAJU1RBVEVfREVBQ1RJVkFURUQsCiB9OwogCiYjNDM7c3RydWN0IGluZXRfYWRkciB7CiYjNDM7CS8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovCiYjNDM7CXU4CQkJZmFtaWx5OwomIzQzOwl1bmlvbiB7CiYjNDM7CQlfX2JlMzIJCWlwOwomIzQzOwkJc3RydWN0IGluNl9hZGRyCWluNjsKJiM0MzsJfTsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAtIEZvcm1hdHRlZCB1c2VyZGF0YSBwYXlsb2FkIG9mIGEgdGFyZ2V0LgogICogQHJjdToJVXNlZCB0byBmcmVlIHRoZSBwYXlsb2FkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgpAQCAtMTk1LDcgJiM0MzsyMDQsNiBAQCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7CiAgKgkJbG9jYWxfbWFjCShyZWFkLW9ubHkpCiAgKiBAbG9jYWxfaXA6CVNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9pcDoJRGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KLSAqIEBpcHY2OglXaGV0aGVyIHRoZSB0YXJnZXQgYWRkcmVzc2VzIGFyZSBJUHY2IChyZWFkLXdyaXRlKS4KICAqIEBsb2NhbF9wb3J0OglTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX3BvcnQ6IERlc3RpbmF0aW9uIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgogICogQHJlbW90ZV9tYWM6CURlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCkBAIC0yMjUsOCAmIzQzOzIzMyw3IEBAIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7CiAJYm9vbAkJCWV4dGVuZGVkOwogCWJvb2wJCQlyZWxlYXNlOwogCXN0cnVjdCBuZXRwb2xsCQlucDsKLQl1bmlvbiBpbmV0X2FkZHIJCWxvY2FsX2lwLCByZW1vdGVfaXA7Ci0JYm9vbAkJCWlwdjY7CiYjNDM7CXN0cnVjdCBpbmV0X2FkZHIJbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYJCQlsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDsKIAl1OAkJCXJlbW90ZV9tYWNbRVRIX0FMRU5dOwogCS8qIHByb3RlY3RlZCBieSB0YXJnZXRfbGlzdF9sb2NrOyAmIzQzOzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzCkBAIC00MjgsNiAmIzQzOzQzNSw3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAkJCQljb250aW51ZTsKIAkJCS8qIEdvdCB0aGUgSVAsIGxldCYjMzk7cyByZXR1cm4gKi8KIAkJCW50LSZndDtsb2NhbF9pcC5pbjYgPSBpZnAtJmd0O2FkZHI7CiYjNDM7CQkJbnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2OwogCQkJZXJyID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC00NjksMjggJiM0Mzs0NzcsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCX0KIAogCW50LSZndDtsb2NhbF9pcC5pcCA9IGlmYS0mZ3Q7aWZhX2xvY2FsOwomIzQzOwludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDsKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtJmd0O2xvY2FsX2lwIHVuc2V0LCBzbyB0aGF0Ci0gKiBuZXRjb25zX25ldHBvbGxfc2V0dXAoKSBzaG91bGQgYXV0by1wb3B1bGF0ZSBpdCBmcm9tIHRoZSBlZ3Jlc3MgZGV2aWNlLgotICoKLSAqIG50LSZndDtsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksCi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6MiwKLSAqIElQdjQtbWFwcGVkIDo6ZmZmZjphLmIuYy5kKSBtdXN0IG5vdCBiZSB0ZXN0ZWQgdmlhIHRoZSBJUHY0IGFybSDigJQKLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kCi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy4KLSAqLwotc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQotewotCWlmIChudC0mZ3Q7aXB2NikKLQkJcmV0dXJuIGlwdjZfYWRkcl9hbnkoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKLQlyZXR1cm4gIW50LSZndDtsb2NhbF9pcC5pcDsKLX0KLQogc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LSZndDtuc3Byb3h5LSZndDtuZXRfbnM7CkBAIC01MDAsNiAmIzQzOzQ5MiwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCWJvb2wgaXBfb3ZlcndyaXR0ZW4gPSBmYWxzZTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKJiM0MzsJCW5wX2VycihucCwgJiMzNDtyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRURFU1RBRERSUkVROwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KSB7CiYjNDM7CQlucF9lcnIobnAsICYjMzQ7bG9jYWwgYW5kIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlsaWVzIGRpZmZlciwgYWJvcnRpbmdcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJcnRubF9sb2NrKCk7CiAJaWYgKG5wLSZndDtkZXZfbmFtZVswXSkKIAkJbmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtJmd0O2Rldl9uYW1lKTsKQEAgLTUzNiwxNiAmIzQzOzUzOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogCQlydG5sX2xvY2soKTsKIAl9CiAKLQlpZiAobmV0Y29uc19sb2NhbF9pcF91bnNldChudCkpIHsKLQkJaWYgKCFudC0mZ3Q7aXB2NikgewotCQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpOwotCQkJaWYgKGVycikKLQkJCQlnb3RvIHB1dDsKLQkJfSBlbHNlIHsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7CiYjNDM7CQlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gcHV0OwotCQl9CiYjNDM7CQllbHNlCiYjNDM7CQkJZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIHB1dDsKIAkJaXBfb3ZlcndyaXR0ZW4gPSB0cnVlOwogCX0KIApAQCAtNzI3LDI0ICYjNDM7NzI3LDI4IEBAIHN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7CiAKIAlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7bG9jYWxfcG9ydCk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpCiYjNDM7CQlucF9pbmZvKG5wLCAmIzM0O2xvY2FsIElQIHVuc2V0XG4mIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiAJbnBfaW5mbyhucCwgJiMzNDtpbnRlcmZhY2UgbmFtZSAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X25hbWUpOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgZXRoZXJuZXQgYWRkcmVzcyAmIzM5OyVwTSYjMzk7XG4mIzM0OywgbnAtJmd0O2Rldl9tYWMpOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIHBvcnQgJWRcbiYjMzQ7LCBudC0mZ3Q7cmVtb3RlX3BvcnQpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQIHVuc2V0XG4mIzM0Oyk7CiYjNDM7CWVsc2UgaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42KTsKIAllbHNlCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxuJiMzNDssIG50LSZndDtyZW1vdGVfbWFjKTsKIH0KIAotLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHVuaW9uLiBSZXR1cm4gMCBpZiBJUHY0IGlzCi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiYjNDM7LyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2VzcwomIzQzOyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKQomIzQzO3N0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcikKIHsKIAljb25zdCBjaGFyICplbmQgPSBOVUxMOwogCWludCBsZW47CkBAIC03NTYsMTQgJiM0Mzs3NjAsMTggQEAgc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiAJaWYgKHN0cltsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCiAJCWxlbiAtPSAxOwogCi0JaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKJiM0MzsJaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aXAsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ7CiAJCXJldHVybiAwOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJmFtcDsmYW1wOwotCSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgJmFtcDtlbmQpICZndDsgMCAmYW1wOyZhbXA7Ci0JICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpCi0JCXJldHVybiAxOwomIzQzOwkgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpbjYsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKJiM0MzsJICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICYjMzk7XG4mIzM5OykpIHsKJiM0MzsJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCXJldHVybiAtMTsKIH0KQEAgLTg2OCwyMCAmIzQzOzg3NiwyNCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDtcbiYjMzQ7KTsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmluNik7CiAJZWxzZQotCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKJiM0MzsJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaXApOwogfQogCiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCi0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0O1xuJiMzNDspOwomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKLQkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXApOwomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaXApOwogfQogCiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZikKQEAgLTEyMjYsNyAmIzQzOzEyMzgsNiBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaXB2NjsKIAogCWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7CkBAIC0xMjM1LDEwICYjNDM7MTI0Niw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKLQlpZiAoaXB2NiA9PSAtMSkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O2xvY2FsX2lwKSAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKLQludC0mZ3Q7aXB2NiA9ICEhaXB2NjsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTEyNTEsNyAmIzQzOzEyNjAsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7Ci0JaW50IGlwdjY7CiAKIAlkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpOwogCWlmIChudC0mZ3Q7c3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkgewpAQCAtMTI2MCwxMCAmIzQzOzEyNjgsOCBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKLQlpZiAoaXB2NiA9PSAtMSkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCkgJmx0OyAwKQogCQlnb3RvIG91dF91bmxvY2s7Ci0JbnQtJmd0O2lwdjYgPSAhIWlwdjY7CiAKIAlyZXQgPSBjb3VudDsKIG91dF91bmxvY2s6CkBAIC0yMDcyLDcgJiM0MzsyMDc4LDcgQEAgc3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwKIAogCS8qIGNoZWNrIG5lZWRzIHRvIGJlIHNldCwgc2luY2UgaXQgd2lsbCBiZSBjb25zdW1lZCBpbiBjc3VtX3BhcnRpYWwgKi8KIAl1ZHBoLSZndDtjaGVjayA9IDA7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXVkcGgtJmd0O2NoZWNrID0gY3N1bV9pcHY2X21hZ2ljKCZhbXA7bnQtJmd0O2xvY2FsX2lwLmluNiwKIAkJCQkJICAgICAgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmluNiwKIAkJCQkJICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsCkBAIC0yMTEzLDcgJiM0MzsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCWV0aGVyX2FkZHJfY29weShldGgtJmd0O2hfc291cmNlLCBucC0mZ3Q7ZGV2LSZndDtkZXZfYWRkcik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9kZXN0LCBudC0mZ3Q7cmVtb3RlX21hYyk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCWV0aC0mZ3Q7aF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwogCWVsc2UKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtMjE4Miw3ICYjNDM7MjE4OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAogCXVkcF9sZW4gPSBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CiAJZWxzZQogCQlpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpOwpAQCAtMjE5OCw3ICYjNDM7MjIwNCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csCiAJc2tiX3B1dChza2IsIGxlbik7CiAKIAlwdXNoX3VkcChudCwgc2tiLCBsZW4pOwotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KQogCQlwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTsKIAllbHNlCiAJCXB1c2hfaXB2NChudCwgc2tiLCBsZW4pOwpAQCAtMjUyNywxMCAmIzQzOzI1MzMsOCBAQCBfX3JlbGVhc2VzKCZhbXA7dGFyZ2V0X2xpc3RfbG9jaykKIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiB7CiAJc3RydWN0IG5ldHBvbGwgKm5wID0gJmFtcDtudC0mZ3Q7bnA7Ci0JYm9vbCBpcHZlcnNpb25fc2V0ID0gZmFsc2U7CiAJY2hhciAqY3VyID0gb3B0OwogCWNoYXIgKmRlbGltOwotCWludCBpcHY2OwogCiAJaWYgKCpjdXIgIT0gJiMzOTtAJiMzOTspIHsKIAkJZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5O0AmIzM5Oyk7CkBAIC0yNTQ0LDE2ICYjNDM7MjU0OCwxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KQogCWN1ciYjNDM7JiM0Mzs7CiAKIAlpZiAoKmN1ciAhPSAmIzM5Oy8mIzM5OykgewotCQlpcHZlcnNpb25fc2V0ID0gdHJ1ZTsKIAkJZGVsaW0gPSBzdHJjaHIoY3VyLCAmIzM5Oy8mIzM5Oyk7CiAJCWlmICghZGVsaW0pCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkJKmRlbGltID0gMDsKLQkJaXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O2xvY2FsX2lwKTsKLQkJaWYgKGlwdjYgJmx0OyAwKQomIzQzOwkJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O2xvY2FsX2lwKSAmbHQ7IDApCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJZWxzZQotCQkJbnQtJmd0O2lwdjYgPSAoYm9vbClpcHY2OwogCQljdXIgPSBkZWxpbTsKIAl9CiAJY3VyJiM0MzsmIzQzOzsKQEAgLTI1OTUsMTMgJiM0MzsyNTk1LDExIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiAJaWYgKCFkZWxpbSkKIAkJZ290byBwYXJzZV9mYWlsZWQ7CiAJKmRlbGltID0gMDsKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKTsKLQlpZiAoaXB2NiAmbHQ7IDApCiYjNDM7CWlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtyZW1vdGVfaXApICZsdDsgMCkKIAkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JZWxzZSBpZiAoaXB2ZXJzaW9uX3NldCAmYW1wOyZhbXA7IG50LSZndDtpcHY2ICE9IChib29sKWlwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyAmYW1wOyZhbXA7CiYjNDM7CSAgICBudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ICE9IG50LSZndDtyZW1vdGVfaXAuZmFtaWx5KQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQllbHNlCi0JCW50LSZndDtpcHY2ID0gKGJvb2wpaXB2NjsKIAljdXIgPSBkZWxpbSAmIzQzOyAxOwogCiAJaWYgKCpjdXIgIT0gMCkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCAxYzZiMWVlYzVlZmQ2Li5lYzA4MjFhNWIwMmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtMTYsMTEgJiM0MzsxNiw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91ZHAuaCZndDsKIAotdW5pb24gaW5ldF9hZGRyIHsKLQlfX2JlMzIJCWlwOwotCXN0cnVjdCBpbjZfYWRkcglpbjY7Ci19OwotCiBzdHJ1Y3QgbmV0cG9sbCB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAluZXRkZXZpY2VfdHJhY2tlciBkZXZfdHJhY2tlcjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU2NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IGJhc2VkIG9uIHRoZSBjaGFuZ2VkIGZpbGVzOiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCwgYGluY2x1ZGUvbGludXgvbmV0cG9sbC5oYCwgYW5kIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RgLiBUaGlzIHNjcmVhbXMgYW4gYXJjaGl0ZWN0dXJhbCBjaGFuZ2UgdG8gdGhlIG5ldGNvbnNvbGUgc3Vic3lzdGVtLgoKUmlnaHQsIHNvIGl0JiMzOTtzIHJlZmFjdG9yaW5nIGhvdyBhZGRyZXNzZXMgYXJlIGhhbmRsZWQuIFJlcGxhY2luZyB0aGF0IG9sZCBgdW5pb24gaW5ldF9hZGRyYCBhbmQgdGhlIGBib29sIGlwdjZgIHdpdGggYSBgc3RydWN0IGluZXRfYWRkcmAgaXMgYSBzbWFydCBtb3ZlLiBJdCBzaW1wbGlmaWVzIHRoaW5ncyBhbmQgbWFrZXMgdGhlIGNvZGUgY2xlYW5lci4gVGhhdCB1bmlvbiBpbnNpZGUgdGhlIHN0cnVjdCwgd2l0aCB0aGUgYHU4IGZhbWlseWAgdG8gZGlzY3JpbWluYXRlIGJldHdlZW4gSVB2NCBhbmQgSVB2NiwgbWFrZXMgcGVyZmVjdCBzZW5zZSBhbmQgSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGlzIGltcGxlbWVudGVkLgoKU28sIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgZ29uZSB0aHJvdWdoIGFuZCB1cGRhdGVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IGBpbmV0X2FkZHJgIHN0cnVjdHVyZTogYG5ldGNvbnNfdGFrZV9pcHY2YCwgYG5ldGNvbnNfdGFrZV9pcHY0YCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcmAsIGFsbCB0aGUgcGFyc2luZyBhbmQgZGlzcGxheSBmdW5jdGlvbnMsIGNoZWNrc3VtIGNhbGN1bGF0aW9ucywgYW5kIHNlbmQgcm91dGluZXMuIFRob3JvdWdoLCBhcyBpdCBzaG91bGQgYmUuIFRoZSByZWZhY3RvciBvZiBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBzZWVtcyBpbXBvcnRhbnQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IHRob3NlIGFkZGVkIGNoZWNrcyBjYXJlZnVsbHkuIFRob3NlIHJldHVybiBjb2RlcyBhcmUgY3J1Y2lhbCBmb3IgZXJyb3IgaGFuZGxpbmcuIEEgbWlzc2luZyByZW1vdGUgYWRkcmVzcyBvciBhIG1pc21hdGNoIGluIElQIGZhbWlseSB3aWxsIGNhdXNlIGlzc3Vlcywgb2J2aW91c2x5LiBUaGUgYXV0b2NvbXBsZXRpb24gb2YgdGhlIGxvY2FsIElQIGJhc2VkIG9uIHRoZSByZW1vdGUgSVAgZmFtaWx5IGlzIGEgbmljZSB0b3VjaCwgdG9vLgoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGJyZWFrIGFueSBvZiB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIElzIG5ldGNvbnNvbGUgc3RpbGwgcmVhY2hhYmxlPyBIb3cgaXMgaXQgY29uZmlndXJlZD8gSSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBjaGFuZ2VzIGltcGFjdCBpdHMgYWNjZXNzaWJpbGl0eSB0aHJvdWdoIGNvbmZpZ2ZzLCBzeXNmcywgU3lzUnEsIHRoZSBjb21tYW5kIGxpbmUsIG9yIGFueSBvdGhlciBtZWFucy4gSSBuZWVkIHRvIHJldmlldyB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBgbmV0Y29uc29sZWAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBuZXcgZGVwZW5kZW5jaWVzIG9yIGNoYW5nZXMgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVENPTlNPTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzI2LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcbmRyaXZlcnMvbmV0L0tjb25maWctMzI4LVx0dHJpc3RhdGUgXCYjMzQ7TmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMzQ6Y29uZmlnIE5FVENPTlNPTEVfRFlOQU1JQ1xuZHJpdmVycy9uZXQvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L0tjb25maWctMzQ0LVxuZHJpdmVycy9uZXQvS2NvbmZpZzozNDU6Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cdGJvb2wgXCYjMzQ7U2V0IGtlcm5lbCBleHRlbmRlZCBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTM1NC1cbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zNTYtXHRib29sIFwmIzM0O1ByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyOAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgbmV0d29yayBjb25zb2xlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gYE5FVENPTlNPTEVgIGFuZCBgTkVUQ09OU09MRV9EWU5BTUlDYCB3aXRoaW4gYGRyaXZlcnMvbmV0L0tjb25maWdgLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgbnVhbmNlcyBvciBwb3RlbnRpYWwgZ290Y2hhcyByZWxhdGVkIHRvIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgb3B0aW9ucy4gSSByZWNhbGwgdGhlcmUgd2VyZSBzb21lIHJlY2VudCBkaXNjdXNzaW9ucyBhcm91bmQgdGhlIHVzZSBvZiBkeW5hbWljIGFsbG9jYXRpb24gdmVyc3VzIHN0YXRpYyBjb25maWd1cmF0aW9uLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgYSBjbGVhciBwaWN0dXJlLiBUaGUgZ29hbCBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBvcHRpb25zIGltcGFjdCB0aGUgbmV0d29yayBjb25zb2xlJiMzOTtzIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgZnJvbSBhIGJvb3QtdGltZSBwZXJzcGVjdGl2ZSBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3Qgb24gZmlybXdhcmUgdXNhZ2UuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzZXR0aW5ncyBJIHVsdGltYXRlbHkgcmVjb21tZW5kIHdvbiYjMzk7dCBjYXVzZSBhbnkgY29uZmxpY3RzIHdpdGggb3VyIGV4aXN0aW5nIG5ldHdvcmtpbmcgaW5mcmFzdHJ1Y3R1cmUgb3IgaW50cm9kdWNlIHNlY3VyaXR5IGNvbmNlcm5zLCBldmVuIGlmIHVubGlrZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI1Olx0XHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXG4gMzI2Olx0XG4gMzI3Olx0Y29uZmlnIE5FVENPTlNPTEVcbiAzMjg6XHRcdHRyaXN0YXRlIFwmIzM0O05ldHdvcmsgY29uc29sZSBsb2dnaW5nIHN1cHBvcnRcJiMzNDtcbiAzMjk6XHRcdGRlcGVuZHMgb24gUFJJTlRLXG4gMzMwOlx0XHRoZWxwXG4gMzMxOlx0XHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXG4gMzMyOlx0XHQgIFNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzMzM6XHRcbiAzMzQ6XHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXG4gMzM1Olx0XHRib29sIFwmIzM0O0R5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIGxvZ2dpbmcgdGFyZ2V0c1wmIzM0O1xuIDMzNjpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHRlNfRlMgXHUwMDI2XHUwMDI2IFxcXG4gMzM3Olx0XHRcdFx0IShORVRDT05TT0xFPXkgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTPW0pXG4gMzM4Olx0XHRzZWxlY3QgUFJJTlRLX0VYRUNVVElPTl9DVFhcbiAzMzk6XHRcdGhlbHBcbiAzNDA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSByZWNvbmZpZ3VyZSB0YXJnZXRcbiAzNDE6XHRcdCAgcGFyYW1ldGVycyAoaW50ZXJmYWNlLCBJUCBhZGRyZXNzZXMsIHBvcnQgbnVtYmVycywgTUFDIGFkZHJlc3NlcylcbiAzNDI6XHRcdCAgYXQgcnVudGltZSB0aHJvdWdoIGEgdXNlcnNwYWNlIGludGVyZmFjZSBleHBvcnRlZCB1c2luZyBjb25maWdmcy5cbiAzNDM6XHRcdCAgU2VlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XHUwMDNlIGZvciBkZXRhaWxzLlxuIDM0NDpcdFxuIDM0NTpcdGNvbmZpZyBORVRDT05TT0xFX0VYVEVOREVEX0xPR1xuIDM0NjpcdFx0Ym9vbCBcJiMzNDtTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFwmIzM0O1xuIDM0NzpcdFx0ZGVwZW5kcyBvbiBORVRDT05TT0xFXG4gMzQ4Olx0XHRkZWZhdWx0IG5cbiAzNDk6XHRcdGhlbHBcbiAzNTA6XHRcdCAgU2V0IGV4dGVuZGVkIGxvZyBzdXBwb3J0IGZvciBuZXRjb25zb2xlIG1lc3NhZ2UuIElmIHRoaXMgb3B0aW9uIGlzXG4gMzUxOlx0XHQgIHNldCwgbG9nIG1lc3NhZ2VzIGFyZSB0cmFuc21pdHRlZCB3aXRoIGV4dGVuZGVkIG1ldGFkYXRhIGhlYWRlciBpbiBhXG4gMzUyOlx0XHQgIGZvcm1hdCBzaW1pbGFyIHRvIC9kZXYva21zZy4gIFNlZVxuIDM1MzpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAzNTQ6XHRcbiAzNTU6XHRjb25maWcgTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0VcbiAzNTY6XHRcdGJvb2wgXCYjMzQ7UHJlcGVuZCBrZXJuZWwgcmVsZWFzZSB2ZXJzaW9uIGluIHRoZSBtZXNzYWdlIGJ5IGRlZmF1bHRcJiMzNDtcbiAzNTc6XHRcdGRlcGVuZHMgb24gTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcbiAzNTg6XHRcdGRlZmF1bHQgblxuIDM1OTpcdFx0aGVscFxuIDM2MDpcdFx0ICBTZXQga2VybmVsIHJlbGVhc2UgdG8gYmUgcHJlcGVuZGVkIHRvIGVhY2ggbmV0Y29uc29sZSBtZXNzYWdlIGJ5XG4gMzYxOlx0XHQgIGRlZmF1bHQuIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGtlcm5lbCByZWxlYXNlIGlzIHByZXBlbmRlZCBpbnRvXG4gMzYyOlx0XHQgIHRoZSBmaXJzdCBmaWVsZCBvZiBldmVyeSBuZXRjb25zb2xlIG1lc3NhZ2UsIHNvLCB0aGUgbmV0Y29uc29sZVxuIDM2MzpcdFx0ICBzZXJ2ZXIvcGVlciBjYW4gZWFzaWx5IGlkZW50aWZ5IHdoYXQga2VybmVsIHJlbGVhc2UgaXMgbG9nZ2luZyBlYWNoXG4gMzY0Olx0XHQgIG1lc3NhZ2UuICBTZWUgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcdTAwM2UgZm9yXG4gMzY1Olx0XHQgIGRldGFpbHMuXG4gMzY2Olx0XG4gMzY3Olx0Y29uZmlnIE5FVFBPTExcbiAzNjg6XHRcdGRlZl9ib29sIE5FVENPTlNPTEVcbiAzNjk6XHRcbiAzNzA6XHRjb25maWcgTkVUX1BPTExfQ09OVFJPTExFUlxuIDM3MTpcdFx0ZGVmX2Jvb2wgTkVUUE9MTFxuIDM3MjpcdFxuIDM3MzpcdGNvbmZpZyBOVEJfTkVUREVWXG4gMzc0Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIEV0aGVybmV0IG92ZXIgTlRCIFRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIER5bmFtaWMgQ29uZmlndXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBORVRDT05TT0xFX0RZTkFNSUNgIGlzIHRoZSBrZXkgaGVyZS4gSXQgZW5hYmxlcyB1c2Vyc3BhY2UgdG8gZHluYW1pY2FsbHkgY3JlYXRlIGFuZCByZWNvbmZpZ3VyZSBuZXRjb25zb2xlIHRhcmdldHMgYXQgcnVudGltZSB0aHJvdWdoIHRoZSBgL3N5cy9rZXJuZWwvY29uZmlnL25ldGNvbnNvbGUvYCBpbnRlcmZhY2UsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24uIEkgc2VlIHRoYXQgdGhpcyByZWxpZXMgb24gZnVuY3Rpb25zIGxpa2UgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBsb2NhbF9pcF9zaG93YCwgYHJlbW90ZV9pcF9zaG93YCwgYW5kIGBlbmFibGVkX3N0b3JlYCB0byBpbnRlcmFjdCB3aXRoIG5ldGNvbnNvbGUgY29uZmlndXJhdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBzZXQgdXAgd2l0aCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYC4gQW5kLCBvZiBjb3Vyc2UsIHdoZW4gdGhlcmUmIzM5O3MgYWN0dWFsbHkgbG9nZ2luZyBvciBjb25zb2xlIG91dHB1dCB0byB0cmFuc21pdCwgYG5ldHBvbGxfc2VuZF91ZHBgIGhhbmRsZXMgdGhlIHBhY2tldCB0cmFuc21pc3Npb24uIFRoaXMgc2VlbXMgZmFpcmx5IHN0YW5kYXJkIGFuZCBJJiMzOTtkIGV4cGVjdCB0aGlzIHRvIHdvcmsgYXMgYWR2ZXJ0aXNlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBlbnZpcm9ubWVudHMsIGFzc3VtaW5nIGNvbmZpZ2ZzIGFuZCBuZXRjb25zb2xlIGFyZSBlbmFibGVkLCBvZiBjb3Vyc2UuCgpOb3csIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlIG9mIHRoZSBjaGFuZ2VzLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55IG90aGVyIGNvZGUgaW4gYG5ldGNvbnNvbGUuY2AgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgb3IgY2FsbHMuIEl0JiMzOTtzIHRpbWUgdG8gZ28gYmFjayBvdmVyIHRoZSBwYXRjaCBjaGFuZ2VzIGFuZCBtYWtlIGEgbGlzdCBvZiBldmVyeXRoaW5nOiBJIHNlZSBgbmV0Y29uc190YWtlX2lwdjZgLCBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCwgYG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyYCwgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAsIGBsb2NhbF9pcF9zaG93YCwgYHJlbW90ZV9pcF9zaG93YCwgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGBuZXRwb2xsX3NlbmRfdWRwYCwgYW5kIGBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYC4gT2ssIGdvdCB0aGUgbGlzdC4KCkkgd2FudCB0byBrbm93IGhvdyBhbGwgdGhlc2UgZnVuY3Rpb25zIGZpdCBpbnRvIHRoZSBjYWxsaW5nIGZsb3cgc28gSSYjMzk7bGwgY2hlY2sgd2hhdCBjYWxscyBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgIGV0Yy4gaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ1Nz1zdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0ODY6c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00ODcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz01NzY9c3RhdGljIHZvaWQgcmVzdW1lX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTg1Olx0aWYgKG5ldGNvbnNfbmV0cG9sbF9zZXR1cChudCkpIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODYtXHRcdC8qIG5ldHBvbGwgZmFpbHMgc2V0dXAgb25jZSwgZG8gbm90IHRyeSBhZ2Fpbi4gKi9cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTAxND1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA3NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDc2Olx0XHRyZXQgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwNzctXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYyMT1zdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY1OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjYwOlx0ZXJyID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjYxLVx0aWYgKGVycikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRGlhZ25vc3RpYyBDaGVja2xpc3QqKgoKT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgbmVlZCB0byBtZXRob2RpY2FsbHkgcmV2aWV3IHRoZSBrZXkgY29tcG9uZW50cyBpbnZvbHZlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIGZ1bmRhbWVudGFsIHZhcmlhYmxlczogSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc3RhdGVzIG9mIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGFuZCBvdGhlciByZWxldmFudCBzdG9yZXMuIE1ha2Ugc3VyZSB0aG9zZSBhcmUgYXMgZXhwZWN0ZWQgYW5kIGNvbnRhaW4gdGhlIHJpZ2h0IGluZm9ybWF0aW9uLgoKTmV4dCwgc2luY2UgYG5ldHBvbGxfc2VuZF91ZHBgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBpbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIGFuZCB3aGF0IG90aGVyIG1vZHVsZXMgcmVseSBvbiBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgbmV0cG9sbF9zZW5kX3VkcGAgdG8gZmluZCB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXMgY2FsbGluZyBgbmV0cG9sbF9zZW5kX3VkcGAgc28gSSB1bmRlcnN0YW5kIGhvdyB0aGluZ3MgYXJlIGZsb3dpbmcuIEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0cG9sbF9zZW5kX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1Nj1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTgwOnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE4MS1cdFx0XHQgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNy0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIyLSAqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyMzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyMjc9c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjk6XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMzAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTA4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldGNvbnNvbGUgRHluYW1pYyBNZXNzYWdlIEhhbmRsaW5nKioKClJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuZXR3b3JrIGNvbnNvbGUgbWVzc2FnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBudWFuY2VzIG9mIGhvdyBpdCBiZWhhdmVzIHdoZW4gZHluYW1pYyBOZXRjb25zb2xlIGlzIGVuYWJsZWQgdmVyc3VzIHdoZW4gaXQmIzM5O3MgZGlzYWJsZWQuIE15IGd1dCB0ZWxscyBtZSB0aGF0IGBzZW5kX3VkcF9keW5gLCBvciBwZXJoYXBzIGB3cml0ZV9tc2dgIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgaXMgdGhlIGtleSBmdW5jdGlvbiB0byBleGFtaW5lLiBJIG5lZWQgdG8gdHJhY2UgdGhlIG1lc3NhZ2UgZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYy4gVGhlIGRpZmZlcmVuY2VzIGluIG1lc3NhZ2Ugc2VuZGluZywgYW5kIHBvdGVudGlhbGx5IGZyYW1pbmcsIHNob3VsZCBiZSBhcHBhcmVudCBpbiB0aG9zZSBmdW5jdGlvbnMuIEkmIzM5O20gcmVhbGx5IGN1cmlvdXMgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGRpZmZlcmVuY2VzIGF0IHRoZSB1bmRlcmx5aW5nIGxldmVsLCBhbmQgd2hpY2ggcGllY2VzIG9mIHRoZSBwdXp6bGUgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZW5kX3VkcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1Nj1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTgwOnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE4MS1cdFx0XHQgICAgaW50IGxlbilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNy0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjE4OiAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjIyLSAqXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyMzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjc6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjk6XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMzAtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyNDQ9c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc2LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNzc6XHRzZW5kX3VkcChudCwgbnQtXHUwMDNlYnVmLCBtc2dfbGVuKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc4LX1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI4OD1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzc1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNzY6XHRcdHNlbmRfdWRwKG50LCBudC1cdTAwM2VidWYsIGJ1Zl9vZmZzZXQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNzctXHR9XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0MjY9c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDM0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MzU6XHQvKiBLZWVwcyB0aGUgcGF5bG9hZCBwaWNrZWQgYmVsb3cgYWxpdmUgdW50aWwgdGhlIGxhc3Qgc2VuZF91ZHAoKS4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDM2LVx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDU4PXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjUtXHRcdGZyYWcgPSBtaW4obGVmdCwgTUFYX1BSSU5UX0NIVU5LKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDY2Olx0XHRzZW5kX3VkcChudCwgdG1wLCBmcmFnKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDY3LVx0XHR0bXAgJiM0Mzs9IGZyYWc7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFRyYW5zbWlzc2lvbiBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYHNlbmRfdWRwYCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSDigJMgaXQmIzM5O3MgY2FsbGluZyBgbmV0cG9sbF9zZW5kX3VkcGAuIE5vdywgdGhlcmUmIzM5O3MgYSBjb21tZW50IHJpZ2h0IGhlcmUgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSBncmFiYmluZyBteSBhdHRlbnRpb24uIEl0IHN0YXRlcyBzb21ldGhpbmcgYWJvdXQgdGhlIGBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIGhvdyBpdCBhZmZlY3RzIHRoZSBgbmV0cG9sbF9zZW5kX3VkcGAgY2FsbC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlciB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgZW50aXJlIGZsb3cuIFRpbWUgdG8gbG9vayB1cCB0aG9zZSBzcGVjaWZpYyBsaW5lcyBpbiB0aGUgbmV0Y29uc29sZS5jIGZpbGUgYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGF0IGNvbmZpZyBvcHRpb24uIExldCYjMzk7cyBzZWUgaWYgdGhhdCBkeW5hbWljIGNvbnNvbGUgaGFuZGxpbmcgaXMgYWN0dWFsbHkgYWN0aXZlIG9yIG5vdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMTU6XHR9XG4yMjE2Olx0XG4yMjE3Olx0LyoqXG4yMjE4Olx0ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xuMjIxOTpcdCAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xuMjIyMDpcdCAqIEBtc2c6IG1lc3NhZ2UgdG8gc2VuZFxuMjIyMTpcdCAqIEBsZW46IGxlbmd0aCBvZiBtZXNzYWdlXG4yMjIyOlx0ICpcbjIyMjM6XHQgKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXG4yMjI0Olx0ICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxuMjIyNTpcdCAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxuMjIyNjpcdCAqL1xuMjIyNzpcdHN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcbjIyMjg6XHR7XG4yMjI5Olx0XHRpbnQgcmVzdWx0ID0gbmV0cG9sbF9zZW5kX3VkcChudCwgbXNnLCBsZW4pO1xuMjIzMDpcdFxuMjIzMTpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcbjIyMzI6XHRcdFx0aWYgKHJlc3VsdCA9PSBORVRfWE1JVF9EUk9QKSB7XG4yMjMzOlx0XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZudC1cdTAwM2VzdGF0cy5zeW5jcCk7XG4yMjM0Olx0XHRcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZudC1cdTAwM2VzdGF0cy54bWl0X2Ryb3BfY291bnQpO1xuMjIzNTpcdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNm50LVx1MDAzZXN0YXRzLnN5bmNwKTtcbjIyMzY6XHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgPT0gLUVOT01FTSkge1xuMjIzNzpcdFx0XHRcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2bnQtXHUwMDNlc3RhdHMuc3luY3ApO1xuMjIzODpcdFx0XHRcdHU2NF9zdGF0c19pbmMoXHUwMDI2bnQtXHUwMDNlc3RhdHMuZW5vbWVtX2NvdW50KTtcbjIyMzk6XHRcdFx0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZudC1cdTAwM2VzdGF0cy5zeW5jcCk7XG4yMjQwOlx0XHRcdH1cbjIyNDE6XHRcdH1cbjIyNDI6XHR9XG4yMjQzOlx0XG4yMjQ0Olx0c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuMjI0NTpcdFx0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqbXNnLFxuMjI0NjpcdFx0XHRcdFx0ICAgICAgaW50IG1zZ19sZW4sXG4yMjQ3Olx0XHRcdFx0XHQgICAgICBpbnQgcmVsZWFzZV9sZW4sXG4yMjQ4Olx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXG4yMjQ5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQxNQoJCQkJCQkJb3V0cHV0OiAyMTkKCQkJCQkJCXRob3VnaHRzOiAxMjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkIHdhcyBhIHNsaWdodGx5IG91dGRhdGVkIGxpbmUgaW4gdGhlIGNvbW1lbnQsIGJ1dCB0aGUga2V5IHRoaW5nIGlzIHRoYXQgYHNlbmRfdWRwYCBhbHdheXMgY2FsbHMgYG5ldHBvbGxfc2VuZF91ZHBgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4KCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIElzIHRoaXMgdGhpbmcgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgbW9kaWZpZXMgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSBpbiBRRU1VLCBHQ0UuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGR5bmFtaWMgY29uZmlnZnMgdGFyZ2V0IGNyZWF0aW9uLCBzZXR0aW5nIGxvY2FsIGFuZCByZW1vdGUgSVBzLCBlbmFibGluZyB0aGUgdGFyZ2V0LCBwdXNoaW5nIGNvbnNvbGUgbWVzc2FnZXMgb3ZlciB2aXJ0dWFsIGV0aGVybmV0IGludGVyZmFjZXMgKGR1bW15LCB2ZXRoLCB0YXApLCBhbmQgcG9raW5nIGFyb3VuZCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGVzLiBUaGF0JiMzOTtzIGEganVpY3kgdGFyZ2V0LiBUaGUgcGF0Y2ggaXRzZWxmIGlzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzLiBJdOKAmXMgcGFyc2luZyBJUCBhZGRyZXNzZXMgZGlmZmVyZW50bHksIGNoYW5naW5nIGhvdyB0aGUgYWRkcmVzcyBmYW1pbHkgaXMgdHJhY2tlZCwgdXNpbmcgYG50LSZndDtsb2NhbF9pcC5mYW1pbHlgIGFuZCBgbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHlgIGluc3RlYWQgb2YganVzdCBhbiBgaXB2NmAgZmxhZy4gSXTigJlzIGFkZGluZyB2YWxpZGF0aW9uIGluIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBjaGVja2luZyBpZiB0aGUgcmVtb3RlIElQIGlzIHNldCBhbmQgaWYgdGhlcmXigJlzIGEgZmFtaWx5IG1pc21hdGNoLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc190YWtlX2lwdjZgLCBhbmQgdGhlIHN5c2ZzIGhhbmRsZXJzIGZvciBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgbmV0cG9sbF91ZHBfY2hlY2tzdW1gLCBgcHVzaF9ldGhgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGFuZCB0aGUgY29tbWFuZC1saW5lIHBhcnNlciBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIEdpdmVuIGFsbCB0aGF0LCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuCgpOZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJpZ2h0IGNvbmZpZyBvcHRpb25zIGVuYWJsZWQuIFdlIGRlZmluaXRlbHkgbmVlZCBgTkVUQ09OU09MRWAsIGFuZCBhbHNvIGBORVRDT05TT0xFX0RZTkFNSUNgIChiZWNhdXNlIG9mIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgbG9jYWxfaXBfc2hvd2AsIGByZW1vdGVfaXBfc2hvd2AsIGFuZCBgQ09ORklHRlNfRlNgKS4gV2UgbmVlZCBgQ09ORklHRlNfRlNgIChpdCYjMzk7cyBhIGRlcGVuZGVuY3kgb2YgYE5FVENPTlNPTEVfRFlOQU1JQ2ApLiBXZSBvYnZpb3VzbHkgbmVlZCBgSU5FVGAgZm9yIElQdjQuIEFuZCwgdG8gYmUgY29tcGxldGUsIGBJUFY2YCBzaW5jZSB3ZSBoYXZlIElQdjYgc3VwcG9ydC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZyBuYW1lcyBpbiB0aGUgS2NvbmZpZyBmaWxlcy4KCk5vdywgbGV04oCZcyBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLCB0aGUgb25lcyB3ZSByZWFsbHkgd2FudCB0byBmb2N1cyBvbi4gT2theSwgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYCwgaXQmIzM5O3MgdGhlc2UgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZDogYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX3Rha2VfaXB2NmAsIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIExldCYjMzk7cyBjb25maXJtIHdoaWNoIG9uZXMgYXJlIGltcG9ydGFudCBhbmQgbm9uLXN0YXRpYyBzbyB3ZSBjYW4gY2FsbCB0aGVtIGRpcmVjdGx5LiBBZnRlciB2ZXJpZmljYXRpb24sIGhlcmUgYXJlIHRoZSBpbXBvcnRhbnQgc3ltYm9scyBmb3IgbWU6IGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgYGxvY2FsX2lwX3N0b3JlYCwgYHJlbW90ZV9pcF9zdG9yZWAsIGBsb2NhbF9pcF9zaG93YCwgYHJlbW90ZV9pcF9zaG93YCwgYG5ldHBvbGxfc2VuZF91ZHBgLCBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc190YWtlX2lwdjZgLgoKQXJlIHRoZXNlIGZ1bmN0aW9ucyB1YmlxdWl0b3VzPyBObywgdGhleSYjMzk7cmUgYWxsIG5ldGNvbnNvbGUtc3BlY2lmaWMsIHNvIHRoZXkmIzM5O3JlIGV4Y2VsbGVudCBmb2N1cyBzeW1ib2xzLiBUaGVzZSBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIGhhbmRsaW5nIGFkZHJlc3MgcGFyc2luZywgY29uZmlndXJhdGlvbiwgYW5kIHRoZSBhY3R1YWwgc2VuZGluZyBvZiBVRFAgcGFja2V0cy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHJlYXNvbmluZyBtYWtlcyBzZW5zZS4gVGhlIHBhdGNoIGlzIGFsbCBhYm91dCByZWZhY3RvcmluZyBob3cgbmV0Y29uc29sZSBtYW5hZ2VzIElQIGFkZHJlc3Nlcy4gSXQmIzM5O3MgbW92aW5nIGF3YXkgZnJvbSB0aGUgYGlwdjZgIGZsYWcgYW5kIHRoZSBgdW5pb24gaW5ldF9hZGRyYCBhbmQgaW5zdGVhZCBpbnRyb2R1Y2luZyBgc3RydWN0IGluZXRfYWRkcmAgdG8gZXhwbGljaXRseSBzdG9yZSBhZGRyZXNzIGZhbWlsaWVzLiBJdCYjMzk7cyBhZGRpbmcgc29tZSBpbXBvcnRhbnQgYWRkcmVzcyBmYW1pbHkgY29uc2lzdGVuY3kgY2hlY2tzLiBUaGUgbmV0cG9sbCBzZXR1cCwgcGFyc2luZywgYW5kIHBhY2tldCBjb25zdHJ1Y3Rpb24gbG9naWMgYXJlIGFsbCBiZWluZyB1cGRhdGVkLiBBbmQgeWVzLCBhbGwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGR5bmFtaWMgbmV0Y29uc29sZSBjb25maWdmcyBpbnRlcmZhY2UgdW5kZXIgYC9zeXMva2VybmVsL2NvbmZpZy9uZXRjb25zb2xlYC4gSXQmIzM5O3MgYSBuaWNlbHkgc2VsZi1jb250YWluZWQgbGl0dGxlIHN1YnN5c3RlbSwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy4KCk9rYXksIEkgdGhpbmsgSSYjMzk7bSBnb29kLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCByZWNvcmQgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRDT05TT0xFJiMzNDssCiAgICAmIzM0O05FVENPTlNPTEVfRFlOQU1JQyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0Y29uc19uZXRwb2xsX3NldHVwJiMzNDssCiAgICAmIzM0O25ldHBvbGxfcGFyc2VfaXBfYWRkciYjMzQ7LAogICAgJiMzNDtsb2NhbF9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc3RvcmUmIzM0OywKICAgICYjMzQ7bG9jYWxfaXBfc2hvdyYjMzQ7LAogICAgJiMzNDtyZW1vdGVfaXBfc2hvdyYjMzQ7LAogICAgJiMzNDtuZXRwb2xsX3NlbmRfdWRwJiMzNDssCiAgICAmIzM0O25ldGNvbnNfdGFrZV9pcHY0JiMzNDssCiAgICAmIzM0O25ldGNvbnNfdGFrZV9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIG1hbmFnZW1lbnQgaW4gdGhlIG5ldGNvbnNvbGUgc3Vic3lzdGVtIGJ5IHJlcGxhY2luZyB0aGUgc2VwYXJhdGUgSVB2NiBib29sZWFuIGZsYWcgYW5kIHVuaW9uIHdpdGggYSBkZWRpY2F0ZWQgaW5ldF9hZGRyIHN0cnVjdCBzdG9yaW5nIHRoZSBhZGRyZXNzIGZhbWlseS4gSXQgbW9kaWZpZXMgYWRkcmVzcyBwYXJzaW5nLCBpbnRlcmZhY2UgSVAgYXV0by1wb3B1bGF0aW9uLCBhZGRyZXNzIGZhbWlseSB2YWxpZGF0aW9uIGluIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCwgc3lzZnMvY29uZmlnZnMgYXR0cmlidXRlIGhhbmRsZXJzLCBhbmQgVURQIHRyYW5zbWlzc2lvbiBwYXRocy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBkeW5hbWljIG5ldGNvbnNvbGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gaW4gY29uZmlnZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVENPTlNPTEUmIzM0OywKICAgICYjMzQ7TkVUQ09OU09MRV9EWU5BTUlDJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRjb25zX25ldHBvbGxfc2V0dXAmIzM0OywKICAgICYjMzQ7bmV0cG9sbF9wYXJzZV9pcF9hZGRyJiMzNDssCiAgICAmIzM0O2xvY2FsX2lwX3N0b3JlJiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zdG9yZSYjMzQ7LAogICAgJiMzNDtsb2NhbF9pcF9zaG93JiMzNDssCiAgICAmIzM0O3JlbW90ZV9pcF9zaG93JiMzNDssCiAgICAmIzM0O25ldHBvbGxfc2VuZF91ZHAmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjQmIzM0OywKICAgICYjMzQ7bmV0Y29uc190YWtlX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxuXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrOlxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cbjIuIFBhcnNpbmcgYW5kIHVwZGF0ZXM6IGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIHBvcHVsYXRlcyBgaXBgICh2aWEgYGluNF9wdG9uYCkgb3IgYGluNmAgKHZpYSBgaW42X3B0b25gKSBhbmQgc2V0cyBgZmFtaWx5YCBhY2NvcmRpbmdseSAoYEFGX0lORVRgIG9yIGBBRl9JTkVUNmApLiBXaGVuIGF1dG8tZGVyaXZlZCwgYG5ldGNvbnNfdGFrZV9pcHY0YCBhbmQgYG5ldGNvbnNfdGFrZV9pcHY2YCBmdWxseSBpbml0aWFsaXplIHRoZSBhZGRyZXNzIGFuZCBzZXQgYGZhbWlseWAuXG4zLiBVc2VyLXNwYWNlIG91dHB1dCAvIGluZm8gbGVha3M6IFN5c2ZzIGF0dHJpYnV0ZXMgYGxvY2FsX2lwX3Nob3dgIGFuZCBgcmVtb3RlX2lwX3Nob3dgIGVtaXQgZm9ybWF0dGVkIHN0cmluZ3MgYmFzZWQgb24gdGhlIHZlcmlmaWVkIGBmYW1pbHlgIGRpc2NyaW1pbmF0b3IgYW5kIHJlYWQgb25seSB0aGUgZnVsbHkgaW5pdGlhbGl6ZWQgYWRkcmVzcyB1bmlvbiBmaWVsZHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2Vyc3BhY2UuXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5YCBhbmQgcmVhZCBwcm9wZXJseSBpbml0aWFsaXplZCBgaW42YCBvciBgaXBgIGZpZWxkcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjlhOTY1NWVjZTI1ZDlhM2UyZWFiOTg4OWFkZTUyNDE0MTBiNzMyOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDE6NDg6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3QKaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNjk0YmNhNDgwM2Q1MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdApAQCAtMTQxLDYgJiM0MzsxNDEsMTEgQEAgVGhlIGludGVyZmFjZSBleHBvc2VzIHRoZXNlIHBhcmFtZXRlcnMgb2YgYSBuZXRjb25zb2xlIHRhcmdldCB0byB1c2Vyc3BhY2U6CiAJdHJhbnNtaXRfZXJyb3JzCU51bWJlciBvZiBwYWNrZXQgc2VuZCBlcnJvcnMJCShyZWFkLW9ubHkpCiAJPT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICA9PT09PT09PT09PT0KIAomIzQzO2xvY2FsX2lwIGlzIG9wdGlvbmFsOiBpZiBpdCBpcyBsZWZ0IHVuc2V0LCBuZXRjb25zb2xlIGRlcml2ZXMgYSBzb3VyY2UKJiM0MzthZGRyZXNzIGZyb20gdGhlIGVncmVzcyBpbnRlcmZhY2Ugd2hlbiB0aGUgdGFyZ2V0IGlzIGVuYWJsZWQuIFdyaXRpbmcgYW55CiYjNDM7dmFsdWUgdG8gaXQsIGluY2x1ZGluZyAwLjAuMC4wLCB1c2VzIHRoYXQgdmFsdWUgdmVyYmF0aW0gYW5kIGRpc2FibGVzIHRoZQomIzQzO2F1dG9tYXRpYyBzZWxlY3Rpb24uCiYjNDM7CiBUaGUgJiMzNDtlbmFibGVkJiMzNDsgYXR0cmlidXRlIGlzIGFsc28gdXNlZCB0byBjb250cm9sIHdoZXRoZXIgdGhlIHBhcmFtZXRlcnMgb2YKIGEgdGFyZ2V0IGNhbiBiZSB1cGRhdGVkIG9yIG5vdCAtLSB5b3UgY2FuIG1vZGlmeSB0aGUgcGFyYW1ldGVycyBvZiBvbmx5CiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmICYjMzQ7ZW5hYmxlZCYjMzQ7IGlzIDApLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IGIzNThlNWMzNjczNTEuLjI2NzI1NGYwNDZkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTE1MSw2ICYjNDM7MTUxLDE1IEBAIGVudW0gdGFyZ2V0X3N0YXRlIHsKIAlTVEFURV9ERUFDVElWQVRFRCwKIH07CiAKJiM0MztzdHJ1Y3QgaW5ldF9hZGRyIHsKJiM0MzsJLyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi8KJiM0MzsJdTgJCQlmYW1pbHk7CiYjNDM7CXVuaW9uIHsKJiM0MzsJCV9fYmUzMgkJaXA7CiYjNDM7CQlzdHJ1Y3QgaW42X2FkZHIJaW42OwomIzQzOwl9OwomIzQzO307CiYjNDM7CiAvKioKICAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuCiAgKiBAcmN1OglVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuCkBAIC0xOTUsNyAmIzQzOzIwNCw2IEBAIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHsKICAqCQlsb2NhbF9tYWMJKHJlYWQtb25seSkKICAqIEBsb2NhbF9pcDoJU291cmNlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX2lwOglEZXN0aW5hdGlvbiBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLgotICogQGlwdjY6CVdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLgogICogQGxvY2FsX3BvcnQ6CVNvdXJjZSBVRFAgcG9ydCBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuCiAgKiBAcmVtb3RlX21hYzoJRGVzdGluYXRpb24gZXRoZXJuZXQgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS4KQEAgLTIyNSw4ICYjNDM7MjMzLDcgQEAgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHsKIAlib29sCQkJZXh0ZW5kZWQ7CiAJYm9vbAkJCXJlbGVhc2U7CiAJc3RydWN0IG5ldHBvbGwJCW5wOwotCXVuaW9uIGluZXRfYWRkcgkJbG9jYWxfaXAsIHJlbW90ZV9pcDsKLQlib29sCQkJaXB2NjsKJiM0MzsJc3RydWN0IGluZXRfYWRkcglsb2NhbF9pcCwgcmVtb3RlX2lwOwogCXUxNgkJCWxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwogCXU4CQkJcmVtb3RlX21hY1tFVEhfQUxFTl07CiAJLyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICYjNDM7MSBnaXZlcyBzY25wcmludGYoKSByb29tIGZvciBpdHMKQEAgLTQyOCw2ICYjNDM7NDM1LDcgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCQkJCWNvbnRpbnVlOwogCQkJLyogR290IHRoZSBJUCwgbGV0JiMzOTtzIHJldHVybiAqLwogCQkJbnQtJmd0O2xvY2FsX2lwLmluNiA9IGlmcC0mZ3Q7YWRkcjsKJiM0MzsJCQludC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDY7CiAJCQllcnIgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ2OSwyOCAmIzQzOzQ3NywxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsCiAJfQogCiAJbnQtJmd0O2xvY2FsX2lwLmlwID0gaWZhLSZndDtpZmFfbG9jYWw7CiYjNDM7CW50LSZndDtsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUOwogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVAgJXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIAogCXJldHVybiAwOwogfQogCi0vKgotICogVGVzdCB3aGV0aGVyIHRoZSBjYWxsZXIgbGVmdCBudC0mZ3Q7bG9jYWxfaXAgdW5zZXQsIHNvIHRoYXQKLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuCi0gKgotICogbnQtJmd0O2xvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSwKLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLAotICogSVB2NC1tYXBwZWQgOjpmZmZmOmEuYi5jLmQpIG11c3Qgbm90IGJlIHRlc3RlZCB2aWEgdGhlIElQdjQgYXJtIOKAlAotICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmQKLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLgotICovCi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCi17Ci0JaWYgKG50LSZndDtpcHY2KQotCQlyZXR1cm4gaXB2Nl9hZGRyX2FueSgmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwotCXJldHVybiAhbnQtJmd0O2xvY2FsX2lwLmlwOwotfQotCiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9uczsKQEAgLTUwMCw2ICYjNDM7NDkyLDE3IEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJYm9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKG50LSZndDtyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykgewomIzQzOwkJbnBfZXJyKG5wLCAmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FREVTVEFERFJSRVE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkpIHsKJiM0MzsJCW5wX2VycihucCwgJiMzNDtsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlydG5sX2xvY2soKTsKIAlpZiAobnAtJmd0O2Rldl9uYW1lWzBdKQogCQluZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC0mZ3Q7ZGV2X25hbWUpOwpAQCAtNTM2LDE2ICYjNDM7NTM5LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpCiAJCXJ0bmxfbG9jaygpOwogCX0KIAotCWlmIChuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KG50KSkgewotCQlpZiAoIW50LSZndDtpcHY2KSB7Ci0JCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gcHV0OwotCQl9IGVsc2UgewomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKJiM0MzsJCWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJCWVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBwdXQ7Ci0JCX0KJiM0MzsJCWVsc2UKJiM0MzsJCQllcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCWdvdG8gcHV0OwogCQlpcF9vdmVyd3JpdHRlbiA9IHRydWU7CiAJfQogCkBAIC03MjcsMjQgJiM0Mzs3MjcsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCkKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKIAogCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgcG9ydCAlZFxuJiMzNDssIG50LSZndDtsb2NhbF9wb3J0KTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7bG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykKJiM0MzsJCW5wX2luZm8obnAsICYjMzQ7bG9jYWwgSVAgdW5zZXRcbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O2xvY2FsX2lwLmlwKTsKIAlucF9pbmZvKG5wLCAmIzM0O2ludGVyZmFjZSBuYW1lICYjMzk7JXMmIzM5O1xuJiMzNDssIG5wLSZndDtkZXZfbmFtZSk7CiAJbnBfaW5mbyhucCwgJiMzNDtsb2NhbCBldGhlcm5ldCBhZGRyZXNzICYjMzk7JXBNJiMzOTtcbiYjMzQ7LCBucC0mZ3Q7ZGV2X21hYyk7CiAJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgcG9ydCAlZFxuJiMzNDssIG50LSZndDtyZW1vdGVfcG9ydCk7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVAgdW5zZXRcbiYjMzQ7KTsKJiM0MzsJZWxzZSBpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pbjYpOwogCWVsc2UKIAkJbnBfaW5mbyhucCwgJiMzNDtyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtyZW1vdGVfaXAuaXApOwogCW5wX2luZm8obnAsICYjMzQ7cmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXG4mIzM0OywgbnQtJmd0O3JlbW90ZV9tYWMpOwogfQogCi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXMKLSAqIHBvcHVsYXRlZCwgMSBpZiBJUHY2IGlzIHBvcHVsYXRlZCwgYW5kIC0xIHVwb24gZmFpbHVyZS4KJiM0MzsvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzCiYjNDM7ICogYW5kIC0xIHVwb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpCiYjNDM7c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKQogewogCWNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7CiAJaW50IGxlbjsKQEAgLTc1NiwxNCAmIzQzOzc2MCwxOCBAQCBzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcikKIAlpZiAoc3RyW2xlbiAtIDFdID09ICYjMzk7XG4mIzM5OykKIAkJbGVuIC09IDE7CiAKLQlpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwotCSAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xuJiMzOTspKQomIzQzOwlpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopJmFtcDthZGRyLSZndDtpcCwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewomIzQzOwkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKIAkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSAmYW1wOyZhbXA7Ci0JICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKLQkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkKLQkJcmV0dXJuIDE7CiYjNDM7CSAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKikmYW1wO2FkZHItJmd0O2luNiwgLTEsICZhbXA7ZW5kKSAmZ3Q7IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewomIzQzOwkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDY7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQogCiAJcmV0dXJuIC0xOwogfQpAQCAtODY4LDIwICYjNDM7ODc2LDI0IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTsKIAotCWlmIChudC0mZ3Q7aXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKQomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0O1xuJiMzNDspOwomIzQzOwlpZiAobnQtJmd0O2xvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42KTsKIAllbHNlCi0JCXJldHVybiBzeXNmc19lbWl0KGJ1ZiwgJiMzNDslcEk0XG4mIzM0OywgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwomIzQzOwkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTRcbiYjMzQ7LCAmYW1wO250LSZndDtsb2NhbF9pcC5pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpCiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7XG4mIzM0Oyk7CiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyVwSTZjXG4mIzM0OywgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwLmluNik7CiAJZWxzZQotCQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcCk7CiYjNDM7CQlyZXR1cm4gc3lzZnNfZW1pdChidWYsICYjMzQ7JXBJNFxuJiMzNDssICZhbXA7bnQtJmd0O3JlbW90ZV9pcC5pcCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGxvY2FsX21hY19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKQpAQCAtMTIyNiw3ICYjNDM7MTIzOCw2IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLAogewogCXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7CiAJc3NpemVfdCByZXQgPSAtRUlOVkFMOwotCWludCBpcHY2OwogCiAJZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTsKIAlpZiAobnQtJmd0O3N0YXRlID09IFNUQVRFX0VOQUJMRUQpIHsKQEAgLTEyMzUsMTAgJiM0MzsxMjQ2LDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsCiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwotCWlmIChpcHY2ID09IC0xKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKIAkJZ290byBvdXRfdW5sb2NrOwotCW50LSZndDtpcHY2ID0gISFpcHY2OwogCiAJcmV0ID0gY291bnQ7CiBvdXRfdW5sb2NrOgpAQCAtMTI1MSw3ICYjNDM7MTI2MCw2IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIHsKIAlzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pOwogCXNzaXplX3QgcmV0ID0gLUVJTlZBTDsKLQlpbnQgaXB2NjsKIAogCWR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7CiAJaWYgKG50LSZndDtzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7CkBAIC0xMjYwLDEwICYjNDM7MTI2OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCAmYW1wO250LSZndDtyZW1vdGVfaXApOwotCWlmIChpcHY2ID09IC0xKQomIzQzOwlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7cmVtb3RlX2lwKSAmbHQ7IDApCiAJCWdvdG8gb3V0X3VubG9jazsKLQludC0mZ3Q7aXB2NiA9ICEhaXB2NjsKIAogCXJldCA9IGNvdW50Owogb3V0X3VubG9jazoKQEAgLTIwNzIsNyAmIzQzOzIwNzgsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LAogCiAJLyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqLwogCXVkcGgtJmd0O2NoZWNrID0gMDsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJdWRwaC0mZ3Q7Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoJmFtcDtudC0mZ3Q7bG9jYWxfaXAuaW42LAogCQkJCQkgICAgICAmYW1wO250LSZndDtyZW1vdGVfaXAuaW42LAogCQkJCQkgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCwKQEAgLTIxMTMsNyAmIzQzOzIxMTksNyBAQCBzdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJZXRoZXJfYWRkcl9jb3B5KGV0aC0mZ3Q7aF9zb3VyY2UsIG5wLSZndDtkZXYtJmd0O2Rldl9hZGRyKTsKIAlldGhlcl9hZGRyX2NvcHkoZXRoLSZndDtoX2Rlc3QsIG50LSZndDtyZW1vdGVfbWFjKTsKLQlpZiAobnQtJmd0O2lwdjYpCiYjNDM7CWlmIChudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNikKIAkJZXRoLSZndDtoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJZWxzZQogCQlldGgtJmd0O2hfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CkBAIC0yMTgyLDcgJiM0MzsyMTg4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKIAkJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCiAJdWRwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCWlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAllbHNlCiAJCWlwX2xlbiA9IHVkcF9sZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7CkBAIC0yMTk4LDcgJiM0MzsyMjA0LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywKIAlza2JfcHV0KHNrYiwgbGVuKTsKIAogCXB1c2hfdWRwKG50LCBza2IsIGxlbik7Ci0JaWYgKG50LSZndDtpcHY2KQomIzQzOwlpZiAobnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpCiAJCXB1c2hfaXB2NihudCwgc2tiLCBsZW4pOwogCWVsc2UKIAkJcHVzaF9pcHY0KG50LCBza2IsIGxlbik7CkBAIC0yNTI3LDEwICYjNDM7MjUzMyw4IEBAIF9fcmVsZWFzZXMoJmFtcDt0YXJnZXRfbGlzdF9sb2NrKQogc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIHsKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSAmYW1wO250LSZndDtucDsKLQlib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTsKIAljaGFyICpjdXIgPSBvcHQ7CiAJY2hhciAqZGVsaW07Ci0JaW50IGlwdjY7CiAKIAlpZiAoKmN1ciAhPSAmIzM5O0AmIzM5OykgewogCQlkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7QCYjMzk7KTsKQEAgLTI1NDQsMTYgJiM0MzsyNTQ4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpCiAJY3VyJiM0MzsmIzQzOzsKIAogCWlmICgqY3VyICE9ICYjMzk7LyYjMzk7KSB7Ci0JCWlwdmVyc2lvbl9zZXQgPSB0cnVlOwogCQlkZWxpbSA9IHN0cmNocihjdXIsICYjMzk7LyYjMzk7KTsKIAkJaWYgKCFkZWxpbSkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwogCQkqZGVsaW0gPSAwOwotCQlpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApOwotCQlpZiAoaXB2NiAmbHQ7IDApCiYjNDM7CQlpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQllbHNlCi0JCQludC0mZ3Q7aXB2NiA9IChib29sKWlwdjY7CiAJCWN1ciA9IGRlbGltOwogCX0KIAljdXImIzQzOyYjNDM7OwpAQCAtMjU5NSwxMyAmIzQzOzI1OTUsMTEgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdCkKIAlpZiAoIWRlbGltKQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKIAkqZGVsaW0gPSAwOwotCWlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCAmYW1wO250LSZndDtyZW1vdGVfaXApOwotCWlmIChpcHY2ICZsdDsgMCkKJiM0MzsJaWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsICZhbXA7bnQtJmd0O3JlbW90ZV9pcCkgJmx0OyAwKQogCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQllbHNlIGlmIChpcHZlcnNpb25fc2V0ICZhbXA7JmFtcDsgbnQtJmd0O2lwdjYgIT0gKGJvb2wpaXB2NikKJiM0MzsJaWYgKG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG50LSZndDtsb2NhbF9pcC5mYW1pbHkgIT0gbnQtJmd0O3JlbW90ZV9pcC5mYW1pbHkpCiAJCWdvdG8gcGFyc2VfZmFpbGVkOwotCWVsc2UKLQkJbnQtJmd0O2lwdjYgPSAoYm9vbClpcHY2OwogCWN1ciA9IGRlbGltICYjNDM7IDE7CiAKIAlpZiAoKmN1ciAhPSAwKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0xNiwxMSAmIzQzOzE2LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VkcC5oJmd0OwogCi11bmlvbiBpbmV0X2FkZHIgewotCV9fYmUzMgkJaXA7Ci0Jc3RydWN0IGluNl9hZGRyCWluNjsKLX07Ci0KIHN0cnVjdCBuZXRwb2xsIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCW5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIERlY2lzaW9uOiBBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgUGF0Y2gqKgoKT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgYG5ldGNvbnNvbGVgIHBhdGNoIHdhcnJhbnQgc3Bpbm5pbmcgdXAgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBpbiBhZGRpdGlvbiB0byBvdXIgc3RhbmRhcmQgS0FTQU4gZWZmb3J0cz8gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNoYW5nZWQuIExvb2tzIGxpa2Ugd2UmIzM5O3ZlIGdvdCBzb21lIGRvY3VtZW50YXRpb24gdHdlYWtzIGluIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RgIOKAkyBzcGVjaWZpY2FsbHksIGNsYXJpZnlpbmcgdGhhdCBgbG9jYWxfaXBgIGlzIG5vdyBvcHRpb25hbC4gRmluZSwgbm90IGltbWVkaWF0ZWx5IGNvbmNlcm5pbmcgZnJvbSBhIG1lbW9yeSBzYWZldHkgUE9WLgoKVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSwgaXQgc2VlbXMsIGlzIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBBaGEsIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCBkZWZpbml0aW9uOgoKYGBgYwpzdHJ1Y3QgaW5ldF9hZGRyIHsKCS8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovCgl1OCBmYW1pbHk7Cgl1bmlvbiB7CgkJX19iZTMyIGlwOwoJCXN0cnVjdCBpbjZfYWRkciBpbjY7Cgl9Owp9OwpgYGAKClRoaXMgaXMgdGhlIGtleS4gVGhleSYjMzk7dmUgcmVwbGFjZWQgYHVuaW9uIGluZXRfYWRkciBsb2NhbF9pcCwgcmVtb3RlX2lwOyBib29sIGlwdjY7YCB3aXRoIGBzdHJ1Y3QgaW5ldF9hZGRyIGxvY2FsX2lwLCByZW1vdGVfaXA7YCBpbiBgbmV0Y29uc29sZV90YXJnZXRgLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIHVzaW5nIGEgdW5pb24gdG8gcmVwcmVzZW50IHRoZSBJUCBhZGRyZXNzIGZhbWlseSwgd2l0aCB0aGUgYGZhbWlseWAgbWVtYmVyLCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gVGhlIGNvbXBpbGVyICpzaG91bGQqIGJlIGhhbmRsaW5nIHRoZSBtZW1vcnkgbGF5b3V0IGFuZCBhY2Nlc3MgY29ycmVjdGx5LCBidXQgdGhlc2Ugc29ydHMgb2YgY2hhbmdlcyBhcmUgcHJpbWUgdGFyZ2V0cyBmb3Igc3VidGxlIHVzZS1hZnRlci1mcmVlIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgcGFydGljdWxhcmx5IGlmIHRoZSBmYW1pbHkgaXNuJiMzOTt0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgb3B0aW9uYWwgbmF0dXJlIG9mIGBsb2NhbF9pcGAgbWlnaHQgY29tcGxpY2F0ZSBtYXR0ZXJzIGV2ZW4gZnVydGhlci4KClNvLCB3aGVyZSBhcmUgdGhlc2UgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3RzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQ/IFRoYXQmIzM5O3MgdGhlIG5leHQgY3JpdGljYWwgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLiBMZXQmIzM5O3MgZmlyZSB1cCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyBgbmV0Y29uc29sZV90YXJnZXRgIGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1c2VkLiBUaGF0IHdpbGwgdGVsbCBtZSBpZiB0aGVyZSBpcyBhbnkgcGxhY2UgdG8gdHJpZ2dlciBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMuIE9uY2UgSSBoYXZlIHRoZSBhbGxvY2F0aW9uIGFuZCB1c2Ugb2YgdGhhdCBzdHJ1Y3QgdW5kZXIgY29udHJvbCwgSSBjYW4gbWFrZSBhIGRlY2lzaW9uIGFib3V0IGFkZGluZyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jLipuZXRjb25zb2xlX3RhcmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBNZW1vcnkgQWxsb2NhdGlvbnMgaW4gbmV0Y29uc29sZS5jKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldGNvbnNvbGUuY2AuIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIGlkZW50aWZ5IGV2ZXJ5IG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiB0aGlzIG1vZHVsZS4gVGhpcyBpcyBsaWtlbHkgbW90aXZhdGVkIGJ5IGEgcGVyZm9ybWFuY2UgYW5hbHlzaXMsIGEgbWVtb3J5IGxlYWsgaW52ZXN0aWdhdGlvbiwgb3IgcGVyaGFwcyBldmVuIGEgc2VjdXJpdHkgYXVkaXQuIEdpdmVuIHRoZSBuYXR1cmUgb2YgbmV0d29ya2luZyBjb2RlLCBJJiMzOTttIGV4cGVjdGluZyBzb21lIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQsIHByb2JhYmx5IGZvciBidWZmZXJpbmcgcGFja2V0cywgY29uZmlndXJpbmcgY29ubmVjdGlvbnMsIG9yIHN0b3JpbmcgY29ubmVjdGlvbiBzdGF0ZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuCgpJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHRleHQgc2VhcmNoIHdpdGhpbiB0aGUgZmlsZSwgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBga21hbGxvY2AsIGBremFsbG9jYCwgYHZtYWxsb2NgLCBga21lbV9jYWNoZV9hbGxvY2AsIGV0Yy4gSSYjMzk7bGwgbmVlZCB0byBiZSBtaW5kZnVsIG9mIG1hY3JvIHVzYWdlIHRoYXQgbWlnaHQgd3JhcCB0aGVzZSBmdW5jdGlvbnMuIENvbW1vbiBwYXR0ZXJucyBsaWtlIGFsbG9jYXRpb24gd3JhcHBlcnMsIGUuZy4gYE5FVERFVl9BTExPQ2Agb3Igc2ltaWxhciwgYXJlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIEkgYWxzbyBjYW4mIzM5O3QgZm9yZ2V0IGN1c3RvbSBtZW1vcnkgcG9vbCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmUgdW5mb3J0dW5hdGVseSBjb21tb24gaW4ga2VybmVsIGNvZGUgYW5kIG1pZ2h0IGJlIHVzZWQgaW4gdGhlIG1vZHVsZSwgc28gSSYjMzk7bGwgYWxzbyBiZSBzY2FubmluZyBmb3IgY3VzdG9tIGFsbG9jYXRpb24gZnVuY3Rpb25zIHdoaWNoIG1pZ2h0IG5vdCB1c2UgdGhlIHN0YW5kYXJkIGtlcm5lbCBhbGxvY2F0b3JzLgoKT25jZSBJJiMzOTt2ZSBpZGVudGlmaWVkIHBvdGVudGlhbCBhbGxvY2F0aW9uIHBvaW50cywgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBlYWNoIGFsbG9jYXRpb24gYmFjayB0byBpdHMgY29ycmVzcG9uZGluZyBmcmVlaW5nIG1lY2hhbmlzbS4gVGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlcmUgYXNzb2NpYXRlZCBga2ZyZWVgIGNhbGxzPyBEbyB0aGV5IGZvbGxvdyBhIHByb3BlciBlcnJvciBoYW5kbGluZyBwYXRoPyBBcmUgdGhlcmUgYW55IGRhbmdsaW5nIHBvaW50ZXJzIGlmIHRoZXJlJiMzOTtzIGFuIGVycm9yPyBBcmUgdGhlcmUgYW55IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcz8gV2l0aG91dCB0aGlzLCBJJiMzOTttIGp1c3QgbGlzdGluZyBhbGxvY2F0aW9ucy4gSSBoYXZlIHRvIGxvb2sgZm9yIHRoZSBhbGxvY2F0aW9uIC8gZGVhbGxvY2F0aW9uIHBhaXJzLgoKSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiB0aGVzZSBhbGxvY2F0aW9ucy4gSXMgaXQgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3IgYSB0YXNrbGV0PyBUaGUgY29udGV4dCBkcmFtYXRpY2FsbHkgaW1wYWN0cyB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlIG5lZWQgZm9yIGFwcHJvcHJpYXRlIGxvY2tpbmcgbWVjaGFuaXNtcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igc3BpbmxvY2tzLCBtdXRleGVzLCBhbmQgb3RoZXIgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIEkgbmVlZCB0byBrbm93IGlmIGFsbG9jYXRpb25zIGFyZSBoYXBwZW5pbmcgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIG9yIG5vdC4KCkkmIzM5O2xsIGFsc28ga2VlcCBpbiBtaW5kIGNvbW1vbiBwaXRmYWxsczogYXJlIHRoZXJlIGFsbG9jYXRpb24gc2l6ZSBsaW1pdHMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBXaGF0IGFib3V0IG1lbW9yeSBmcmFnbWVudGF0aW9uIG92ZXIgdGltZT8gQW55IHVzZSBvZiBzbGFiIGNhY2hlcyBhbmQgYXJlIHRoZXkgY29uZmlndXJlZCBvcHRpbWFsbHkgZm9yIHRoZSBleHBlY3RlZCB3b3JrbG9hZD8gVGhpcyBtb2R1bGUgbWF5IGJlIGRlYWxpbmcgd2l0aCBkYXRhIHRoYXQgaXMgdXNlci1zdXBwbGllZCwgc28gSSBhbSB2ZXJ5IG11Y2ggb24gdGhlIGxvb2tvdXQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgdmFsaWRhdGlvbiwgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93cyBhbmQgb3RoZXIgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIG5ldHdvcmsgY29kZSwgYWZ0ZXIgYWxsLgoKRmluYWxseSwgSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBob3cgdGhlIGFsbG9jYXRpb25zIGFmZmVjdCBwZXJmb3JtYW5jZSBhbmQgd2hldGhlciB3ZSBjYW4gaW1wcm92ZSBhbnl0aGluZy4gSXMgdGhlcmUgYSBiZXR0ZXIgYWxnb3JpdGhtIG9yIGRhdGEgc3RydWN0dXJlIHRoYXQgY291bGQgcmVkdWNlIHRoZSBuZWVkIGZvciBkeW5hbWljIG1lbW9yeT8gQ291bGQgd2UgcHJlLWFsbG9jYXRlIHNvbWUgbWVtb3J5IG9yIHVzZSBhIHNsYWIgY2FjaGUgbW9yZSBlZmZlY3RpdmVseT8gVGhlIGdvYWwgaXMgdG8gb2J0YWluIGEgaG9saXN0aWMgdmlldyBvZiBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGlzIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0Y29uc29sZV90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExOD1zdGF0aWMgc3RydWN0IGNvbnNvbGUgbmV0Y29uc29sZV9leHQsIG5ldGNvbnNvbGU7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMDpzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgIHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjEtXHR1NjRfc3RhdHNfdCB4bWl0X2Ryb3BfY291bnQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE3Mj1zdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3OC0vKipcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzk6ICogc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IC0gUmVwcmVzZW50cyBhIGNvbmZpZ3VyZWQgbmV0Y29uc29sZSB0YXJnZXQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgwLSAqIEBsaXN0Olx0TGlua3MgdGhpcyB0YXJnZXQgaW50byB0aGUgdGFyZ2V0X2xpc3QuXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNy0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTg6c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTktXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzAtI2VuZGlmXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjMxOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0X3N0YXRzIHN0YXRzO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMi1cdGVudW0gdGFyZ2V0X3N0YXRlXHRzdGF0ZTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjYwPXN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjktICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjcwOnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X2dldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzY6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcHV0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjc3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9Mjk5PXN0YXRpYyB2b2lkIF9fZXhpdCBkeW5hbWljX25ldGNvbnNvbGVfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMDYtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzA3OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfdGFyZ2V0X2dldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwOC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMxMC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMTE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcHV0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzEyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMxNTpzdGF0aWMgdm9pZCBwb3B1bGF0ZV9jb25maWdmc19pdGVtKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE2LVx0XHRcdFx0ICAgaW50IGNtZGxpbmVfY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTMyND1zdGF0aWMgdm9pZCBkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfdW5sb2NrKHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzMC0vKiBDaGVjayBpZiB0aGUgdGFyZ2V0IHdhcyBib3VuZCBieSBtYWMgYWRkcmVzcy4gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMzE6c3RhdGljIGJvb2wgYm91bmRfYnlfbWFjKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzMyLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzM1LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzNjpzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzM3LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM0MzpzdGF0aWMgdm9pZCByZWZpbGxfc2ticyhzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM0NC17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTM1Nz1zdGF0aWMgdm9pZCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM1OC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU5Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzYwOlx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0LCByZWZpbGxfd3EpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM2MS1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzY4LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjM2OTpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3NrYl9wb29sX2luaXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzAte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mzc0OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzUte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00MDE9c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MTItICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDEzOnN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MTQtXHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1NzpzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU4LVx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4NS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0ODY6c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00ODcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NzUtLyogQXR0ZW1wdHMgdG8gcmVzdW1lIGxvZ2dpbmcgdG8gYSBkZWFjdGl2YXRlZCB0YXJnZXQuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTc2OnN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01Nzcte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01OTYtLyogQ2hlY2tzIGlmIGEgZGVhY3RpdmF0ZWQgdGFyZ2V0IG1hdGNoZXMgYSBkZXZpY2UuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTk3OnN0YXRpYyBib29sIGRlYWN0aXZhdGVkX3RhcmdldF9tYXRjaChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU5OC1cdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTYwOT1zdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3VtZV90YXJnZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxMC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjExOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTItXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxMy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MTQ6XHRudCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQsIHJlc3VtZV93cSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjE1LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02NjktICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjcwOnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX2FuZF9pbml0KHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjcxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NzI6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3My1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzAwPXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJvY2Vzc19jbGVhbnVwc19jb3JlKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzAxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MDI6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCAqdG1wO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcwMy1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyNC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MjU6c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MjYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03NTE9c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODA1OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKnRvX3RhcmdldChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODA2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODEyLVx0cmV0dXJuIGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODEzOlx0XHRcdCAgICBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQsIGdyb3VwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MTQtfVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MzA9c3RhdGljIHZvaWQgdHJpbV9uZXdsaW5lKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0MS0vKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0MjogKiBBdHRyaWJ1dGUgb3BlcmF0aW9ucyBmb3IgbmV0Y29uc29sZV90YXJnZXQuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQzLSAqL1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04NzU9c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NzYte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3NzpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc4LVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04ODc9c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg4LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODk6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5MC1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTEyPXN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTkxMy17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTE0Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTUtXHR1NjQgeG1pdF9kcm9wX2NvdW50LCBlbm9tZW1fY291bnQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTkyOD1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTI5LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MzA6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXHUwMDNlY2lfcGFyZW50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MzEtXHRib29sIGNwdV9ucl9lbmFibGVkO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NDE9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NDMte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk0NDpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cdTAwM2VjaV9wYXJlbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0NS1cdGJvb2wgdGFza25hbWVfZW5hYmxlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTU0PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NTYte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk1NzpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cdTAwM2VjaV9wYXJlbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1OC1cdGJvb2wgcmVsZWFzZV9lbmFibGVkO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NzA9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uZXRjb25zX2NvbnNvbGVzKHZvaWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTcxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5NzI6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk3My1cdHUzMiBjb25zb2xlX3R5cGVfbmVlZGVkID0gMDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTk0PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTk2LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5OTc6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXHUwMDNlY2lfcGFyZW50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05OTgtXHRib29sIG1zZ2lkX2VuYWJsZWQ7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMTQ9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMTYte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEwMTc6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMTgtXHRib29sIGVuYWJsZWQsIGN1cnJlbnRfZW5hYmxlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTExMj1zdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTE0LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTE1Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTE2LVx0Ym9vbCByZWxlYXNlO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMTM5PXN0YXRpYyBzc2l6ZV90IGV4dGVuZGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTQxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTQyOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTQzLVx0Ym9vbCBleHRlbmRlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE2NT1zdGF0aWMgc3NpemVfdCBkZXZfbmFtZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2Ny17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTE2ODpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2OS1cdHNpemVfdCBsZW4gPSBjb3VudDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE5Mj1zdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTk0LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTk1Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMTk2LVx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjE0PXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIxNi17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIxNzpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIxOC1cdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTIzNj1zdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzOC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIzOTpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI0MC1cdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI1OD1zdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjAte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNjE6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNjItXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyODQtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI4NTpzdGF0aWMgc2l6ZV90IGNvdW50X3VzZXJkYXRhX2VudHJpZXMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjg2LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI5MD1zdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjkyLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjkzOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjk0LVx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzMzA9c3RhdGljIHN0cnVjdCB1c2VyZGF0YSAqdG9fdXNlcmRhdGEoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzM0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEzMzU6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqdXNlcmRhdGFfdG9fdGFyZ2V0KHN0cnVjdCB1c2VyZGF0YSAqdWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMzNi17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEzNDM9c3RhdGljIHNzaXplX3QgdXNlcmRhdHVtX3ZhbHVlX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNTEtICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM1MjpzdGF0aWMgaW50IGNhbGNfdXNlcmRhdGFfbGVuKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1My17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM3MTpzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEzNzIte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDE5PXN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1Zixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQyMy1cdGNoYXIgb2xkX3ZhbHVlW01BWF9FWFRSQURBVEFfVkFMVUVfTEVOXTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDI0Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDI1LVx0c3RydWN0IHVzZXJkYXRhICp1ZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ1Ny0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDU4OnN0YXRpYyB2b2lkIGRpc2FibGVfc3lzZGF0YV9mZWF0dXJlKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ1OS1cdFx0XHRcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDY1PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfbXNnaWRfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0Njcte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE0Njg6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXHUwMDNlY2lfcGFyZW50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY5LVx0Ym9vbCBtc2dpZF9lbmFibGVkLCBjdXJyO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDk0PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ5Ni17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ5NzpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cdTAwM2VjaV9wYXJlbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTgtXHRib29sIHJlbGVhc2VfZW5hYmxlZCwgY3Vycjtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTUyMz1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX3Rhc2tuYW1lX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI1LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTI2Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtLVx1MDAzZWNpX3BhcmVudCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyNy1cdGJvb2wgdGFza25hbWVfZW5hYmxlZCwgY3Vycjtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTU1Mz1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX2NwdV9ucl9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1NS17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU1NjpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cdTAwM2VjaV9wYXJlbnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NTctXHRib29sIGNwdV9ucl9lbmFibGVkLCBjdXJyO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjEyPXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2l0ZW0gKnVzZXJkYXR1bV9tYWtlX2l0ZW0oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MTQte1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2MTU6XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MTYtXHRzdHJ1Y3QgdXNlcmRhdHVtICp1ZG07XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MzU9c3RhdGljIHZvaWQgdXNlcmRhdHVtX2Ryb3Aoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjM2LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjM3Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjM4LVx0c3RydWN0IHVzZXJkYXRhICp1ZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY3OT1DT05GSUdGU19BVFRSX1JPKCwgdHJhbnNtaXRfZXJyb3JzKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjgwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2ODE6c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4Mi1cdFx1MDAyNmF0dHJfZW5hYmxlZCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5Ni0vKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2OTc6ICogSXRlbSBvcGVyYXRpb25zIGFuZCB0eXBlIGZvciBuZXRjb25zb2xlX3RhcmdldC5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjk4LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwMDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzAxLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzAyOlx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzAzLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzA3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MDg6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMgPSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwOTpcdC5yZWxlYXNlXHRcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzEwLX07XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxMS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzEyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MTM6XHQuY3RfYXR0cnNcdFx0PSBuZXRjb25zb2xlX3RhcmdldF9hdHRycyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzE0Olx0LmN0X2l0ZW1fb3BzXHRcdD0gXHUwMDI2bmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxNS1cdC5jdF9vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MTg6c3RhdGljIHZvaWQgaW5pdF90YXJnZXRfY29uZmlnX2dyb3VwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxOS1cdFx0XHRcdCAgICAgY29uc3QgY2hhciAqbmFtZSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzIwLXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzIxOlx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFx1MDAyNm50LVx1MDAzZWdyb3VwLCBuYW1lLCBcdTAwMjZuZXRjb25zb2xlX3RhcmdldF90eXBlKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzIyLVx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFx1MDAyNm50LVx1MDAzZXVzZXJkYXRhX2dyb3VwLCBcJiMzNDt1c2VyZGF0YVwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcyNi1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzI3OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmZpbmRfY21kbGluZV90YXJnZXQoY29uc3QgY2hhciAqbmFtZSlcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzI4LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzI5Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgKnJldCA9IE5VTEw7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTczMC1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NDctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc0ODpzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQ5LVx0XHRcdFx0XHRcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc1MC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc1MTpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc1Mi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODEtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc4MjpzdGF0aWMgdm9pZCBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODMtXHRcdFx0XHQgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc4NC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc4NTpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTc4Ni1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE4MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIG5ldGNvbnNvbGVfc3Vic3lzX2dyb3VwX29wcyA9IHtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM1Olx0Lm1ha2VfZ3JvdXBcdD0gbWFrZV9uZXRjb25zb2xlX3RhcmdldCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM2Olx0LmRyb3BfaXRlbVx0PSBkcm9wX25ldGNvbnNvbGVfdGFyZ2V0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MzctfTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTg0NT1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBuZXRjb25zb2xlX3N1YnN5cyA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg1My1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODU0OnN0YXRpYyB2b2lkIHBvcHVsYXRlX2NvbmZpZ2ZzX2l0ZW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODU1LVx0XHRcdFx0ICAgaW50IGNtZGxpbmVfY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg2NDpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX2NwdV9ucihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgb2Zmc2V0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjUtXHRcdFx0XHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODcxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzI6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF90YXNrbmFtZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgb2Zmc2V0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzMtXHRcdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTg4MDpzdGF0aWMgaW50IHN5c2RhdGFfYXBwZW5kX3JlbGVhc2Uoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODgxLXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg4Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODg3OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfbXNnaWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODg4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTAwOnN0YXRpYyBpbnQgcHJlcGFyZV9zeXNkYXRhKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkwMS1cdFx0XHQgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE5MjY9c3RhdGljIGludCBuZXRjb25zb2xlX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MjktXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTkzMDpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTkzMS1cdGJvb2wgc3RvcHBlZCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTQxLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG50LCB0bXAsIFx1MDAyNnRhcmdldF9saXN0LCBsaXN0KSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTk0MjpcdFx0bmV0Y29uc29sZV90YXJnZXRfZ2V0KG50KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTQzLVx0XHRpZiAobnQtXHUwMDNlbnAuZGV2ID09IGRldikge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTcxLVx0XHRcdHF1ZXVlX3dvcmsobmV0Y29uc29sZV93cSwgXHUwMDI2bnQtXHUwMDNlcmVzdW1lX3dxKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTcyOlx0XHRuZXRjb25zb2xlX3RhcmdldF9wdXQobnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NzMtXHR9XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwMDQ9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXRjb25zb2xlX25ldGRldl9ub3RpZmllciA9IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAxOS0gKi9cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDIwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjAyMS17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNDItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA0MzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmZpbmRfc2tiKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4sXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA0NC1cdFx0XHRcdGludCByZXNlcnZlKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDY5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzA6c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDcxLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwOTQtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA5NTpzdGF0aWMgdm9pZCBwdXNoX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwOTYte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTEyLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMTM6c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTE0LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyNy1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTI4OnN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjktXHRcdCAgICAgIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1NjpzdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTU3LVx0XHQgICAgICBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxODA6c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTgxLVx0XHRcdCAgICBpbnQgbGVuKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjc6c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQzLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNDQ6c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNDUtXHRcdFx0XHQgICAgICBjb25zdCBjaGFyICptc2csXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIyODA9c3RhdGljIHZvaWQgYXBwZW5kX3JlbGVhc2UoY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg3LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyODg6c3RhdGljIHZvaWQgc2VuZF9mcmFnbWVudGVkX2JvZHkoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg5LVx0XHRcdFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM3OS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzgwOnN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzgxLVx0XHRcdFx0Y29uc3QgY2hhciAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDI1LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0MjY6c3RhdGljIHZvaWQgc2VuZF9leHRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjctXHRcdFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ1ODpzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NTktXHRcdFx0IHVuc2lnbmVkIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0Nzk9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4MC17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ4MTpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ4Mi1cbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUyOD1fX3JlbGVhc2VzKFx1MDAyNnRhcmdldF9saXN0X2xvY2spXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MzItXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjUzMzpzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MzQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjIwLS8qIEFsbG9jYXRlIG5ldyB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBzZXR1cCBuZXRwb2xsIGZvciBpdCAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2MjE6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyMi1cdFx0XHRcdFx0XHQgICAgaW50IGNtZGxpbmVfY291bnQpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyMy17XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYyNDpcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyNS1cdGludCBlcnI7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODItLyogQ2xlYW51cCBuZXRwb2xsIGZvciBnaXZlbiB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBmcmVlIGl0ICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjY4MzpzdGF0aWMgdm9pZCBmcmVlX3BhcmFtX3RhcmdldChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODQte1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNzEzPXN0YXRpYyBpbnQgX19pbml0IGluaXRfbmV0Y29uc29sZSh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzE1LVx0aW50IGVycjtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzE2Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgKnRtcDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzE3LVx0dTMyIGNvbnNvbGVfdHlwZV9uZWVkZWQgPSAwO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNzk0PXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX25ldGNvbnNvbGUodm9pZClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzk1LXtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzk2Olx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgKnRtcDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzk3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgTmV0d29yayBDb25zb2xlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZXNlIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNyYWNraW5nIG9wZW4gYGFsbG9jX2FuZF9pbml0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGFuZCBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAgdXNpbmcgYHJlYWQtZmlsZWAuIEkmIzM5O20gYXNzdW1pbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGNvbnNvbGUgaW5pdGlhbGl6YXRpb24gaGVyZSwgYW5kIHRoZXNlIGFyZSBsaWtlbHkgdGhlIGJ1aWxkaW5nIGJsb2Nrcy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgYWxsb2NhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgY29uc29sZSB0YXJnZXRzLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJlsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBwYXJhbWV0ZXIgcGFyc2luZywgYW5kIHRoZSBvdmVyYWxsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGRlZmluZSB0aGUgbmV0d29yayBjb25zb2xlIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlIHRvIGVuYWJsZSBuZXR3b3JrIGRlYnVnZ2luZy4gSSBleHBlY3QgdG8gc2VlIGFsbG9jYXRpb24gZm9yIGJ1ZmZlcnMsIHBlcmhhcHMgc3RydWN0dXJlcyB0byBob2xkIG5ldHdvcmsgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGRhdGEuIFRoZSAmIzM0O3RhcmdldCYjMzQ7IHBhcnQgaW1wbGllcyB0aGVzZSBhcmUgZGVzY3JpYmluZyB3aGVyZSB0aGUgY29uc29sZSBvdXRwdXQgaXMgZ29pbmcgdG8uIFRoZSAmIzM0O3BhcmFtJiMzNDsgYXNwZWN0IHByb2JhYmx5IHJlbGF0ZXMgdG8gcGFzc2luZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBzcGVjaWZpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjU6XHR9XG4gNjY2Olx0XG4gNjY3Olx0LyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0cy5cbiA2Njg6XHQgKiBOb3RlIHRoYXQgdGhlc2UgdGFyZ2V0cyBnZXQgdGhlaXIgY29uZmlnX2l0ZW0gZmllbGRzIHplcm9lZC1vdXQuXG4gNjY5Olx0ICovXG4gNjcwOlx0c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcbiA2NzE6XHR7XG4gNjcyOlx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuIDY3MzpcdFxuIDY3NDpcdFx0bnQgPSBremFsbG9jX29iaigqbnQpO1xuIDY3NTpcdFx0aWYgKCFudClcbiA2NzY6XHRcdFx0cmV0dXJuIG50O1xuIDY3NzpcdFxuIDY3ODpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRVhURU5ERURfTE9HKSlcbiA2Nzk6XHRcdFx0bnQtXHUwMDNlZXh0ZW5kZWQgPSB0cnVlO1xuIDY4MDpcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFKSlcbiA2ODE6XHRcdFx0bnQtXHUwMDNlcmVsZWFzZSA9IHRydWU7XG4gNjgyOlx0XG4gNjgzOlx0XHRudC1cdTAwM2VucC5uYW1lID0gXCYjMzQ7bmV0Y29uc29sZVwmIzM0OztcbiA2ODQ6XHRcdHN0cnNjcHkobnQtXHUwMDNlbnAuZGV2X25hbWUsIFwmIzM0O2V0aDBcJiMzNDssIElGTkFNU0laKTtcbiA2ODU6XHRcdG50LVx1MDAzZWxvY2FsX3BvcnQgPSA2NjY1O1xuIDY4NjpcdFx0bnQtXHUwMDNlcmVtb3RlX3BvcnQgPSA2NjY2O1xuIDY4NzpcdFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIDY4ODpcdFx0bnQtXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcbiA2ODk6XHRcdElOSVRfV09SSyhcdTAwMjZudC1cdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XG4gNjkwOlx0XHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xuIDY5MTpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZudC1cdTAwM2Vza2JfcG9vbCk7XG4gNjkyOlx0XHRJTklUX1dPUksoXHUwMDI2bnQtXHUwMDNlcmVmaWxsX3dxLCByZWZpbGxfc2tic193b3JrX2hhbmRsZXIpO1xuIDY5MzpcdFxuIDY5NDpcdFx0cmV0dXJuIG50O1xuIDY5NTpcdH1cbiA2OTY6XHRcbiA2OTc6XHQvKiBDbGVhbiB1cCBldmVyeSB0YXJnZXQgaW4gdGhlIGNsZWFudXBfbGlzdCBhbmQgbW92ZSB0aGUgY2xlYW4gdGFyZ2V0cyBiYWNrIHRvXG4gNjk4Olx0ICogdGhlIG1haW4gdGFyZ2V0X2xpc3QuXG4gNjk5Olx0ICovXG4gNzAwOlx0c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcbiA3MDE6XHR7XG4gNzAyOlx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCAqdG1wO1xuIDcwMzpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiA3MDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBQYXJhbWV0ZXIgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYWxsb2NhdGlvbiBzdHJhdGVnaWVzLiBCZWZvcmUgZGl2aW5nIGRlZXBlciwgSSBuZWVkIHRvIHRha2UgYSBzdGVwIGJhY2sgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlbiYjMzk7dCBvdmVybG9va2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gVGhlIGN1cnJlbnQgZm9jdXMgc2VlbXMgdG8gYmUgb24gYSBzcGVjaWZpYyBhcmVhLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBwZXJmb3JtIGEgY29tcGxldGUgc3lzdGVtcyBjaGVjay4gVGhhdCBtZWFucyBub3Qgb25seSBjaGVja2luZyB0aGUgbW9yZSBvYnZpb3VzIGFyZWEsIGJ1dCBhbHNvIGNvbnNpZGVyaW5nIHRoZSBicm9hZGVyIHBpY3R1cmUuIFNvLCByaWdodCBub3csIHRoZSBtb3N0IHByZXNzaW5nIHRoaW5nIGlzIHRoYXQgSSBuZWVkIHRvIGV4cGFuZCB0aGUgc2NvcGUgYSBiaXQuIExldCYjMzk7cyBzZWUgaWYgd2UmIzM5O3ZlIGFkZHJlc3NlZCB0aGlzIHdpdGggYGFsbG9jX3BhcmFtX3RhcmdldGAgYXMgd2VsbC4gUGVyaGFwcyB0aGUgaXNzdWVzIHN0ZW0gZnJvbSBob3cgdGhhdCYjMzk7cyBiZWluZyBoYW5kbGVkLiBXZSBuZWVkIHRvIGJlIGV4aGF1c3RpdmUgdG8gZW5zdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2MjA6XHQvKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cbjI2MjE6XHRzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcbjI2MjI6XHRcdFx0XHRcdFx0XHQgICAgaW50IGNtZGxpbmVfY291bnQpXG4yNjIzOlx0e1xuMjYyNDpcdFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcbjI2MjU6XHRcdGludCBlcnI7XG4yNjI2Olx0XG4yNjI3Olx0XHRudCA9IGFsbG9jX2FuZF9pbml0KCk7XG4yNjI4Olx0XHRpZiAoIW50KSB7XG4yNjI5Olx0XHRcdGVyciA9IC1FTk9NRU07XG4yNjMwOlx0XHRcdGdvdG8gZmFpbDtcbjI2MzE6XHRcdH1cbjI2MzI6XHRcbjI2MzM6XHRcdGlmICgqdGFyZ2V0X2NvbmZpZyA9PSAmIzM5OyYjNDM7JiMzOTspIHtcbjI2MzQ6XHRcdFx0bnQtXHUwMDNlZXh0ZW5kZWQgPSB0cnVlO1xuMjYzNTpcdFx0XHR0YXJnZXRfY29uZmlnJiM0MzsmIzQzOztcbjI2MzY6XHRcdH1cbjI2Mzc6XHRcbjI2Mzg6XHRcdGlmICgqdGFyZ2V0X2NvbmZpZyA9PSAmIzM5O3ImIzM5Oykge1xuMjYzOTpcdFx0XHRpZiAoIW50LVx1MDAzZWV4dGVuZGVkKSB7XG4yNjQwOlx0XHRcdFx0cHJfZXJyKFwmIzM0O05ldGNvbnNvbGUgY29uZmlndXJhdGlvbiBlcnJvci4gUmVsZWFzZSBmZWF0dXJlIHJlcXVpcmVzIGV4dGVuZGVkIGxvZyBtZXNzYWdlXCYjMzQ7KTtcbjI2NDE6XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjY0MjpcdFx0XHRcdGdvdG8gZmFpbDtcbjI2NDM6XHRcdFx0fVxuMjY0NDpcdFx0XHRudC1cdTAwM2VyZWxlYXNlID0gdHJ1ZTtcbjI2NDU6XHRcdFx0dGFyZ2V0X2NvbmZpZyYjNDM7JiM0Mzs7XG4yNjQ2Olx0XHR9XG4yNjQ3Olx0XG4yNjQ4Olx0XHQvKiBQYXJzZSBwYXJhbWV0ZXJzIGFuZCBzZXR1cCBuZXRwb2xsICovXG4yNjQ5Olx0XHRlcnIgPSBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKG50LCB0YXJnZXRfY29uZmlnKTtcbjI2NTA6XHRcdGlmIChlcnIpXG4yNjUxOlx0XHRcdGdvdG8gZmFpbDtcbjI2NTI6XHRcbjI2NTM6XHRcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2wgaXNcbjI2NTQ6XHRcdCAqIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZS4gVGhlIHRhcmdldCBpcyBub3RcbjI2NTU6XHRcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxuMjY1NjpcdFx0ICogbWlycm9yIHRoZSBjb25maWdmcyBwYXRoIGZvciBzeW1tZXRyeS5cbjI2NTc6XHRcdCAqL1xuMjY1ODpcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbjI2NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgRGVlcGVyOiBFeHBhbmRpbmcgdGhlIFNjb3BlIG9mIHRoZSBJbnF1aXJ5KioKCk9rYXksIEkmIzM5O3ZlIGp1c3QgYmVlbiBsb29raW5nIGF0IGEgcGFydGljdWxhciBmdW5jdGlvbiBvciBtb2R1bGUsIGJ1dCBJIHRoaW5rIEkgbmVlZCB0byBicm9hZGVuIG15IGludmVzdGlnYXRpb24gYSBiaXQuIE15IGluaXRpYWwgZm9jdXMgd2FzIG9uIFtpbXBsaWVkIHByZXZpb3VzIHRvcGljLCBlLmcuLCBlcnJvciBoYW5kbGluZywgYSBzcGVjaWZpYyBkcml2ZXJdLiBIb3dldmVyLCBpdCYjMzk7cyBvY2N1cnJlZCB0byBtZSB0aGF0IGEgcmVsYXRlZCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0YCwgbWlnaHQgYmUgcmVsZXZhbnQgYW5kIEkgc2hvdWxkbiYjMzk7dCBpZ25vcmUgaXQuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgY2hhbmdlIG9yIGlzc3VlIGluIG9uZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIGluIHRoZSBvdGhlci4gSXQgbWlnaHQgcHJvdmlkZSBtb3JlIGNvbnRleHQgb3IgcmV2ZWFsIGEgbW9yZSBob2xpc3RpYyBwZXJzcGVjdGl2ZSBvbiB0aGUgcHJvYmxlbSBvciB0YXNrIGF0IGhhbmQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIG9wZW4gdGhhdCBmaWxlIG9yIG1vZHVsZSBhbmQgZXhhbWluZSB0aGUgbG9naWMgdGhlcmUgdG9vLCBhcyBwYXJ0IG9mIHRoaXMgYW5hbHlzaXMuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgaW50ZXJwbGF5IG9yIHNoYXJlZCByZXNvdXJjZXMsIGFuZCBJIHdhbnQgdG8gY292ZXIgYWxsIGJhc2VzIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzQ1Olx0ICogR3JvdXAgb3BlcmF0aW9ucyBhbmQgdHlwZSBmb3IgbmV0Y29uc29sZV9zdWJzeXMuXG4xNzQ2Olx0ICovXG4xNzQ3Olx0XG4xNzQ4Olx0c3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm1ha2VfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4xNzQ5Olx0XHRcdFx0XHRcdFx0ICAgY29uc3QgY2hhciAqbmFtZSlcbjE3NTA6XHR7XG4xNzUxOlx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xuMTc1MjpcdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbjE3NTM6XHRcbjE3NTQ6XHRcdC8qIENoZWNraW5nIGlmIGEgdGFyZ2V0IGJ5IHRoaXMgbmFtZSB3YXMgY3JlYXRlZCBhdCBib290IHRpbWUuICBJZiBzbyxcbjE3NTU6XHRcdCAqIGF0dGFjaCBhIGNvbmZpZ2ZzIGVudHJ5IHRvIHRoYXQgdGFyZ2V0LiAgVGhpcyBlbmFibGVzIGR5bmFtaWNcbjE3NTY6XHRcdCAqIGNvbnRyb2wuXG4xNzU3Olx0XHQgKi9cbjE3NTg6XHRcdGlmICghc3RybmNtcChuYW1lLCBORVRDT05TT0xFX1BBUkFNX1RBUkdFVF9QUkVGSVgsXG4xNzU5Olx0XHRcdCAgICAgc3RybGVuKE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCkpKSB7XG4xNzYwOlx0XHRcdG50ID0gZmluZF9jbWRsaW5lX3RhcmdldChuYW1lKTtcbjE3NjE6XHRcdFx0aWYgKG50KSB7XG4xNzYyOlx0XHRcdFx0aW5pdF90YXJnZXRfY29uZmlnX2dyb3VwKG50LCBuYW1lKTtcbjE3NjM6XHRcdFx0XHRyZXR1cm4gXHUwMDI2bnQtXHUwMDNlZ3JvdXA7XG4xNzY0Olx0XHRcdH1cbjE3NjU6XHRcdH1cbjE3NjY6XHRcbjE3Njc6XHRcdG50ID0gYWxsb2NfYW5kX2luaXQoKTtcbjE3Njg6XHRcdGlmICghbnQpXG4xNzY5Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMTc3MDpcdFxuMTc3MTpcdFx0LyogSW5pdGlhbGl6ZSB0aGUgY29uZmlnX2dyb3VwIG1lbWJlciAqL1xuMTc3MjpcdFx0aW5pdF90YXJnZXRfY29uZmlnX2dyb3VwKG50LCBuYW1lKTtcbjE3NzM6XHRcbjE3NzQ6XHRcdC8qIEFkZGluZywgYnV0IGl0IGlzIGRpc2FibGVkICovXG4xNzc1Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7XG4xNzc2Olx0XHRsaXN0X2FkZChcdTAwMjZudC1cdTAwM2VsaXN0LCBcdTAwMjZ0YXJnZXRfbGlzdCk7XG4xNzc3Olx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcbjE3Nzg6XHRcbjE3Nzk6XHRcdHJldHVybiBcdTAwMjZudC1cdTAwM2Vncm91cDtcbjE3ODA6XHR9XG4xNzgxOlx0XG4xNzgyOlx0c3RhdGljIHZvaWQgZHJvcF9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbjE3ODM6XHRcdFx0XHRcdCAgIHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbjE3ODQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDU4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgaW5ldF9hZGRyIFN0cnVjdHVyZSBpbiBuZXRjb25zb2xlLmMqKgoKT2theSwgc28gYGFsbG9jX2FuZF9pbml0YCB1c2VzIGBremFsbG9jX29iaigqbnQpYCwgbWVhbmluZyB0aGUgYG50YCBzdHJ1Y3QgaXMgY29tcGxldGVseSB6ZXJvLWluaXRpYWxpemVkLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gU3BlY2lmaWNhbGx5LCB0aGlzIG1lYW5zIHRoZSBgZmFtaWx5YCBtZW1iZXIsIHdoaWNoIEkgc2VlIGlzIHBhcnQgb2YgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdHVyZSwgd2lsbCBzdGFydCBhcyBgMGAsIHdoaWNoIHRyYW5zbGF0ZXMgdG8gYEFGX1VOU1BFQ2AuIFRoZSBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCBtZW1iZXJzLCBhbHNvIGBpbmV0X2FkZHJgIHN0cnVjdHMsIGFyZSBhbHNvIHplcm9lZCBvdXQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpbmV0X2FkZHJgIGlzIHVzZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgcG90ZW50aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gSVB2NCBhbmQgSVB2Ni4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgaG93IGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIGhhbmRsZXMgaXQ6CgpgYGBjCnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcikKewoJY29uc3QgY2hhciAqZW5kID0gTlVMTDsKCWludCBsZW47CgoJbGVuID0gc3RybGVuKHN0cik7CglpZiAobGVuID09IDApCgkJcmV0dXJuIC0xOwoJaWYgKHN0cltsZW4gLSAxXSA9PSAmIzM5O1xuJiMzOTspCgkJbGVuIC09IDE7CgoJaWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aXAsIC0xLCAmYW1wO2VuZCkgJmd0OyAwICZhbXA7JmFtcDsKCSAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAmIzM5O1xuJiMzOTspKSB7CgkJYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVDsKCQlyZXR1cm4gMDsKCX0KCglpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJmFtcDsmYW1wOwoJICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKSZhbXA7YWRkci0mZ3Q7aW42LCAtMSwgJmFtcDtlbmQpICZndDsgMCAmYW1wOyZhbXA7CgkgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJiMzOTtcbiYjMzk7KSkgewoJCWFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2OwoJCXJldHVybiAwOwoJfQoKCXJldHVybiAtMTsKfQpgYGAKCk9rYXksIHNvIHdoZW4gYGluNF9wdG9uYCBzdWNjZWVkcywgaXQgd3JpdGVzIDQgYnl0ZXMgdG8gYGFkZHItJmd0O2lwYCBhbmQgc2V0cyBgYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVGAuIE1ha2VzIHNlbnNlLiBXaGVuIGBpbjZfcHRvbmAgc3VjY2VlZHMsIGl0IHdyaXRlcyAxNiBieXRlcyB0byBgYWRkci0mZ3Q7aW42YCwgYW5kIHNldHMgYGFkZHItJmd0O2ZhbWlseSA9IEFGX0lORVQ2YC4gVGhlIGludGVyZXN0aW5nIGJpdCBpcyBob3cgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgYXJlIHVwZGF0ZWQsIGJlY2F1c2UgdGhleSBhcmUgYGluZXRfYWRkcmAgc3RydWN0dXJlcywgd2hpY2ggYXJlIGxpa2VseSB1bmlvbnMuCgpUaGUgdnVsbmVyYWJpbGl0eSBjb3VsZCBjb21lIGludG8gcGxheSB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXMuIGBsb2NhbF9pcF9zdG9yZWAgaXMgYSBnb29kIGV4YW1wbGUuCgpgYGBjCglpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgJmFtcDtudC0mZ3Q7bG9jYWxfaXApICZsdDsgMCkKCQlnb3RvIG91dF91bmxvY2s7CmBgYAoKTGV0JiMzOTtzIHNheSBgbnQtJmd0O2xvY2FsX2lwYCB3YXMgcHJldmlvdXNseSBJUHY2IChtZWFuaW5nIHRoZSBgaW42YCBtZW1iZXIgaGVsZCAxNiBieXRlcykuIE5vdywgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgcGFyc2VzIGFuIElQdjQgYWRkcmVzcy4gIGBpbjRfcHRvbmAgd3JpdGVzIG9ubHkgNCBieXRlcyBpbnRvIGBhZGRyLSZndDtpcGAgKHRoZSBzdGFydCBvZiB0aGUgdW5pb24pLCBhbmQgc2V0cyBgYWRkci0mZ3Q7ZmFtaWx5ID0gQUZfSU5FVGAuICBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaXMsIHdoZW4gYGFkZHItJmd0O2ZhbWlseWAgaXMgYEFGX0lORVRgLCBpcyBhbnl0aGluZyBhY3R1YWxseSAqcmVhZGluZyogdGhlICpyZW1haW5pbmcqIDEyIGJ5dGVzIG9mIHRoZSB1bmlvbj8gSWYgbm90LCB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIG9yIGNvcnJ1cHRpb24uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBzdWJzZXF1ZW50IGNvZGUgcGF0aHMgbWlnaHQgdXNlIHRoZSBgaW42YCBtZW1iZXIgYWZ0ZXIgdGhpcyBraW5kIG9mIHRyYW5zaXRpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIGFsbCBhY2Nlc3NlcyB0byBib3RoIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIHRvIGJlIHN1cmUuIFNvLCBsZXQmIzM5O3MgZ3JlcCBmb3IgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgd2l0aGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBUaGF0IHNob3VsZCByZXZlYWwgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhlc2UgbWVtYmVycyBhcmUgdXNlZCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyhsb2NhbF9pcHxyZW1vdGVfaXApJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNzI9c3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDQtICpcdFx0bG9jYWxfbWFjXHQocmVhZC1vbmx5KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNTogKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDY6ICogQHJlbW90ZV9pcDpcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3LSAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTg9c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0IHtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM1LVx0c3RydWN0IG5ldHBvbGxcdFx0bnA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjM2Olx0c3RydWN0IGluZXRfYWRkclx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzctXHR1MTZcdFx0XHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDAxPXN0YXRpYyBjaGFyICpuZXRjb25zX2VncmVzc19kZXYoc3RydWN0IG5ldHBvbGwgKm5wLCBjaGFyICpidWYsIHNpemVfdCBidWZzeilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDEwLS8qXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDExOiAqIFBvcHVsYXRlIHRoZSB0YXJnZXQmIzM5O3MgbG9jYWxfaXAgd2l0aCB0aGUgSVB2NiBhZGRyZXNzIGZyb20gbmRldi5cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MTItICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDEzPXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDMzLVx0XHRcdGlmICghIShpcHY2X2FkZHJfdHlwZShcdTAwMjZpZnAtXHUwMDNlYWRkcikgXHUwMDI2IElQVjZfQUREUl9MSU5LTE9DQUwpICE9XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDM0Olx0XHRcdFx0ISEoaXB2Nl9hZGRyX3R5cGUoXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNikgXHUwMDI2IElQVjZfQUREUl9MSU5LTE9DQUwpKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQzNS1cdFx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQzNi1cdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQmIzM5O3MgcmV0dXJuICovXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDM3Olx0XHRcdG50LVx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cdTAwM2VhZGRyO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQzODpcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzktXHRcdFx0ZXJyID0gMDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDQ5LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1MDpcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjYgJXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDUxLVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ1NC0vKlxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1NTogKiBQb3B1bGF0ZSB0aGUgdGFyZ2V0JiMzOTtzIGxvY2FsX2lwIHdpdGggdGhlIElQdjQgYWRkcmVzcyBmcm9tIG5kZXYuXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU2LSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTQ1Nz1zdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ3OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0Nzk6XHRudC1cdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cdTAwM2VpZmFfbG9jYWw7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDgwOlx0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0ODE6XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUCAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDgyLVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00ODY9c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDk0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ5NTpcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ5Ni1cdFx0bnBfZXJyKG5wLCBcJiMzNDtyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00OTktXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTAwOlx0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTAxOlx0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTAyLVx0XHRucF9lcnIobnAsIFwmIzM0O2xvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQxLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU0MjpcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTQzOlx0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NDQtXHRcdFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NjctXHRpZiAoaXBfb3ZlcndyaXR0ZW4pXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTY4Olx0XHRtZW1zZXQoXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAsIDAsIHNpemVvZihudC1cdTAwM2Vsb2NhbF9pcCkpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU2OS1cdG5ldGRldl9wdXQobmRldiwgXHUwMDI2bnAtXHUwMDNlZGV2X3RyYWNrZXIpO1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MjU9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI5LVx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgcG9ydCAlZFxcblwmIzM0OywgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzMwOlx0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzMxLVx0XHRucF9pbmZvKG5wLCBcJiMzNDtsb2NhbCBJUCB1bnNldFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzMyOlx0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjczMzpcdFx0bnBfaW5mbyhucCwgXCYjMzQ7bG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNC1cdGVsc2VcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MzU6XHRcdG5wX2luZm8obnAsIFwmIzM0O2xvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM2LVx0bnBfaW5mbyhucCwgXCYjMzQ7aW50ZXJmYWNlIG5hbWUgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBucC1cdTAwM2VkZXZfbmFtZSk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczOC1cdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBwb3J0ICVkXFxuXCYjMzQ7LCBudC1cdTAwM2VyZW1vdGVfcG9ydCk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM5Olx0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc0MC1cdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQIHVuc2V0XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NDE6XHRlbHNlIGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc0MjpcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNik7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQzLVx0ZWxzZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc0NDpcdFx0bnBfaW5mbyhucCwgXCYjMzQ7cmVtb3RlIElQdjQgYWRkcmVzcyAlcEk0XFxuXCYjMzQ7LCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc0NS1cdG5wX2luZm8obnAsIFwmIzM0O3JlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcblwmIzM0OywgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTc1MT1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5MS0gKlx0XHRcdFx0fFx0cmVtb3RlX3BvcnRcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3OTI6ICpcdFx0XHRcdHxcdGxvY2FsX2lwXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzkzOiAqXHRcdFx0XHR8XHRyZW1vdGVfaXBcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03OTQtICpcdFx0XHRcdHxcdGxvY2FsX21hY1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04NzA9c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc0LVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3NTpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg3Ni17XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg3OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4Nzk6XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODAtXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODE6XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg4MjpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDslcEk2Y1xcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXAuaW42KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODMtXHRlbHNlXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODg0Olx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyVwSTRcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODUtfVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4Ni1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODc6c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODg4LXtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODkwLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg5MTpcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OTItXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7XFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTM6XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTQ6XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNmNcXG5cJiMzNDssIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcC5pbjYpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5NS1cdGVsc2VcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTY6XHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXBJNFxcblwmIzM0OywgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OTctfVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMjE0PXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzNS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjM2OnN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMzctXHRcdHNpemVfdCBjb3VudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI0OC1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjQ5Olx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjUwLVx0XHRnb3RvIG91dF91bmxvY2s7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNTctXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI1ODpzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1OS1cdCAgICAgICBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNzAtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI3MTpcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNzItXHRcdGdvdG8gb3V0X3VubG9jaztcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTY3Mz1DT05GSUdGU19BVFRSKCwgcmVtb3RlX3BvcnQpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2NzQ6Q09ORklHRlNfQVRUUigsIGxvY2FsX2lwKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjc1OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2NzYtQ09ORklHRlNfQVRUUl9STygsIGxvY2FsX21hYyk7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2ODE9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2ODctXHRcdTAwMjZhdHRyX3JlbW90ZV9wb3J0LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2ODg6XHRcdTAwMjZhdHRyX2xvY2FsX2lwLFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE2ODk6XHRcdTAwMjZhdHRyX3JlbW90ZV9pcCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjkwLVx0XHUwMDI2YXR0cl9sb2NhbF9tYWMsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwNzA9c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA4MC1cdHVkcGgtXHUwMDNlY2hlY2sgPSAwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwODE6XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDgyOlx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDgzOlx0XHRcdFx0XHQgICAgICBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42LFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODQtXHRcdFx0XHRcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDg2LVx0ZWxzZVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwODc6XHRcdHVkcGgtXHUwMDNlY2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYyhudC1cdTAwM2Vsb2NhbF9pcC5pcCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDg4Olx0XHRcdFx0XHRcdG50LVx1MDAzZXJlbW90ZV9pcC5pcCxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDg5LVx0XHRcdFx0XHRcdHVkcF9sZW4sIElQUFJPVE9fVURQLFxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTEzPXN0YXRpYyB2b2lkIHB1c2hfZXRoKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjEtXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfZGVzdCwgbnQtXHUwMDNlcmVtb3RlX21hYyk7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjEyMjpcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjMtXHRcdGV0aC1cdTAwM2VoX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMjg9c3RhdGljIHZvaWQgcHVzaF9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNDktXHRpcGgtXHUwMDNlY2hlY2sgPSAwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTA6XHRwdXRfdW5hbGlnbmVkKG50LVx1MDAzZWxvY2FsX2lwLmlwLCBcdTAwMjZpcGgtXHUwMDNlc2FkZHIpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTE6XHRwdXRfdW5hbGlnbmVkKG50LVx1MDAzZXJlbW90ZV9pcC5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUyLVx0aXBoLVx1MDAzZWNoZWNrID0gaXBfZmFzdF9jc3VtKCh1bnNpZ25lZCBjaGFyICopaXBoLCBpcGgtXHUwMDNlaWhsKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1Nj1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3My1cdGlwNmgtXHUwMDNlaG9wX2xpbWl0ID0gMzI7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3NDpcdGlwNmgtXHUwMDNlc2FkZHIgPSBudC1cdTAwM2Vsb2NhbF9pcC5pbjY7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE3NTpcdGlwNmgtXHUwMDNlZGFkZHIgPSBudC1cdTAwM2VyZW1vdGVfaXAuaW42O1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzYtXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxODA9c3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE5MC1cdHVkcF9sZW4gPSBsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxOTE6XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTkyLVx0XHRpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMDYtXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMDc6XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjA4LVx0XHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUzMz1zdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTU0LVx0XHQqZGVsaW0gPSAwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1NTU6XHRcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCkgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU1Ni1cdFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU5Ny1cdCpkZWxpbSA9IDA7XG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjU5ODpcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1OTktXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2MDA6XHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAxOlx0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MDItXHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQzOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSYjMzk7bSBsb29raW5nIGludG8gcmVnYXJkaW5nIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgOgoKKipEaXNzZWN0aW5nIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCBhbmQgVGFyZ2V0IEVuYWJsZW1lbnQqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAg4oCTIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0YXJnZXQgZW5hYmxlbWVudCB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgc2VlbXMgdG8gYmUgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGNyaXRpY2FsIHNlY3Rpb24gZnJvbSBsaW5lIDQ4MCB0byA1NzUuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGlzIGNvZGUgY2h1bmsgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRhcmdldCBmb3IgdGhlIGNvbnNvbGUgaXMgc2V0IHVwIGFuZCBhY3RpdmF0ZWQgdmlhIHRoZSBuZXRwb2xsIG1lY2hhbmlzbS4gSXQmIzM5O3MgbGlrZWx5IGluIHRoaXMgc2VjdGlvbiBJJiMzOTtsbCBmaW5kIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgd2hlcmUgYW5kIGhvdyBjb25zb2xlIG1lc3NhZ2VzIGFyZSB1bHRpbWF0ZWx5IHJvdXRlZCwgYW5kIHdoYXQgdHJpZ2dlcnMgdGhhdCByZWRpcmVjdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGFsbG93IG1lIHRvIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGEga2V5IGVsZW1lbnQgb2YgbmV0Y29uc29sZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDg1Olx0XG4gNDg2Olx0c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbiA0ODc6XHR7XG4gNDg4Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zO1xuIDQ4OTpcdFx0Y2hhciBidWZbTUFDX0FERFJfU1RSX0xFTiAmIzQzOyAxXTtcbiA0OTA6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gTlVMTDtcbiA0OTE6XHRcdHN0cnVjdCBuZXRwb2xsICpucCA9IFx1MDAyNm50LVx1MDAzZW5wO1xuIDQ5MjpcdFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIDQ5MzpcdFx0aW50IGVycjtcbiA0OTQ6XHRcbiA0OTU6XHRcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuIDQ5NjpcdFx0XHRucF9lcnIobnAsIFwmIzM0O3JlbW90ZSBJUCBhZGRyZXNzIG5vdCBjb25maWd1cmVkLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG4gNDk3Olx0XHRcdHJldHVybiAtRURFU1RBRERSUkVRO1xuIDQ5ODpcdFx0fVxuIDQ5OTpcdFxuIDUwMDpcdFx0aWYgKG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXHUwMDI2XHUwMDI2XG4gNTAxOlx0XHQgICAgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcbiA1MDI6XHRcdFx0bnBfZXJyKG5wLCBcJiMzNDtsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcblwmIzM0Oyk7XG4gNTAzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUwNDpcdFx0fVxuIDUwNTpcdFxuIDUwNjpcdFx0cnRubF9sb2NrKCk7XG4gNTA3Olx0XHRpZiAobnAtXHUwMDNlZGV2X25hbWVbMF0pXG4gNTA4Olx0XHRcdG5kZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIG5wLVx1MDAzZWRldl9uYW1lKTtcbiA1MDk6XHRcdGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobnAtXHUwMDNlZGV2X21hYykpXG4gNTEwOlx0XHRcdG5kZXYgPSBkZXZfZ2V0Ynlod2FkZHIobmV0LCBBUlBIUkRfRVRIRVIsIG5wLVx1MDAzZWRldl9tYWMpO1xuIDUxMTpcdFxuIDUxMjpcdFx0aWYgKCFuZGV2KSB7XG4gNTEzOlx0XHRcdG5wX2VycihucCwgXCYjMzQ7JXMgZG9lc24mIzM5O3QgZXhpc3QsIGFib3J0aW5nXFxuXCYjMzQ7LFxuIDUxNDpcdFx0XHQgICAgICAgbmV0Y29uc19lZ3Jlc3NfZGV2KG5wLCBidWYsIHNpemVvZihidWYpKSk7XG4gNTE1Olx0XHRcdGVyciA9IC1FTk9ERVY7XG4gNTE2Olx0XHRcdGdvdG8gdW5sb2NrO1xuIDUxNzpcdFx0fVxuIDUxODpcdFx0bmV0ZGV2X2hvbGQobmRldiwgXHUwMDI2bnAtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuIDUxOTpcdFxuIDUyMDpcdFx0aWYgKG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldChuZGV2KSkge1xuIDUyMTpcdFx0XHRucF9lcnIobnAsIFwmIzM0OyVzIGlzIGEgc2xhdmUgZGV2aWNlLCBhYm9ydGluZ1xcblwmIzM0OyxcbiA1MjI6XHRcdFx0ICAgICAgIG5ldGNvbnNfZWdyZXNzX2RldihucCwgYnVmLCBzaXplb2YoYnVmKSkpO1xuIDUyMzpcdFx0XHRlcnIgPSAtRUJVU1k7XG4gNTI0Olx0XHRcdGdvdG8gcHV0O1xuIDUyNTpcdFx0fVxuIDUyNjpcdFxuIDUyNzpcdFx0aWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XG4gNTI4Olx0XHRcdG5wX2luZm8obnAsIFwmIzM0O2RldmljZSAlcyBub3QgdXAgeWV0LCBmb3JjaW5nIGl0XFxuXCYjMzQ7LFxuIDUyOTpcdFx0XHRcdG5ldGNvbnNfZWdyZXNzX2RldihucCwgYnVmLCBzaXplb2YoYnVmKSkpO1xuIDUzMDpcdFxuIDUzMTpcdFx0XHRlcnIgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcbiA1MzI6XHRcdFx0aWYgKGVycikge1xuIDUzMzpcdFx0XHRcdG5wX2VycihucCwgXCYjMzQ7ZmFpbGVkIHRvIG9wZW4gJXNcXG5cJiMzNDssIG5kZXYtXHUwMDNlbmFtZSk7XG4gNTM0Olx0XHRcdFx0Z290byBwdXQ7XG4gNTM1Olx0XHRcdH1cbiA1MzY6XHRcbiA1Mzc6XHRcdFx0cnRubF91bmxvY2soKTtcbiA1Mzg6XHRcdFx0bmV0Y29uc193YWl0X2NhcnJpZXIobnAsIG5kZXYpO1xuIDUzOTpcdFx0XHRydG5sX2xvY2soKTtcbiA1NDA6XHRcdH1cbiA1NDE6XHRcbiA1NDI6XHRcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XG4gNTQzOlx0XHRcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIDU0NDpcdFx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTtcbiA1NDU6XHRcdFx0ZWxzZVxuIDU0NjpcdFx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbiA1NDc6XHRcdFx0aWYgKGVycilcbiA1NDg6XHRcdFx0XHRnb3RvIHB1dDtcbiA1NDk6XHRcdFx0aXBfb3ZlcndyaXR0ZW4gPSB0cnVlO1xuIDU1MDpcdFx0fVxuIDU1MTpcdFxuIDU1MjpcdFx0ZXJyID0gX19uZXRwb2xsX3NldHVwKG5wLCBuZGV2KTtcbiA1NTM6XHRcdGlmIChlcnIpXG4gNTU0Olx0XHRcdGdvdG8gcHV0O1xuIDU1NTpcdFx0cnRubF91bmxvY2soKTtcbiA1NTY6XHRcbiA1NTc6XHRcdC8qIE1ha2Ugc3VyZSBhbGwgTkFQSSBwb2xscyB3aGljaCBzdGFydGVkIGJlZm9yZSBkZXYtXHUwMDNlbnBpbmZvXG4gNTU4Olx0XHQgKiB3YXMgdmlzaWJsZSBoYXZlIGV4aXRlZCBiZWZvcmUgd2Ugc3RhcnQgY2FsbGluZyBOQVBJIHBvbGwuXG4gNTU5Olx0XHQgKiBOQVBJIHNraXBzIGxvY2tpbmcgaWYgZGV2LVx1MDAzZW5waW5mbyBpcyBOVUxMLlxuIDU2MDpcdFx0ICovXG4gNTYxOlx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiA1NjI6XHRcbiA1NjM6XHRcdHJldHVybiAwO1xuIDU2NDpcdFxuIDU2NTpcdHB1dDpcbiA1NjY6XHRcdERFQlVHX05FVF9XQVJOX09OX09OQ0UobnAtXHUwMDNlZGV2KTtcbiA1Njc6XHRcdGlmIChpcF9vdmVyd3JpdHRlbilcbiA1Njg6XHRcdFx0bWVtc2V0KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLCAwLCBzaXplb2YobnQtXHUwMDNlbG9jYWxfaXApKTtcbiA1Njk6XHRcdG5ldGRldl9wdXQobmRldiwgXHUwMDI2bnAtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIDU3MDpcdHVubG9jazpcbiA1NzE6XHRcdHJ0bmxfdW5sb2NrKCk7XG4gNTcyOlx0XHRyZXR1cm4gZXJyO1xuIDU3MzpcdH1cbiA1NzQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZW5hYmxlZGAgRmxhZyBCZWhhdmlvcioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBgZW5hYmxlZGAgZmxhZyBhY3R1YWxseSBmdW5jdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQmIzM5O3Mgc2V0LCB1bnNldCwgb3IgbW9kaWZpZWQgZHVyaW5nIHJ1bnRpbWUuIFRoaXMgcmVxdWlyZXMgbWUgdG8gdGhvcm91Z2hseSBkaXNzZWN0IGl0cyBiZWhhdmlvciBpbiBhbGwgc3RhdGVzLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIGhvdyB0aGUgdmFyaWFibGUgaW5mbHVlbmNlcyB0aGUgb3ZlcmFsbCBwcm9ncmFtIGZsb3cuCgpTbywgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVhZCB0aGUgY29kZSB0aGF0IGludGVyYWN0cyB3aXRoIGBlbmFibGVkX3N0b3JlYCBhbmQgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljLCByb3VnaGx5IGFyb3VuZCBsaW5lcyAxMDEwIHRvIDExMTAuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcyBhbmQgaG93IHRoZXNlIHN0YXRlcyBwcm9wYWdhdGUgdGhyb3VnaG91dCB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAxMDpcdCAqIFRoZSB1c2VyIGlzIGV4cGVjdGVkIHRvIHNldCB0aGUgZGVzaXJlZCBwYXJhbWV0ZXJzIGZpcnN0ICh3aGljaFxuMTAxMTpcdCAqIHdvdWxkIGVuYWJsZSBoaW0gdG8gZHluYW1pY2FsbHkgYWRkIG5ldyBuZXRwb2xsIHRhcmdldHMgZm9yIG5ld1xuMTAxMjpcdCAqIG5ldHdvcmsgaW50ZXJmYWNlcyBhcyBhbmQgd2hlbiB0aGV5IGNvbWUgdXApLlxuMTAxMzpcdCAqL1xuMTAxNDpcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuMTAxNTpcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbjEwMTY6XHR7XG4xMDE3Olx0XHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuMTAxODpcdFx0Ym9vbCBlbmFibGVkLCBjdXJyZW50X2VuYWJsZWQ7XG4xMDE5Olx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuMTAyMDpcdFx0c3NpemVfdCByZXQ7XG4xMDIxOlx0XG4xMDIyOlx0XHRkeW5hbWljX25ldGNvbnNvbGVfbXV0ZXhfbG9jaygpO1xuMTAyMzpcdFx0cmV0ID0ga3N0cnRvYm9vbChidWYsIFx1MDAyNmVuYWJsZWQpO1xuMTAyNDpcdFx0aWYgKHJldClcbjEwMjU6XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTAyNjpcdFxuMTAyNzpcdFx0LyogV2hlbiB0aGUgdXNlciBleHBsaWNpdGx5IGVuYWJsZXMgb3IgZGlzYWJsZXMgYSB0YXJnZXQgdGhhdCBpc1xuMTAyODpcdFx0ICogY3VycmVudGx5IGRlYWN0aXZhdGVkLCByZXNldCBpdHMgc3RhdGUgdG8gZGlzYWJsZWQuIFRoZSBERUFDVElWQVRFRFxuMTAyOTpcdFx0ICogc3RhdGUgb25seSB0cmFja3MgaW50ZXJmYWNlLWRyaXZlbiBkZWFjdGl2YXRpb24gYW5kIHNob3VsZCBfbm90X1xuMTAzMDpcdFx0ICogcGVyc2lzdCB3aGVuIHRoZSB1c2VyIG1hbnVhbGx5IGNoYW5nZXMgdGhlIHRhcmdldCYjMzk7cyBlbmFibGVkIHN0YXRlLlxuMTAzMTpcdFx0ICovXG4xMDMyOlx0XHRpZiAobnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQpXG4xMDMzOlx0XHRcdG50LVx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XG4xMDM0Olx0XG4xMDM1Olx0XHRyZXQgPSAtRUlOVkFMO1xuMTAzNjpcdFx0Y3VycmVudF9lbmFibGVkID0gbnQtXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRDtcbjEwMzc6XHRcdGlmIChlbmFibGVkID09IGN1cnJlbnRfZW5hYmxlZCkge1xuMTAzODpcdFx0XHRwcl9pbmZvKFwmIzM0O25ldHdvcmsgbG9nZ2luZyBoYXMgYWxyZWFkeSAlc1xcblwmIzM0OyxcbjEwMzk6XHRcdFx0XHRjdXJyZW50X2VuYWJsZWQgPyBcJiMzNDtzdGFydGVkXCYjMzQ7IDogXCYjMzQ7c3RvcHBlZFwmIzM0Oyk7XG4xMDQwOlx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEwNDE6XHRcdH1cbjEwNDI6XHRcbjEwNDM6XHRcdGlmIChlbmFibGVkKSB7XHQvKiB0cnVlICovXG4xMDQ0Olx0XHRcdGlmIChudC1cdTAwM2VyZWxlYXNlIFx1MDAyNlx1MDAyNiAhbnQtXHUwMDNlZXh0ZW5kZWQpIHtcbjEwNDU6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7Tm90IGVuYWJsaW5nIG5ldGNvbnNvbGUuIFJlbGVhc2UgZmVhdHVyZSByZXF1aXJlcyBleHRlbmRlZCBsb2cgbWVzc2FnZVwmIzM0Oyk7XG4xMDQ2Olx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTA0NzpcdFx0XHR9XG4xMDQ4Olx0XG4xMDQ5Olx0XHRcdGlmIChudC1cdTAwM2VleHRlbmRlZCBcdTAwMjZcdTAwMjYgIWNvbnNvbGVfaXNfcmVnaXN0ZXJlZChcdTAwMjZuZXRjb25zb2xlX2V4dCkpIHtcbjEwNTA6XHRcdFx0XHRuZXRjb25zb2xlX2V4dC5mbGFncyB8PSBDT05fRU5BQkxFRDtcbjEwNTE6XHRcdFx0XHRyZWdpc3Rlcl9jb25zb2xlKFx1MDAyNm5ldGNvbnNvbGVfZXh0KTtcbjEwNTI6XHRcdFx0fVxuMTA1MzpcdFxuMTA1NDpcdFx0XHQvKiBVc2VyIG1pZ2h0IGJlIGVuYWJsaW5nIHRoZSBiYXNpYyBmb3JtYXQgdGFyZ2V0IGZvciB0aGUgdmVyeVxuMTA1NTpcdFx0XHQgKiBmaXJzdCB0aW1lLCBtYWtlIHN1cmUgdGhlIGNvbnNvbGUgaXMgcmVnaXN0ZXJlZC5cbjEwNTY6XHRcdFx0ICovXG4xMDU3Olx0XHRcdGlmICghbnQtXHUwMDNlZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFjb25zb2xlX2lzX3JlZ2lzdGVyZWQoXHUwMDI2bmV0Y29uc29sZSkpIHtcbjEwNTg6XHRcdFx0XHRuZXRjb25zb2xlLmZsYWdzIHw9IENPTl9FTkFCTEVEO1xuMTA1OTpcdFx0XHRcdHJlZ2lzdGVyX2NvbnNvbGUoXHUwMDI2bmV0Y29uc29sZSk7XG4xMDYwOlx0XHRcdH1cbjEwNjE6XHRcbjEwNjI6XHRcdFx0LypcbjEwNjM6XHRcdFx0ICogU2tpcCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKCkgLS0gYWxsIHRoZSBhdHRyaWJ1dGVzIGFyZVxuMTA2NDpcdFx0XHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxuMTA2NTpcdFx0XHQgKi9cbjEwNjY6XHRcdFx0bmV0Y29uc29sZV9wcmludF9iYW5uZXIobnQpO1xuMTA2NzpcdFxuMTA2ODpcdFx0XHQvKiBJbml0aWFsaXNlIHRoZSBza2IgcG9vbCBiZWZvcmUgbmV0cG9sbF9zZXR1cCgpIHNvIHRoZSBwb29sXG4xMDY5Olx0XHRcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZSB0b1xuMTA3MDpcdFx0XHQgKiB0YXJnZXRfbGlzdCB3YWxrZXJzIChuZXRjb25zb2xlX25ldGRldl9ldmVudCksIHdoaWNoIHdvdWxkXG4xMDcxOlx0XHRcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXG4xMDcyOlx0XHRcdCAqIHN0YXRlLlxuMTA3MzpcdFx0XHQgKi9cbjEwNzQ6XHRcdFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcbjEwNzU6XHRcbjEwNzY6XHRcdFx0cmV0ID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcbjEwNzc6XHRcdFx0aWYgKHJldCkge1xuMTA3ODpcdFx0XHRcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xuMTA3OTpcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEwODA6XHRcdFx0fVxuMTA4MTpcdFxuMTA4MjpcdFx0XHRudC1cdTAwM2VzdGF0ZSA9IFNUQVRFX0VOQUJMRUQ7XG4xMDgzOlx0XHRcdHByX2luZm8oXCYjMzQ7bmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcXG5cJiMzNDspO1xuMTA4NDpcdFx0fSBlbHNlIHtcdC8qIGZhbHNlICovXG4xMDg1Olx0XHRcdC8qIFdlIG5lZWQgdG8gZGlzYWJsZSB0aGUgbmV0Y29uc29sZSBiZWZvcmUgY2xlYW5pbmcgaXQgdXBcbjEwODY6XHRcdFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXG4xMDg3Olx0XHRcdCAqIG50LVx1MDAzZW5wLmRldiA9PSBOVUxMIGFuZCBudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEXG4xMDg4Olx0XHRcdCAqL1xuMTA4OTpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgY29kZToKCioqRGl2aW5nIGludG8gdGhlIElQIEFkZHJlc3MgVXNhZ2UqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gaG93IGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIGFyZSBiZWluZyB1c2VkIHdpdGhpbiB0aGlzIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBsaWtlbHkgc3VzcGVjdHMg4oCTIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBJUCBwYWNrZXQgY29uc3RydWN0aW9uIGFuZCB0cmFuc21pc3Npb24uIE15IGd1dCB0ZWxscyBtZSB0byBsb29rIGF0IGBuZXRjb25zb2xlX3dyaXRlYCwgYHB1c2hfaXB2NGAsIGBwdXNoX2lwdjZgLCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB3aGVyZSBJUCBhZGRyZXNzIGluZm9ybWF0aW9uIHdvdWxkIGJlIGNyaXRpY2FsLiBJIGV4cGVjdCB0aGV5IGFyZSBlaXRoZXIgcmVhZGluZyB0aGUgSVAgZnJvbSBhbiBhZGRyZXNzLCBvciBpbmplY3RpbmcgaXQgaW50byB0aGUgSVAgaGVhZGVycy4KClRvIHN0YXJ0LCBJJiMzOTtsbCBmb2N1cyBvbiBgbmV0Y29uc29sZS5jYCwgc2luY2UgdGhhdOKAmXMgcHJvYmFibHkgdGhlIGZpcnN0IHRoaW5nIHRvIGludmVzdGlnYXRlLiBJJiMzOTtsbCB6ZXJvIGluIG9uIGxpbmVzIDIxMjUgdG8gMjIyMCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBzcGVjaWZpYyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgSVAgYWRkcmVzc2VzLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIHJlbGF0ZWQgdG8gaG93IG5ldHdvcmsgY29uc29sZSBvdXRwdXQgaXMgaGFuZGxlZCBhbmQgY29uZmlndXJlZCwgd2hpY2ggY291bGQgaGVhdmlseSBpbmZsdWVuY2UgSVAgYWRkcmVzcyB1c2UuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9uZXRjb25zb2xlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxMjU6XHRcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG4yMTI2Olx0fVxuMjEyNzpcdFxuMjEyODpcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjEyOTpcdFx0XHQgICAgICBpbnQgbGVuKVxuMjEzMDpcdHtcbjIxMzE6XHRcdHN0YXRpYyBhdG9taWNfdCBpcF9pZGVudDtcbjIxMzI6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuMjEzMzpcdFx0aW50IGlwX2xlbjtcbjIxMzQ6XHRcbjIxMzU6XHRcdGlwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcikgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4yMTM2Olx0XG4yMTM3Olx0XHRza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbjIxMzg6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuMjEzOTpcdFx0aXBoID0gaXBfaGRyKHNrYik7XG4yMTQwOlx0XG4yMTQxOlx0XHQvKiBpcGgtXHUwMDNldmVyc2lvbiA9IDQ7IGlwaC1cdTAwM2VpaGwgPSA1OyAqL1xuMjE0MjpcdFx0Kih1bnNpZ25lZCBjaGFyICopaXBoID0gMHg0NTtcbjIxNDM6XHRcdGlwaC1cdTAwM2V0b3MgPSAwO1xuMjE0NDpcdFx0cHV0X3VuYWxpZ25lZChodG9ucyhpcF9sZW4pLCBcdTAwMjZpcGgtXHUwMDNldG90X2xlbik7XG4yMTQ1Olx0XHRpcGgtXHUwMDNlaWQgPSBodG9ucyhhdG9taWNfaW5jX3JldHVybihcdTAwMjZpcF9pZGVudCkpO1xuMjE0NjpcdFx0aXBoLVx1MDAzZWZyYWdfb2ZmID0gMDtcbjIxNDc6XHRcdGlwaC1cdTAwM2V0dGwgPSA2NDtcbjIxNDg6XHRcdGlwaC1cdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fVURQO1xuMjE0OTpcdFx0aXBoLVx1MDAzZWNoZWNrID0gMDtcbjIxNTA6XHRcdHB1dF91bmFsaWduZWQobnQtXHUwMDNlbG9jYWxfaXAuaXAsIFx1MDAyNmlwaC1cdTAwM2VzYWRkcik7XG4yMTUxOlx0XHRwdXRfdW5hbGlnbmVkKG50LVx1MDAzZXJlbW90ZV9pcC5pcCwgXHUwMDI2aXBoLVx1MDAzZWRhZGRyKTtcbjIxNTI6XHRcdGlwaC1cdTAwM2VjaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLVx1MDAzZWlobCk7XG4yMTUzOlx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4yMTU0Olx0fVxuMjE1NTpcdFxuMjE1NjpcdHN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuMjE1NzpcdFx0XHQgICAgICBpbnQgbGVuKVxuMjE1ODpcdHtcbjIxNTk6XHRcdHN0cnVjdCBpcHY2aGRyICppcDZoO1xuMjE2MDpcdFxuMjE2MTpcdFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbjIxNjI6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuMjE2MzpcdFx0aXA2aCA9IGlwdjZfaGRyKHNrYik7XG4yMTY0Olx0XG4yMTY1Olx0XHQvKiBpcDZoLVx1MDAzZXZlcnNpb24gPSA2OyBpcDZoLVx1MDAzZXByaW9yaXR5ID0gMDsgKi9cbjIxNjY6XHRcdCoodW5zaWduZWQgY2hhciAqKWlwNmggPSAweDYwO1xuMjE2NzpcdFx0aXA2aC1cdTAwM2VmbG93X2xibFswXSA9IDA7XG4yMTY4Olx0XHRpcDZoLVx1MDAzZWZsb3dfbGJsWzFdID0gMDtcbjIxNjk6XHRcdGlwNmgtXHUwMDNlZmxvd19sYmxbMl0gPSAwO1xuMjE3MDpcdFxuMjE3MTpcdFx0aXA2aC1cdTAwM2VwYXlsb2FkX2xlbiA9IGh0b25zKHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmIzQzOyBsZW4pO1xuMjE3MjpcdFx0aXA2aC1cdTAwM2VuZXh0aGRyID0gSVBQUk9UT19VRFA7XG4yMTczOlx0XHRpcDZoLVx1MDAzZWhvcF9saW1pdCA9IDMyO1xuMjE3NDpcdFx0aXA2aC1cdTAwM2VzYWRkciA9IG50LVx1MDAzZWxvY2FsX2lwLmluNjtcbjIxNzU6XHRcdGlwNmgtXHUwMDNlZGFkZHIgPSBudC1cdTAwM2VyZW1vdGVfaXAuaW42O1xuMjE3NjpcdFxuMjE3NzpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4yMTc4Olx0fVxuMjE3OTpcdFxuMjE4MDpcdHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXG4yMTgxOlx0XHRcdFx0ICAgIGludCBsZW4pXG4yMTgyOlx0e1xuMjE4MzpcdFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4yMTg0Olx0XHRpbnQgdG90YWxfbGVuLCBpcF9sZW4sIHVkcF9sZW47XG4yMTg1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMjE4NjpcdFxuMjE4NzpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcbjIxODg6XHRcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuMjE4OTpcdFxuMjE5MDpcdFx0dWRwX2xlbiA9IGxlbiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4yMTkxOlx0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbjIxOTI6XHRcdFx0aXBfbGVuID0gdWRwX2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuMjE5MzpcdFx0ZWxzZVxuMjE5NDpcdFx0XHRpcF9sZW4gPSB1ZHBfbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xuMjE5NTpcdFxuMjE5NjpcdFx0dG90YWxfbGVuID0gaXBfbGVuICYjNDM7IExMX1JFU0VSVkVEX1NQQUNFKG5wLVx1MDAzZWRldik7XG4yMTk3Olx0XG4yMTk4Olx0XHRza2IgPSBmaW5kX3NrYihudCwgdG90YWxfbGVuICYjNDM7IG5wLVx1MDAzZWRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb20sXG4yMTk5Olx0XHRcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xuMjIwMDpcdFx0aWYgKCFza2IpXG4yMjAxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjIwMjpcdFxuMjIwMzpcdFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XG4yMjA0Olx0XHRza2JfcHV0KHNrYiwgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAyMzYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaDogQSBEZWVwIERpdmUgaW50byBBZGRyZXNzIEZhbWlseSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYG5ldGNvbnNvbGVgIHN1YnN5c3RlbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7VGhpcyBpcyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGhvdyBJUCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGFkZHJlc3MgZmFtaWxpZXMgYW5kIHRoZSBjb25jZXB0IG9mIGFuICYjMzk7dW5zZXQmIzM5OyBJUC4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIHRob3JvdWdobHkuCgpGaXJzdCwgSSBzZWUgdGhlIGNvcmUgY2hhbmdlOiB3ZSYjMzk7cmUgbW92aW5nIGF3YXkgZnJvbSB0aGUgb2xkIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCB0aGUgYm9vbGVhbiBgaXB2NmAgZmxhZyB3aXRoaW4gdGhlIGBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0LCBhbmQgaW5zdGVhZCB1c2luZyBhIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgd2l0aCBhIGBmYW1pbHlgIG1lbWJlciAoYW4gYEFGXypgIHZhbHVlKSBhbmQgYSB1bmlvbiBmb3IgdGhlIElQIGFkZHJlc3MgaXRzZWxmIChlaXRoZXIgSVB2NCBvciBJUHY2KS4gIFRoZSBvbGQgYXBwcm9hY2gsIHdoZXJlIGAwLjAuMC4wYCB3YXMgdHJlYXRlZCBhcyAmIzM5O3Vuc2V0JiMzOTssIHNlZW1zIGNsdW5reS4gIFRoaXMgbmV3IHN0cnVjdHVyZSBhbGxvd3MgZm9yIGEgbW9yZSBleHBsaWNpdCBhbmQgY2xlYW5lciB3YXkgdG8gcmVwcmVzZW50IGFuIHVuc2V0IGFkZHJlc3MgdmlhIGBBRl9VTlNQRUNgLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSBwYXRjaCBhbmQgc2VlIGhvdyB0aGlzIG5ldyBzdHJ1Y3R1cmUgaXMgaW50ZWdyYXRlZDoKCjEuICAqKmBuZXRjb25zX3Rha2VfaXB2NmAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NGA6KiogVGhlc2UgZnVuY3Rpb25zIG5vdyBleHBsaWNpdGx5IHNldCB0aGUgYGZhbWlseWAgbWVtYmVyIHRvIGBBRl9JTkVUNmAgb3IgYEFGX0lORVRgLCByZXNwZWN0aXZlbHksIGFsb25nc2lkZSB0aGUgYWRkcmVzcyB2YWx1ZSBpdHNlbGYuIFRoaXMgaXMgbXVjaCBjbGVhcmVyIHRoYW4gdGhlIGltcGxpY2l0IGJlaGF2aW9yIGJlZm9yZS4KCjIuICAqKmBuZXRjb25zX25ldHBvbGxfc2V0dXBgOioqIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gIFdlIGhhdmUgc2V2ZXJhbCBjaGVja3MgaGVyZS4gIElmIHRoZSByZW1vdGUgSVAgaXMgdW5zZXQsIGl0JiMzOTtzIGFuIGVycm9yLiBJZiB0aGUgbG9jYWwgSVAgaXMgc2V0LCB0aGVyZSYjMzk7cyBhIGNoZWNrIHRvIGVuc3VyZSBpdCBoYXMgdGhlIHNhbWUgZmFtaWx5IGFzIHRoZSByZW1vdGUgSVAuIElmIHRoZSBsb2NhbCBJUCAqaXMqIHVuc2V0LCB0aGUgY29kZSBub3cgKmV4cGxpY2l0bHkqIHRha2VzIHRoZSBJUHY2IG9yIElQdjQgYWRkcmVzcyBkZXBlbmRpbmcgb24gdGhlIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlseS4gVGhlIGBtZW1zZXRgIGlmIGFuIGVycm9yIG9jY3VycyBzZWVtcyBhIGxpdHRsZSBoZWF2eSBoYW5kZWQuCgozLiAgKipgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgOioqICBUaGlzIGZ1bmN0aW9uIG5vdyBjb3JyZWN0bHkgcHJpbnRzIHRoZSBhcHByb3ByaWF0ZSBJUCBhZGRyZXNzIHR5cGUgYmFzZWQgb24gdGhlIGBmYW1pbHlgIG1lbWJlciwgYmUgaXQgSVB2NCwgSVB2Niwgb3Igbm90aGluZy4KCjQuICAqKmBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgOioqICBUaGlzIHVzZXMgYGluNF9wdG9uYCBhbmQgYGluNl9wdG9uYCwgdG8gcGFyc2UgYWRkcmVzc2VzIGFuZCBzZXQgdGhlIGBmYW1pbHlgIG1lbWJlciBhcHByb3ByaWF0ZWx5LiBJdCYjMzk7cyBhIGNsZWFuIHdheSB0byBoYW5kbGUgdGhlIGlucHV0IGFuZCBjb3JyZWN0bHkgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4KCjUuICAqKmBsb2NhbF9pcF9zaG93YCAvIGByZW1vdGVfaXBfc2hvd2A6KiogIFRoZXNlIHVzZSB0aGUgYGZhbWlseWAgbWVtYmVyIHRvIGZvcm1hdCB0aGUgb3V0cHV0LiBBIG5lYXQgaW1wbGVtZW50YXRpb24uCgo2LiAgKipgbG9jYWxfaXBfc3RvcmVgIC8gYHJlbW90ZV9pcF9zdG9yZWA6KiogVGhlc2UgZnVuY3Rpb25zIHBhc3MgYSBwb2ludGVyIHRvIGBpbmV0X2FkZHJgIHRvIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCB3aGljaCBpcyBleGFjdGx5IGhvdyBpdCBzaG91bGQgd29yay4KCjcuICAqKlBhY2tldCBUcmFuc21pc3Npb24gKGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGBuZXRwb2xsX3NlbmRfdWRwYCk6KiogSGVyZSwgdGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBgaXB2NmAgYm9vbGVhbiBmbGFnIHdpdGggYSBjaGVjayBhZ2FpbnN0IGBudC0mZ3Q7cmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNmAuIFRoaXMgaXMgYSBtdWNoIG1vcmUgcm9idXN0IGFuZCB1bmRlcnN0YW5kYWJsZSB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBJUCB2ZXJzaW9uLgoKOC4gICoqYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgOioqICBUaGlzIHByb2JhYmx5IGRlYWxzIHdpdGggdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoaXMgc2hvdWxkIGJlIGZpbmUuCgo5LiAgKipIZWFkZXIgQ2xlYW51cDoqKiBUaGUgcmVtb3ZhbCBvZiBgdW5pb24gaW5ldF9hZGRyYCBmcm9tIHRoZSBoZWFkZXIgZmlsZSBjbGVhbnMgdXAgdGhlIHN0cnVjdHVyZS4KCk5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRvIGEgZnVsbCBjb2RlLWJhc2Ugc2VhcmNoIHRvIGlkZW50aWZ5IGFueSBvdGhlciBpbnN0YW5jZXMgb2YgYHVuaW9uIGluZXRfYWRkcmAgdG8gbWFrZSBzdXJlIG5vdGhpbmcgd2FzIG1pc3NlZC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBmdWxseSBzZWxmLWNvbnRhaW5lZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzdWJ0bGUgcmVncmVzc2lvbnMgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwuICBJJiMzOTtsbCBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgdW5pb24gaW5ldF9hZGRyYCB0byBiZSB0aG9yb3VnaC4KCk92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIHdlbGwtdGhvdWdodC1vdXQgaW1wcm92ZW1lbnQsIG1ha2luZyBhZGRyZXNzIGZhbWlseSBoYW5kbGluZyBtdWNoIGNsZWFyZXIgYW5kIG1vcmUgZXhwbGljaXQgd2l0aGluIHRoZSBgbmV0Y29uc29sZWAgc3Vic3lzdGVtLiAgVGhlIHJlcGxhY2VtZW50IG9mIHRoZSBvbGQgbWV0aG9kIHdpdGggdGhlIG5ldyBgc3RydWN0IGluZXRfYWRkcmAgc2VlbXMgYSBnb29kIG1vdmUuIEkgYW0gdmVyeSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgcGVyZm9ybWFuY2UgaW1wYWN0IHdpdGggdGhlIGNvZGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bmlvbiBpbmV0X2FkZHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIwOQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgTGFuZHNjYXBlIG9mIGBzdHJ1Y3QgaW5ldF9hZGRyYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBzdHJ1Y3QgaW5ldF9hZGRyYCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLiBJIHdhbnQgdG8gaWRlbnRpZnkgYWxsIHRoZSBpbnN0YW5jZXMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gaXRzIHJvbGUgaW4gdmFyaW91cyBuZXR3b3JrIG9wZXJhdGlvbnMsIGRhdGEgc3RydWN0dXJlcywgYW5kIGFueSBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciwgZnJhbmtseSwgdnVsbmVyYWJpbGl0aWVzLiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgY29udGV4dHMsIGxpa2UgaG93IGl0JiMzOTtzIHRyZWF0ZWQgaW4ga2VybmVsIG5ldHdvcmtpbmcgY29kZSB2ZXJzdXMgdXNlci1zcGFjZSBsaWJyYXJpZXMgdGhhdCBpbnRlcmZhY2Ugd2l0aCBpdC4gQXJlIHRoZXJlIGFueSBjb2RpbmcgcGF0dGVybnMgdGhhdCBhcmUgY29uY2VybmluZz8gQW55IGluY29uc2lzdGVuY2llcyBpbiBob3cgaXQmIzM5O3MgaGFuZGxlZCwgd2hpY2ggY291bGQgbGVhZCB0byBzdWJ0bGUgYnVncyBkb3duIHRoZSBsaW5lPyBJIGFsc28gd2FudCB0byBtYWtlIGEgbm90ZSBvZiB3aGVyZSBpdCBpcyB1c2VkLiBJJiMzOTttIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQ6IGFyZSB0aGVyZSBuZXdlciwgYmV0dGVyIGFsdGVybmF0aXZlcyBlbWVyZ2luZyAoZS5nLiwgYGluX2FkZHJgLCBgaW42X2FkZHJgLCBldGMuKSB0aGF0IGFyZSBtb3JlIG1vZGVybiwgc2FmZXIsIG9yIHNpbXBseSBtb3JlIGVmZmljaWVudCBpbiBjZXJ0YWluIHNjZW5hcmlvcz8gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoaXMgZm91bmRhdGlvbmFsIHN0cnVjdHVyZSBpcyBiZWluZyB1c2VkIG9wdGltYWxseSwgYW5kIEkgbmVlZCB0byBiZSBwcm9hY3RpdmUgYWJvdXQgYW55IHBvdGVudGlhbCBpc3N1ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaW5ldF9hZGRyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDg9ZW51bSB0YXJnZXRfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTMtXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTU0OnN0cnVjdCBpbmV0X2FkZHIge1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NS1cdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXG4tLVxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxOD1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzUtXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzY6XHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNy1cdHUxNlx0XHRcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xuLS1cbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MjU9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcbi0tXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzUwLSAqL1xuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc1MTpzdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCBpbmV0X2FkZHIgKmFkZHIpXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzUyLXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYz01NT1lbnVtIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYy01OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jOjYwOnN0cnVjdCBpbmV0X2FkZHIge1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNjEtXHRjb25zdCBjaGFyICppcDtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYz02NT1zdHJ1Y3QgdGVzdCB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNzAtXHRpbnQgc290eXBlO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmM6NzE6XHRzdHJ1Y3QgaW5ldF9hZGRyIGNvbm5lY3RfdG87XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYzo3MjpcdHN0cnVjdCBpbmV0X2FkZHIgbGlzdGVuX2F0O1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNzMtXHRlbnVtIHNlcnZlciBhY2NlcHRfb247XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmM9MTE1MT1zdHJ1Y3QgdGVzdF9tdWx0aV9wcm9nIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYy0xMTU3LVx0aW50IGV4cGVjdF9lcnJubztcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jOjExNTg6XHRzdHJ1Y3QgaW5ldF9hZGRyIGxpc3Rlbl9hdDtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jLTExNTktfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyMDUKCQkJCQkJCW91dHB1dDogMzc3CgkJCQkJCQl0aG91Z2h0czogNTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBTYWZldHkgYW5kIFNhbml0aXplciBFdmFsdWF0aW9uOiBQYXRjaCBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gZXZhbHVhdGluZyB0aGlzIHBhdGNoIGZvciBtZW1vcnkgc2FmZXR5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIHBvdGVudGlhbCBsZWFrcyB2aWEga2VybmVsLXRvLXVzZXIgc3BhY2UgaW50ZXJhY3Rpb25zLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gcG90ZW50aWFsIHJpc2tzIGFuZCB0aGUgcmVsZXZhbnQgc2FuaXRpemVyIGNoZWNrcy4KCkZpcnN0LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIHRoZSBLTVNBTiBjcml0ZXJpYS4KCjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIEkmIzM5O20gZXhhbWluaW5nIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGxlYWsgdG8gdXNlcnNwYWNlLiBUaGUgYHN5c2ZzX2VtaXRgIHVzYWdlIGluIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YCBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIFNwZWNpZmljYWxseSwgdGhlIGAlcEk2Y1xuYCwgYCVwSTRcbmAsIGFuZCBgXG5gIGZvcm1hdHMuIEhvd2V2ZXIsIHRoZSB0YXJnZXQgc3RydWN0dXJlIGBudGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLCB6ZXJvaW5nIHRoZSBlbnRpcmUgc3RydWN0dXJlLiBUaGUgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gYGxvY2FsX2lwLmZhbWlseWAgbG9va3Mgc2FmZS4gV2hlbiBgQUZfVU5TUEVDYCwgbm90aGluZyBpcyBwcmludGVkIHRvIHVzZXIgc3BhY2UuIFdoZW4gYEFGX0lORVQ2YCwgdGhlIGBudC0mZ3Q7bG9jYWxfaXAuaW42YCBmaWVsZCBpcyBmaWxsZWQgZnJvbSBgaW42X3B0b25gIG9yIGBpZnAtJmd0O2FkZHJgLiBXaGVuIGBBRl9JTkVUYCwgYG50LSZndDtsb2NhbF9pcC5pcGAgaXMgZmlsbGVkIGZyb20gYGluNF9wdG9uYCBvciBgaWZhLSZndDtpZmFfbG9jYWxgLiBBbGwgbG9va3Mgc2FmZSBmcm9tIHRoaXMgcGVyc3BlY3RpdmUuCgoyLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBUaGUgY29kZSYjMzk7cyBjb25kaXRpb25hbCBicmFuY2hlcyBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZSBgbnRgIHN0cnVjdHVyZSYjMzk7cyBgZmFtaWx5YCBmaWVsZCBpcyBpbml0aWFsaXplZCB0byBgMGAgYnkgYGt6YWxsb2Nfb2JqYCwgYW5kIHRoZSBhZGRyZXNzIGJ5dGVzIGFyZSB6ZXJvZWQuIFRoZSBjb2RlIGNsZWFubHkgY2hlY2tzIGZvciB0aGUgYEFGX1VOU1BFQ2AsIGBBRl9JTkVUNmAsIG9yIElQdjQgY2FzZXMsIGVuc3VyaW5nIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgYGZhbWlseWAgYXBwcm9wcmlhdGVseSBiZWZvcmUgYW55IHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGFjY2VzcywgYW5kIHRoaXMgYXBwZWFycyBzYWZlLgoKMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM6KiogSSBzZWUgbm8gaW5kaWNhdGlvbiB0aGF0IHRoZSBwYXRjaCBpcyBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBhbnkgcGFydGljdWxhcmx5IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgZmFjdG9yIGluIGxhdGVyIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgoKNC4gICoqQm91bmRzIENoZWNrcy9Mb2dpYzoqKiBUaGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiBib3VuZHMgY2hlY2sgaXNzdWVzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB3aXRoaW4gZXhpc3RpbmcgYnVmZmVycy4KCkdpdmVuIHRoaXMgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBjb2RlLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IHRoaXMgcGF0Y2ggKipkb2VzIG5vdCoqIGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGtlcm5lbC10by11c2VyIGluZm9ybWF0aW9uIGxlYWtzLiBBbGwgYWxsb2NhdGlvbnMgYXJlIHplcm9lZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgaW5wdXRzIGFyZSB2YWxpZGF0ZWQuIFRoZSBgaW40X3B0b25gIGFuZCBgaW42X3B0b25gIGZ1bmN0aW9ucyB3cml0ZSB0byB0aGUgcHJlY2lzZSBtZW1vcnkgbG9jYXRpb25zIGJlZm9yZSB0aGUgYGZhbWlseWAgZmllbGQgaXMgZXZlbiBhc3NpZ25lZC4gV2hlbiB1bnNldCwgYGZhbWlseWAgaXMgMCAoYEFGX1VOU1BFQ2ApLgoKVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gSSYjMzk7bGwgZmxhZyB0aGlzIGFzIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGUgcmF0aW9uYWxlIGFzIG91dGxpbmVkIGFib3ZlLiBUaGlzIGlzIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDAxOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxuXG5BbmFseXNpcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrOlxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cbjIuIFBhcnNpbmcgYW5kIHVwZGF0ZXM6IGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIHBvcHVsYXRlcyBgaXBgICh2aWEgYGluNF9wdG9uYCkgb3IgYGluNmAgKHZpYSBgaW42X3B0b25gKSBhbmQgc2V0cyBgZmFtaWx5YCBhY2NvcmRpbmdseSAoYEFGX0lORVRgIG9yIGBBRl9JTkVUNmApLiBXaGVuIGF1dG8tZGVyaXZlZCwgYG5ldGNvbnNfdGFrZV9pcHY0YCBhbmQgYG5ldGNvbnNfdGFrZV9pcHY2YCBmdWxseSBpbml0aWFsaXplIHRoZSBhZGRyZXNzIGFuZCBzZXQgYGZhbWlseWAuXG4zLiBVc2VyLXNwYWNlIG91dHB1dCAvIGluZm8gbGVha3M6IFN5c2ZzIGF0dHJpYnV0ZXMgYGxvY2FsX2lwX3Nob3dgIGFuZCBgcmVtb3RlX2lwX3Nob3dgIGVtaXQgZm9ybWF0dGVkIHN0cmluZ3MgYmFzZWQgb24gdGhlIHZlcmlmaWVkIGBmYW1pbHlgIGRpc2NyaW1pbmF0b3IgYW5kIHJlYWQgb25seSB0aGUgZnVsbHkgaW5pdGlhbGl6ZWQgYWRkcmVzcyB1bmlvbiBmaWVsZHMuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGxlYWtlZCB0byB1c2Vyc3BhY2UuXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5YCBhbmQgcmVhZCBwcm9wZXJseSBpbml0aWFsaXplZCBgaW42YCBvciBgaXBgIGZpZWxkcy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgaGFuZGxpbmcgaW4gbmV0Y29uc29sZSBieSBpbnRyb2R1Y2luZyBgc3RydWN0IGluZXRfYWRkcmAgd2l0aCBhbiBleHBsaWNpdCBgZmFtaWx5YCBmaWVsZCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBzZXBhcmF0ZSBib29sZWFuIGZsYWcgKGBpcHY2YCkgYW5kIGNoZWNraW5nIHdoZXRoZXIgYW4gYWRkcmVzcyBpcyB6ZXJvIHRvIGRldGVybWluZSBpZiBpdCB3YXMgdW5zZXQuXG5cbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6XG4xLiBPYmplY3QgYWxsb2NhdGlvbjogYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgKSBhcmUgemVyby1pbml0aWFsaXplZCAoYGZhbWlseWAgZGVmYXVsdHMgdG8gYDBgIC8gYEFGX1VOU1BFQ2ApLlxuMi4gUGFyc2luZyBhbmQgdXBkYXRlczogYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgcG9wdWxhdGVzIGBpcGAgKHZpYSBgaW40X3B0b25gKSBvciBgaW42YCAodmlhIGBpbjZfcHRvbmApIGFuZCBzZXRzIGBmYW1pbHlgIGFjY29yZGluZ2x5IChgQUZfSU5FVGAgb3IgYEFGX0lORVQ2YCkuIFdoZW4gYXV0by1kZXJpdmVkLCBgbmV0Y29uc190YWtlX2lwdjRgIGFuZCBgbmV0Y29uc190YWtlX2lwdjZgIGZ1bGx5IGluaXRpYWxpemUgdGhlIGFkZHJlc3MgYW5kIHNldCBgZmFtaWx5YC5cbjMuIFVzZXItc3BhY2Ugb3V0cHV0IC8gaW5mbyBsZWFrczogU3lzZnMgYXR0cmlidXRlcyBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AgZW1pdCBmb3JtYXR0ZWQgc3RyaW5ncyBiYXNlZCBvbiB0aGUgdmVyaWZpZWQgYGZhbWlseWAgZGlzY3JpbWluYXRvciBhbmQgcmVhZCBvbmx5IHRoZSBmdWxseSBpbml0aWFsaXplZCBhZGRyZXNzIHVuaW9uIGZpZWxkcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXJzcGFjZS5cbjQuIE5ldHdvcmsgcGFja2V0IGNvbnN0cnVjdGlvbjogUGFja2V0IGhlYWRlcnMgYW5kIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyBicmFuY2ggb24gYG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHlgIGFuZCByZWFkIHByb3Blcmx5IGluaXRpYWxpemVkIGBpbjZgIG9yIGBpcGAgZmllbGRzLlxuXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ4OjUxLjA2MDYzMDgyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MTM4OTkzNjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVENPTlNPTEVcIixcbiAgICBcIk5FVENPTlNPTEVfRFlOQU1JQ1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgICBcIm5ldHBvbGxfcGFyc2VfaXBfYWRkclwiLFxuICAgIFwibG9jYWxfaXBfc3RvcmVcIixcbiAgICBcInJlbW90ZV9pcF9zdG9yZVwiLFxuICAgIFwibG9jYWxfaXBfc2hvd1wiLFxuICAgIFwicmVtb3RlX2lwX3Nob3dcIixcbiAgICBcIm5ldHBvbGxfc2VuZF91ZHBcIixcbiAgICBcIm5ldGNvbnNfdGFrZV9pcHY0XCIsXG4gICAgXCJuZXRjb25zX3Rha2VfaXB2NlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgaGFuZGxpbmcgaW4gbmV0Y29uc29sZSBieSBpbnRyb2R1Y2luZyBgc3RydWN0IGluZXRfYWRkcmAgd2l0aCBhbiBleHBsaWNpdCBgZmFtaWx5YCBmaWVsZCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBzZXBhcmF0ZSBib29sZWFuIGZsYWcgKGBpcHY2YCkgYW5kIGNoZWNraW5nIHdoZXRoZXIgYW4gYWRkcmVzcyBpcyB6ZXJvIHRvIGRldGVybWluZSBpZiBpdCB3YXMgdW5zZXQuXFxuXFxuQW5hbHlzaXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlzazpcXG4xLiBPYmplY3QgYWxsb2NhdGlvbjogYHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldGAgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgZW5zdXJpbmcgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgKSBhcmUgemVyby1pbml0aWFsaXplZCAoYGZhbWlseWAgZGVmYXVsdHMgdG8gYDBgIC8gYEFGX1VOU1BFQ2ApLlxcbjIuIFBhcnNpbmcgYW5kIHVwZGF0ZXM6IGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIHBvcHVsYXRlcyBgaXBgICh2aWEgYGluNF9wdG9uYCkgb3IgYGluNmAgKHZpYSBgaW42X3B0b25gKSBhbmQgc2V0cyBgZmFtaWx5YCBhY2NvcmRpbmdseSAoYEFGX0lORVRgIG9yIGBBRl9JTkVUNmApLiBXaGVuIGF1dG8tZGVyaXZlZCwgYG5ldGNvbnNfdGFrZV9pcHY0YCBhbmQgYG5ldGNvbnNfdGFrZV9pcHY2YCBmdWxseSBpbml0aWFsaXplIHRoZSBhZGRyZXNzIGFuZCBzZXQgYGZhbWlseWAuXFxuMy4gVXNlci1zcGFjZSBvdXRwdXQgLyBpbmZvIGxlYWtzOiBTeXNmcyBhdHRyaWJ1dGVzIGBsb2NhbF9pcF9zaG93YCBhbmQgYHJlbW90ZV9pcF9zaG93YCBlbWl0IGZvcm1hdHRlZCBzdHJpbmdzIGJhc2VkIG9uIHRoZSB2ZXJpZmllZCBgZmFtaWx5YCBkaXNjcmltaW5hdG9yIGFuZCByZWFkIG9ubHkgdGhlIGZ1bGx5IGluaXRpYWxpemVkIGFkZHJlc3MgdW5pb24gZmllbGRzLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBsZWFrZWQgdG8gdXNlcnNwYWNlLlxcbjQuIE5ldHdvcmsgcGFja2V0IGNvbnN0cnVjdGlvbjogUGFja2V0IGhlYWRlcnMgYW5kIGNoZWNrc3VtIGNhbGN1bGF0aW9ucyBicmFuY2ggb24gYG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5YCBhbmQgcmVhZCBwcm9wZXJseSBpbml0aWFsaXplZCBgaW42YCBvciBgaXBgIGZpZWxkcy5cXG5cXG5TaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVhayByaXNrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDg6NTEuMDYwNjUxMDQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE3OTM5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyOWE5NjU1ZWNlMjVkOWEzZTJlYWI5ODg5YWRlNTI0MTQxMGI3MzI5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDUgMDE6NDg6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFxuaW5kZXggNGFiNWQ3YjA1Y2YxMC4uNjk0YmNhNDgwM2Q1MCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXG5AQCAtMTQxLDYgKzE0MSwxMSBAQCBUaGUgaW50ZXJmYWNlIGV4cG9zZXMgdGhlc2UgcGFyYW1ldGVycyBvZiBhIG5ldGNvbnNvbGUgdGFyZ2V0IHRvIHVzZXJzcGFjZTpcXG4gXFx0dHJhbnNtaXRfZXJyb3JzXFx0TnVtYmVyIG9mIHBhY2tldCBzZW5kIGVycm9yc1xcdFxcdChyZWFkLW9ubHkpXFxuIFxcdD09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgICAgPT09PT09PT09PT09XFxuIFxcbitsb2NhbF9pcCBpcyBvcHRpb25hbDogaWYgaXQgaXMgbGVmdCB1bnNldCwgbmV0Y29uc29sZSBkZXJpdmVzIGEgc291cmNlXFxuK2FkZHJlc3MgZnJvbSB0aGUgZWdyZXNzIGludGVyZmFjZSB3aGVuIHRoZSB0YXJnZXQgaXMgZW5hYmxlZC4gV3JpdGluZyBhbnlcXG4rdmFsdWUgdG8gaXQsIGluY2x1ZGluZyAwLjAuMC4wLCB1c2VzIHRoYXQgdmFsdWUgdmVyYmF0aW0gYW5kIGRpc2FibGVzIHRoZVxcbithdXRvbWF0aWMgc2VsZWN0aW9uLlxcbitcXG4gVGhlIFxcXCJlbmFibGVkXFxcIiBhdHRyaWJ1dGUgaXMgYWxzbyB1c2VkIHRvIGNvbnRyb2wgd2hldGhlciB0aGUgcGFyYW1ldGVycyBvZlxcbiBhIHRhcmdldCBjYW4gYmUgdXBkYXRlZCBvciBub3QgLS0geW91IGNhbiBtb2RpZnkgdGhlIHBhcmFtZXRlcnMgb2Ygb25seVxcbiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmIFxcXCJlbmFibGVkXFxcIiBpcyAwKS5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXFxuaW5kZXggYjM1OGU1YzM2NzM1MS4uMjY3MjU0ZjA0NmRlOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcXG5AQCAtMTUxLDYgKzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XFxuIFxcdFNUQVRFX0RFQUNUSVZBVEVELFxcbiB9O1xcbiBcXG4rc3RydWN0IGluZXRfYWRkciB7XFxuK1xcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXFxuK1xcdHU4XFx0XFx0XFx0ZmFtaWx5O1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdF9fYmUzMlxcdFxcdGlwO1xcbitcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRpbjY7XFxuK1xcdH07XFxuK307XFxuK1xcbiAvKipcXG4gICogc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEgLSBGb3JtYXR0ZWQgdXNlcmRhdGEgcGF5bG9hZCBvZiBhIHRhcmdldC5cXG4gICogQHJjdTpcXHRVc2VkIHRvIGZyZWUgdGhlIHBheWxvYWQgYWZ0ZXIgYSBncmFjZSBwZXJpb2QuXFxuQEAgLTE5NSw3ICsyMDQsNiBAQCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSB7XFxuICAqXFx0XFx0bG9jYWxfbWFjXFx0KHJlYWQtb25seSlcXG4gICogQGxvY2FsX2lwOlxcdFNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbiAgKiBAcmVtb3RlX2lwOlxcdERlc3RpbmF0aW9uIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuLSAqIEBpcHY2OlxcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxcbiAgKiBAbG9jYWxfcG9ydDpcXHRTb3VyY2UgVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuICAqIEByZW1vdGVfbWFjOlxcdERlc3RpbmF0aW9uIGV0aGVybmV0IGFkZHJlc3Mgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXFxuQEAgLTIyNSw4ICsyMzMsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbiBcXHRib29sXFx0XFx0XFx0ZXh0ZW5kZWQ7XFxuIFxcdGJvb2xcXHRcXHRcXHRyZWxlYXNlO1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbFxcdFxcdG5wO1xcbi1cXHR1bmlvbiBpbmV0X2FkZHJcXHRcXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xcbi1cXHRib29sXFx0XFx0XFx0aXB2NjtcXG4rXFx0c3RydWN0IGluZXRfYWRkclxcdGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuIFxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbiBcXHR1OFxcdFxcdFxcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xcbiBcXHQvKiBwcm90ZWN0ZWQgYnkgdGFyZ2V0X2xpc3RfbG9jazsgKzEgZ2l2ZXMgc2NucHJpbnRmKCkgcm9vbSBmb3IgaXRzXFxuQEAgLTQyOCw2ICs0MzUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cXG4gXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmluNiA9IGlmcC1cXHUwMDNlYWRkcjtcXG4rXFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2O1xcbiBcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC00NjksMjggKzQ3NywxMiBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuIFxcdH1cXG4gXFxuIFxcdG50LVxcdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cXHUwMDNlaWZhX2xvY2FsO1xcbitcXHRudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFRlc3Qgd2hldGhlciB0aGUgY2FsbGVyIGxlZnQgbnQtXFx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XFxuLSAqIG5ldGNvbnNfbmV0cG9sbF9zZXR1cCgpIHNob3VsZCBhdXRvLXBvcHVsYXRlIGl0IGZyb20gdGhlIGVncmVzcyBkZXZpY2UuXFxuLSAqXFxuLSAqIG50LVxcdTAwM2Vsb2NhbF9pcCBpcyBhIHVuaW9uIG9mIF9fYmUzMiAoSVB2NCkgYW5kIHN0cnVjdCBpbjZfYWRkciAoSVB2NiksXFxuLSAqIHNvIGFuIElQdjYgYWRkcmVzcyB3aG9zZSBmaXJzdCA0IGJ5dGVzIGFyZSB6ZXJvIChlLmcuIDo6MSwgOjoyLFxcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXFxuLSAqIGRvaW5nIHNvIHdvdWxkIG1pc2NsYXNzaWZ5IGEgY2FsbGVyLXN1cHBsaWVkIGFkZHJlc3MgYXMgdW5zZXQgYW5kXFxuLSAqIHNpbGVudGx5IG92ZXJ3cml0ZSBpdCB3aXRoIHdoYXRldmVyIGFkZHJlc3MgdGhlIGRldmljZSBleHBvc2VzLlxcbi0gKi9cXG4tc3RhdGljIGJvb2wgbmV0Y29uc19sb2NhbF9pcF91bnNldChjb25zdCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi17XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4tXFx0XFx0cmV0dXJuIGlwdjZfYWRkcl9hbnkoXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbi1cXHRyZXR1cm4gIW50LVxcdTAwM2Vsb2NhbF9pcC5pcDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxuQEAgLTUwMCw2ICs0OTIsMTcgQEAgc3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbitcXHRcXHRucF9lcnIobnAsIFxcXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVERVNUQUREUlJFUTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XFxuK1xcdFxcdG5wX2VycihucCwgXFxcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRpZiAobnAtXFx1MDAzZWRldl9uYW1lWzBdKVxcbiBcXHRcXHRuZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCBucC1cXHUwMDNlZGV2X25hbWUpO1xcbkBAIC01MzYsMTYgKzUzOSwxMyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbiBcXHRcXHRydG5sX2xvY2soKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XFxuLVxcdFxcdGlmICghbnQtXFx1MDAzZWlwdjYpIHtcXG4tXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XFxuK1xcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4gXFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xcbi1cXHRcXHRcXHRpZiAoZXJyKVxcbi1cXHRcXHRcXHRcXHRnb3RvIHB1dDtcXG4tXFx0XFx0fVxcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuIFxcdFxcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcXG4gXFx0fVxcbiBcXG5AQCAtNzI3LDI0ICs3MjcsMjggQEAgc3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcmludF9iYW5uZXIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4gXFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXFx1MDAyNm50LVxcdTAwM2VucDtcXG4gXFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVAgdW5zZXRcXFxcblxcXCIpO1xcbitcXHRlbHNlIGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NiBhZGRyZXNzICVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bnBfaW5mbyhucCwgXFxcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmlwKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcImludGVyZmFjZSBuYW1lICclcydcXFxcblxcXCIsIG5wLVxcdTAwM2VkZXZfbmFtZSk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBldGhlcm5ldCBhZGRyZXNzICclcE0nXFxcXG5cXFwiLCBucC1cXHUwMDNlZGV2X21hYyk7XFxuIFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgcG9ydCAlZFxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9wb3J0KTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQIHVuc2V0XFxcXG5cXFwiKTtcXG4rXFx0ZWxzZSBpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NiBhZGRyZXNzICVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmlwKTtcXG4gXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBldGhlcm5ldCBhZGRyZXNzICVwTVxcXFxuXFxcIiwgbnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiB9XFxuIFxcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcXG4tICogcG9wdWxhdGVkLCAxIGlmIElQdjYgaXMgcG9wdWxhdGVkLCBhbmQgLTEgdXBvbiBmYWlsdXJlLlxcbisvKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgc3RydWN0LiBSZXR1cm4gMCBvbiBzdWNjZXNzXFxuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXFxuICAqL1xcbi1zdGF0aWMgaW50IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjb25zdCBjaGFyICpzdHIsIHVuaW9uIGluZXRfYWRkciAqYWRkcilcXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxcbiB7XFxuIFxcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XFxuIFxcdGludCBsZW47XFxuQEAgLTc1NiwxNCArNzYwLDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxcbiBcXHRpZiAoc3RyW2xlbiAtIDFdID09ICdcXFxcbicpXFxuIFxcdFxcdGxlbiAtPSAxO1xcbiBcXG4tXFx0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcXHUwMDI2ZW5kKSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXFxcbicpKVxcbitcXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopXFx1MDAyNmFkZHItXFx1MDAzZWlwLCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSkge1xcbitcXHRcXHRhZGRyLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilhZGRyLCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSlcXG4tXFx0XFx0cmV0dXJuIDE7XFxuK1xcdCAgICBpbjZfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcXHUwMDI2YWRkci1cXHUwMDNlaW42LCAtMSwgXFx1MDAyNmVuZCkgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAoIWVuZCB8fCAqZW5kID09IDAgfHwgKmVuZCA9PSAnXFxcXG4nKSkge1xcbitcXHRcXHRhZGRyLVxcdTAwM2VmYW1pbHkgPSBBRl9JTkVUNjtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAtMTtcXG4gfVxcbkBAIC04NjgsMjAgKzg3NiwyNCBAQCBzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbiB7XFxuIFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuIFxcbi1cXHRpZiAobnQtXFx1MDAzZWlwdjYpXFxuK1xcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiXFxcXG5cXFwiKTtcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNik7XFxuIFxcdGVsc2VcXG4tXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuK1xcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbiBcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxcbitcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCJcXFxcblxcXCIpO1xcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTZjXFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pbjYpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4rXFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaXApO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3NpemVfdCBsb2NhbF9tYWNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5AQCAtMTIyNiw3ICsxMjM4LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjM1LDEwICsxMjQ2LDggQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0fVxcbiBcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApO1xcbi1cXHRpZiAoaXB2NiA9PSAtMSlcXG4rXFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0xMjUxLDcgKzEyNjAsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuIHtcXG4gXFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG4gXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi1cXHRpbnQgaXB2NjtcXG4gXFxuIFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuIFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfRU5BQkxFRCkge1xcbkBAIC0xMjYwLDEwICsxMjY4LDggQEAgc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcCk7XFxuLVxcdGlmIChpcHY2ID09IC0xKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi1cXHRudC1cXHUwMDNlaXB2NiA9ICEhaXB2NjtcXG4gXFxuIFxcdHJldCA9IGNvdW50O1xcbiBvdXRfdW5sb2NrOlxcbkBAIC0yMDcyLDcgKzIwNzgsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbiBcXG4gXFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xcbiBcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IDA7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHR1ZHBoLVxcdTAwM2VjaGVjayA9IGNzdW1faXB2Nl9tYWdpYyhcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwLmluNixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICB1ZHBfbGVuLCBJUFBST1RPX1VEUCxcXG5AQCAtMjExMyw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9zb3VyY2UsIG5wLVxcdTAwM2VkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRldGgtXFx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XFxuQEAgLTIxODIsNyArMjE4OCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdFxcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcXG4gXFxuIFxcdHVkcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XFxuLVxcdGlmIChudC1cXHUwMDNlaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuQEAgLTIxOTgsNyArMjIwNCw3IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuIFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbiBcXG4gXFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcXG4tXFx0aWYgKG50LVxcdTAwM2VpcHY2KVxcbitcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuIFxcdFxcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHB1c2hfaXB2NChudCwgc2tiLCBsZW4pO1xcbkBAIC0yNTI3LDEwICsyNTMzLDggQEAgX19yZWxlYXNlcyhcXHUwMDI2dGFyZ2V0X2xpc3RfbG9jaylcXG4gc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbi1cXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcXG4gXFx0Y2hhciAqY3VyID0gb3B0O1xcbiBcXHRjaGFyICpkZWxpbTtcXG4tXFx0aW50IGlwdjY7XFxuIFxcbiBcXHRpZiAoKmN1ciAhPSAnQCcpIHtcXG4gXFx0XFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xcbkBAIC0yNTQ0LDE2ICsyNTQ4LDEyIEBAIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuIFxcdGN1cisrO1xcbiBcXG4gXFx0aWYgKCpjdXIgIT0gJy8nKSB7XFxuLVxcdFxcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xcbiBcXHRcXHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XFxuIFxcdFxcdGlmICghZGVsaW0pXFxuIFxcdFxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbiBcXHRcXHQqZGVsaW0gPSAwO1xcbi1cXHRcXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCk7XFxuLVxcdFxcdGlmIChpcHY2IFxcdTAwM2MgMClcXG4rXFx0XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0bnQtXFx1MDAzZWlwdjYgPSAoYm9vbClpcHY2O1xcbiBcXHRcXHRjdXIgPSBkZWxpbTtcXG4gXFx0fVxcbiBcXHRjdXIrKztcXG5AQCAtMjU5NSwxMyArMjU5NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxcbiBcXHRpZiAoIWRlbGltKVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4gXFx0KmRlbGltID0gMDtcXG4tXFx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKTtcXG4tXFx0aWYgKGlwdjYgXFx1MDAzYyAwKVxcbitcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLVxcdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXFx1MDAyNlxcdTAwMjYgbnQtXFx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcXG4rXFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxcbiBcXHRcXHRnb3RvIHBhcnNlX2ZhaWxlZDtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRudC1cXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XFxuIFxcdGN1ciA9IGRlbGltICsgMTtcXG4gXFxuIFxcdGlmICgqY3VyICE9IDApIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbmluZGV4IDFjNmIxZWVjNWVmZDYuLmVjMDgyMWE1YjAyZGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxcbkBAIC0xNiwxMSArMTYsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VkcC5oXFx1MDAzZVxcbiBcXG4tdW5pb24gaW5ldF9hZGRyIHtcXG4tXFx0X19iZTMyXFx0XFx0aXA7XFxuLVxcdHN0cnVjdCBpbjZfYWRkclxcdGluNjtcXG4tfTtcXG4tXFxuIHN0cnVjdCBuZXRwb2xsIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ4OjUxLjUwMzE4MTg0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTA3NzQzNTM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIixcbiAgICBcImxvY2FsX2lwX3N0b3JlXCIsXG4gICAgXCJyZW1vdGVfaXBfc3RvcmVcIixcbiAgICBcImxvY2FsX2lwX3Nob3dcIixcbiAgICBcInJlbW90ZV9pcF9zaG93XCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zX3Rha2VfaXB2NFwiLFxuICAgIFwibmV0Y29uc190YWtlX2lwdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgSVAgYWRkcmVzcyBtYW5hZ2VtZW50IGluIHRoZSBuZXRjb25zb2xlIHN1YnN5c3RlbSBieSByZXBsYWNpbmcgdGhlIHNlcGFyYXRlIElQdjYgYm9vbGVhbiBmbGFnIGFuZCB1bmlvbiB3aXRoIGEgZGVkaWNhdGVkIGluZXRfYWRkciBzdHJ1Y3Qgc3RvcmluZyB0aGUgYWRkcmVzcyBmYW1pbHkuIEl0IG1vZGlmaWVzIGFkZHJlc3MgcGFyc2luZywgaW50ZXJmYWNlIElQIGF1dG8tcG9wdWxhdGlvbiwgYWRkcmVzcyBmYW1pbHkgdmFsaWRhdGlvbiBpbiBuZXRjb25zX25ldHBvbGxfc2V0dXAsIHN5c2ZzL2NvbmZpZ2ZzIGF0dHJpYnV0ZSBoYW5kbGVycywgYW5kIFVEUCB0cmFuc21pc3Npb24gcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgZHluYW1pYyBuZXRjb25zb2xlIHRhcmdldCBjb25maWd1cmF0aW9uIGluIGNvbmZpZ2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5YTk2NTVlY2UyNWQ5YTNlMmVhYjk4ODlhZGU1MjQxNDEwYjczMjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAxOjQ4OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5pbmRleCA0YWI1ZDdiMDVjZjEwLi42OTRiY2E0ODAzZDUwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcbkBAIC0xNDEsNiArMTQxLDExIEBAIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyB0aGVzZSBwYXJhbWV0ZXJzIG9mIGEgbmV0Y29uc29sZSB0YXJnZXQgdG8gdXNlcnNwYWNlOlxuIFx0dHJhbnNtaXRfZXJyb3JzXHROdW1iZXIgb2YgcGFja2V0IHNlbmQgZXJyb3JzXHRcdChyZWFkLW9ubHkpXG4gXHQ9PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgID09PT09PT09PT09PVxuIFxuK2xvY2FsX2lwIGlzIG9wdGlvbmFsOiBpZiBpdCBpcyBsZWZ0IHVuc2V0LCBuZXRjb25zb2xlIGRlcml2ZXMgYSBzb3VyY2VcbithZGRyZXNzIGZyb20gdGhlIGVncmVzcyBpbnRlcmZhY2Ugd2hlbiB0aGUgdGFyZ2V0IGlzIGVuYWJsZWQuIFdyaXRpbmcgYW55XG4rdmFsdWUgdG8gaXQsIGluY2x1ZGluZyAwLjAuMC4wLCB1c2VzIHRoYXQgdmFsdWUgdmVyYmF0aW0gYW5kIGRpc2FibGVzIHRoZVxuK2F1dG9tYXRpYyBzZWxlY3Rpb24uXG4rXG4gVGhlIFwiZW5hYmxlZFwiIGF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIG9mXG4gYSB0YXJnZXQgY2FuIGJlIHVwZGF0ZWQgb3Igbm90IC0tIHlvdSBjYW4gbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIG9mIG9ubHlcbiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmIFwiZW5hYmxlZFwiIGlzIDApLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggYjM1OGU1YzM2NzM1MS4uMjY3MjU0ZjA0NmRlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDYgKzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuK3N0cnVjdCBpbmV0X2FkZHIge1xuK1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbitcdHU4XHRcdFx0ZmFtaWx5O1xuK1x0dW5pb24ge1xuK1x0XHRfX2JlMzJcdFx0aXA7XG4rXHRcdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuK1x0fTtcbit9O1xuK1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4gICogQHJjdTpcdFVzZWQgdG8gZnJlZSB0aGUgcGF5bG9hZCBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbkBAIC0xOTUsNyArMjA0LDYgQEAgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIyNSw4ICsyMzMsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbi1cdHVuaW9uIGluZXRfYWRkclx0XHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuLVx0Ym9vbFx0XHRcdGlwdjY7XG4rXHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQyOCw2ICs0MzUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDY5LDI4ICs0NzcsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0fVxuIFxuIFx0bnQtXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXHUwMDNlaWZhX2xvY2FsO1xuK1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgSVAgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG4tICogbmV0Y29uc19uZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cbi0gKlxuLSAqIG50LVx1MDAzZWxvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6Mixcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXG4tICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmRcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cbi0gKi9cbi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4te1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4tXHRcdHJldHVybiBpcHY2X2FkZHJfYW55KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4tXHRyZXR1cm4gIW50LVx1MDAzZWxvY2FsX2lwLmlwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnM7XG5AQCAtNTAwLDYgKzQ5MiwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRucF9lcnIobnAsIFwicmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVERVNUQUREUlJFUTtcbitcdH1cbitcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG4rXHRcdG5wX2VycihucCwgXCJsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuQEAgLTUzNiwxNiArNTM5LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9XG4rXHRcdGVsc2VcbitcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MjcsMjQgKzcyNywyOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIHBvcnQgJWRcXG5cIiwgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQIHVuc2V0XFxuXCIpO1xuK1x0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUCB1bnNldFxcblwiKTtcbitcdGVsc2UgaWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4rLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc1NiwxNCArNzYwLDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuIFx0aWYgKHN0cltsZW4gLSAxXSA9PSAnXFxuJylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcbicpKVxuK1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODY4LDIwICs4NzYsMjQgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIlxcblwiKTtcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiXFxuXCIpO1xuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtMTIyNiw3ICsxMjM4LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTIzNSwxMCArMTI0Niw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0xMjUxLDcgKzEyNjAsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTI2MCwxMCArMTI2OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0yMDcyLDcgKzIwNzgsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFxuIFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xuIFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsXG5AQCAtMjExMyw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG5AQCAtMjE4Miw3ICsyMTg4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuIFxuIFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIFx0ZWxzZVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG5AQCAtMjE5OCw3ICsyMjA0LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdHNrYl9wdXQoc2tiLCBsZW4pO1xuIFxuIFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTtcbkBAIC0yNTI3LDEwICsyNTMzLDggQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4tXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcbiBcdGNoYXIgKmN1ciA9IG9wdDtcbiBcdGNoYXIgKmRlbGltO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRpZiAoKmN1ciAhPSAnQCcpIHtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xuQEAgLTI1NDQsMTYgKzI1NDgsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGN1cisrO1xuIFxuIFx0aWYgKCpjdXIgIT0gJy8nKSB7XG4tXHRcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRcdGlmIChpcHY2IFx1MDAzYyAwKVxuK1x0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0XHRlbHNlXG4tXHRcdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuIFx0Y3VyKys7XG5AQCAtMjU5NSwxMyArMjU5NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0aWYgKCFkZWxpbSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHQqZGVsaW0gPSAwO1xuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXHUwMDI2XHUwMDI2IG50LVx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2Vcbi1cdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRjdXIgPSBkZWxpbSArIDE7XG4gXG4gXHRpZiAoKmN1ciAhPSAwKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggMWM2YjFlZWM1ZWZkNi4uZWMwODIxYTViMDJkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTE2LDExICsxNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gXG4tdW5pb24gaW5ldF9hZGRyIHtcbi1cdF9fYmUzMlx0XHRpcDtcbi1cdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuLX07XG4tXG4gc3RydWN0IG5ldHBvbGwge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDg6NTEuNTAzMTgzNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxNTg3MzkyOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3QgYmFzZWQgb24gdGhlIGNoYW5nZWQgZmlsZXM6IGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCBgaW5jbHVkZS9saW51eC9uZXRwb2xsLmhgLCBhbmQgYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnJzdGAuIFRoaXMgc2NyZWFtcyBhbiBhcmNoaXRlY3R1cmFsIGNoYW5nZSB0byB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0uXG5cblJpZ2h0LCBzbyBpdCdzIHJlZmFjdG9yaW5nIGhvdyBhZGRyZXNzZXMgYXJlIGhhbmRsZWQuIFJlcGxhY2luZyB0aGF0IG9sZCBgdW5pb24gaW5ldF9hZGRyYCBhbmQgdGhlIGBib29sIGlwdjZgIHdpdGggYSBgc3RydWN0IGluZXRfYWRkcmAgaXMgYSBzbWFydCBtb3ZlLiBJdCBzaW1wbGlmaWVzIHRoaW5ncyBhbmQgbWFrZXMgdGhlIGNvZGUgY2xlYW5lci4gVGhhdCB1bmlvbiBpbnNpZGUgdGhlIHN0cnVjdCwgd2l0aCB0aGUgYHU4IGZhbWlseWAgdG8gZGlzY3JpbWluYXRlIGJldHdlZW4gSVB2NCBhbmQgSVB2NiwgbWFrZXMgcGVyZmVjdCBzZW5zZSBhbmQgSSdtIGdsYWQgdG8gc2VlIHRoaXMgaW1wbGVtZW50ZWQuXG5cblNvLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgZ29uZSB0aHJvdWdoIGFuZCB1cGRhdGVkIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIHVzZSB0aGUgbmV3IGBpbmV0X2FkZHJgIHN0cnVjdHVyZTogYG5ldGNvbnNfdGFrZV9pcHY2YCwgYG5ldGNvbnNfdGFrZV9pcHY0YCwgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcmAsIGFsbCB0aGUgcGFyc2luZyBhbmQgZGlzcGxheSBmdW5jdGlvbnMsIGNoZWNrc3VtIGNhbGN1bGF0aW9ucywgYW5kIHNlbmQgcm91dGluZXMuIFRob3JvdWdoLCBhcyBpdCBzaG91bGQgYmUuIFRoZSByZWZhY3RvciBvZiBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBzZWVtcyBpbXBvcnRhbnQsIGFuZCBJIG5lZWQgdG8gcmV2aWV3IHRob3NlIGFkZGVkIGNoZWNrcyBjYXJlZnVsbHkuIFRob3NlIHJldHVybiBjb2RlcyBhcmUgY3J1Y2lhbCBmb3IgZXJyb3IgaGFuZGxpbmcuIEEgbWlzc2luZyByZW1vdGUgYWRkcmVzcyBvciBhIG1pc21hdGNoIGluIElQIGZhbWlseSB3aWxsIGNhdXNlIGlzc3Vlcywgb2J2aW91c2x5LiBUaGUgYXV0b2NvbXBsZXRpb24gb2YgdGhlIGxvY2FsIElQIGJhc2VkIG9uIHRoZSByZW1vdGUgSVAgZmFtaWx5IGlzIGEgbmljZSB0b3VjaCwgdG9vLlxuXG5Ob3csIG15IG5leHQgbW92ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgcGF0Y2ggZG9lc24ndCBicmVhayBhbnkgb2YgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLiBJcyBuZXRjb25zb2xlIHN0aWxsIHJlYWNoYWJsZT8gSG93IGlzIGl0IGNvbmZpZ3VyZWQ/IEkgbmVlZCB0byBjaGVjayBpZiB0aGUgY2hhbmdlcyBpbXBhY3QgaXRzIGFjY2Vzc2liaWxpdHkgdGhyb3VnaCBjb25maWdmcywgc3lzZnMsIFN5c1JxLCB0aGUgY29tbWFuZCBsaW5lLCBvciBhbnkgb3RoZXIgbWVhbnMuIEkgbmVlZCB0byByZXZpZXcgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgYG5ldGNvbnNvbGVgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gbmV3IGRlcGVuZGVuY2llcyBvciBjaGFuZ2VzIGluIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTY1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDg6NTguNjYxOTI2MDI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODY2OTgwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVENPTlNPTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz0zMTg9Y29uZmlnIE1BQ1NFQ1xcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjYtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjc6Y29uZmlnIE5FVENPTlNPTEVcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyOC1cXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzMzLVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzM0OmNvbmZpZyBORVRDT05TT0xFX0RZTkFNSUNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTMzNS1cXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0NC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjM0NTpjb25maWcgTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG5kcml2ZXJzL25ldC9LY29uZmlnLTM0Ni1cXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU0LVxcbmRyaXZlcnMvbmV0L0tjb25maWc6MzU1OmNvbmZpZyBORVRDT05TT0xFX1BSRVBFTkRfUkVMRUFTRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzU2LVxcdGJvb2wgXFxcIlByZXBlbmQga2VybmVsIHJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgbWVzc2FnZSBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTowMC4zNDg2MzI5NTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzIwMjI3NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuZXR3b3JrIGNvbnNvbGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBgTkVUQ09OU09MRWAgYW5kIGBORVRDT05TT0xFX0RZTkFNSUNgIHdpdGhpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG51YW5jZXMgb3IgcG90ZW50aWFsIGdvdGNoYXMgcmVsYXRlZCB0byB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMuIEkgcmVjYWxsIHRoZXJlIHdlcmUgc29tZSByZWNlbnQgZGlzY3Vzc2lvbnMgYXJvdW5kIHRoZSB1c2Ugb2YgZHluYW1pYyBhbGxvY2F0aW9uIHZlcnN1cyBzdGF0aWMgY29uZmlndXJhdGlvbiwgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlIGEgY2xlYXIgcGljdHVyZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3B0aW9ucyBpbXBhY3QgdGhlIG5ldHdvcmsgY29uc29sZSdzIGJlaGF2aW9yLCBwYXJ0aWN1bGFybHkgZnJvbSBhIGJvb3QtdGltZSBwZXJzcGVjdGl2ZSBhbmQgYW55IHBvdGVudGlhbCBpbXBhY3Qgb24gZmlybXdhcmUgdXNhZ2UuIEkgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzZXR0aW5ncyBJIHVsdGltYXRlbHkgcmVjb21tZW5kIHdvbid0IGNhdXNlIGFueSBjb25mbGljdHMgd2l0aCBvdXIgZXhpc3RpbmcgbmV0d29ya2luZyBpbmZyYXN0cnVjdHVyZSBvciBpbnRyb2R1Y2Ugc2VjdXJpdHkgY29uY2VybnMsIGV2ZW4gaWYgdW5saWtlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTowNy4wNjg4NjMyODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyNTpcXHRcXHQgICBNQUNzZWMgaXMgYW4gZW5jcnlwdGlvbiBzdGFuZGFyZCBmb3IgRXRoZXJuZXQuXFxuIDMyNjpcXHRcXG4gMzI3OlxcdGNvbmZpZyBORVRDT05TT0xFXFxuIDMyODpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0d29yayBjb25zb2xlIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG4gMzI5OlxcdFxcdGRlcGVuZHMgb24gUFJJTlRLXFxuIDMzMDpcXHRcXHRoZWxwXFxuIDMzMTpcXHRcXHQgIElmIHlvdSB3YW50IHRvIGxvZyBrZXJuZWwgbWVzc2FnZXMgb3ZlciB0aGUgbmV0d29yaywgZW5hYmxlIHRoaXMuXFxuIDMzMjpcXHRcXHQgIFNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcXHUwMDNlIGZvciBkZXRhaWxzLlxcbiAzMzM6XFx0XFxuIDMzNDpcXHRjb25maWcgTkVUQ09OU09MRV9EWU5BTUlDXFxuIDMzNTpcXHRcXHRib29sIFxcXCJEeW5hbWljIHJlY29uZmlndXJhdGlvbiBvZiBsb2dnaW5nIHRhcmdldHNcXFwiXFxuIDMzNjpcXHRcXHRkZXBlbmRzIG9uIE5FVENPTlNPTEUgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlMgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAzMzc6XFx0XFx0XFx0XFx0IShORVRDT05TT0xFPXkgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlM9bSlcXG4gMzM4OlxcdFxcdHNlbGVjdCBQUklOVEtfRVhFQ1VUSU9OX0NUWFxcbiAzMzk6XFx0XFx0aGVscFxcbiAzNDA6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHJlY29uZmlndXJlIHRhcmdldFxcbiAzNDE6XFx0XFx0ICBwYXJhbWV0ZXJzIChpbnRlcmZhY2UsIElQIGFkZHJlc3NlcywgcG9ydCBudW1iZXJzLCBNQUMgYWRkcmVzc2VzKVxcbiAzNDI6XFx0XFx0ICBhdCBydW50aW1lIHRocm91Z2ggYSB1c2Vyc3BhY2UgaW50ZXJmYWNlIGV4cG9ydGVkIHVzaW5nIGNvbmZpZ2ZzLlxcbiAzNDM6XFx0XFx0ICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzQ0OlxcdFxcbiAzNDU6XFx0Y29uZmlnIE5FVENPTlNPTEVfRVhURU5ERURfTE9HXFxuIDM0NjpcXHRcXHRib29sIFxcXCJTZXQga2VybmVsIGV4dGVuZGVkIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4gMzQ3OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRVxcbiAzNDg6XFx0XFx0ZGVmYXVsdCBuXFxuIDM0OTpcXHRcXHRoZWxwXFxuIDM1MDpcXHRcXHQgIFNldCBleHRlbmRlZCBsb2cgc3VwcG9ydCBmb3IgbmV0Y29uc29sZSBtZXNzYWdlLiBJZiB0aGlzIG9wdGlvbiBpc1xcbiAzNTE6XFx0XFx0ICBzZXQsIGxvZyBtZXNzYWdlcyBhcmUgdHJhbnNtaXR0ZWQgd2l0aCBleHRlbmRlZCBtZXRhZGF0YSBoZWFkZXIgaW4gYVxcbiAzNTI6XFx0XFx0ICBmb3JtYXQgc2ltaWxhciB0byAvZGV2L2ttc2cuICBTZWVcXG4gMzUzOlxcdFxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMzU0OlxcdFxcbiAzNTU6XFx0Y29uZmlnIE5FVENPTlNPTEVfUFJFUEVORF9SRUxFQVNFXFxuIDM1NjpcXHRcXHRib29sIFxcXCJQcmVwZW5kIGtlcm5lbCByZWxlYXNlIHZlcnNpb24gaW4gdGhlIG1lc3NhZ2UgYnkgZGVmYXVsdFxcXCJcXG4gMzU3OlxcdFxcdGRlcGVuZHMgb24gTkVUQ09OU09MRV9FWFRFTkRFRF9MT0dcXG4gMzU4OlxcdFxcdGRlZmF1bHQgblxcbiAzNTk6XFx0XFx0aGVscFxcbiAzNjA6XFx0XFx0ICBTZXQga2VybmVsIHJlbGVhc2UgdG8gYmUgcHJlcGVuZGVkIHRvIGVhY2ggbmV0Y29uc29sZSBtZXNzYWdlIGJ5XFxuIDM2MTpcXHRcXHQgIGRlZmF1bHQuIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGtlcm5lbCByZWxlYXNlIGlzIHByZXBlbmRlZCBpbnRvXFxuIDM2MjpcXHRcXHQgIHRoZSBmaXJzdCBmaWVsZCBvZiBldmVyeSBuZXRjb25zb2xlIG1lc3NhZ2UsIHNvLCB0aGUgbmV0Y29uc29sZVxcbiAzNjM6XFx0XFx0ICBzZXJ2ZXIvcGVlciBjYW4gZWFzaWx5IGlkZW50aWZ5IHdoYXQga2VybmVsIHJlbGVhc2UgaXMgbG9nZ2luZyBlYWNoXFxuIDM2NDpcXHRcXHQgIG1lc3NhZ2UuICBTZWUgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XFx1MDAzZSBmb3JcXG4gMzY1OlxcdFxcdCAgZGV0YWlscy5cXG4gMzY2OlxcdFxcbiAzNjc6XFx0Y29uZmlnIE5FVFBPTExcXG4gMzY4OlxcdFxcdGRlZl9ib29sIE5FVENPTlNPTEVcXG4gMzY5OlxcdFxcbiAzNzA6XFx0Y29uZmlnIE5FVF9QT0xMX0NPTlRST0xMRVJcXG4gMzcxOlxcdFxcdGRlZl9ib29sIE5FVFBPTExcXG4gMzcyOlxcdFxcbiAzNzM6XFx0Y29uZmlnIE5UQl9ORVRERVZcXG4gMzc0OlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIEV0aGVybmV0IG92ZXIgTlRCIFRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6MDcuMDY4OTQ0NDQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI1NDMzMzI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGNvbnNvbGUgRHluYW1pYyBDb25maWd1cmF0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYE5FVENPTlNPTEVfRFlOQU1JQ2AgaXMgdGhlIGtleSBoZXJlLiBJdCBlbmFibGVzIHVzZXJzcGFjZSB0byBkeW5hbWljYWxseSBjcmVhdGUgYW5kIHJlY29uZmlndXJlIG5ldGNvbnNvbGUgdGFyZ2V0cyBhdCBydW50aW1lIHRocm91Z2ggdGhlIGAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZS9gIGludGVyZmFjZSwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhZGRpdGlvbi4gSSBzZWUgdGhhdCB0aGlzIHJlbGllcyBvbiBmdW5jdGlvbnMgbGlrZSBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBhbmQgYGVuYWJsZWRfc3RvcmVgIHRvIGludGVyYWN0IHdpdGggbmV0Y29uc29sZSBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBldmVudHVhbGx5IHNldCB1cCB3aXRoIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLiBBbmQsIG9mIGNvdXJzZSwgd2hlbiB0aGVyZSdzIGFjdHVhbGx5IGxvZ2dpbmcgb3IgY29uc29sZSBvdXRwdXQgdG8gdHJhbnNtaXQsIGBuZXRwb2xsX3NlbmRfdWRwYCBoYW5kbGVzIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uLiBUaGlzIHNlZW1zIGZhaXJseSBzdGFuZGFyZCBhbmQgSSdkIGV4cGVjdCB0aGlzIHRvIHdvcmsgYXMgYWR2ZXJ0aXNlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBlbnZpcm9ubWVudHMsIGFzc3VtaW5nIGNvbmZpZ2ZzIGFuZCBuZXRjb25zb2xlIGFyZSBlbmFibGVkLCBvZiBjb3Vyc2UuXG5cbk5vdywgSSB3YW50IHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB0aGUgY2hhbmdlcywgc28gSSBzaG91bGQgZG91YmxlLWNoZWNrIGlmIHRoZXJlJ3MgYW55IG90aGVyIGNvZGUgaW4gYG5ldGNvbnNvbGUuY2AgdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgb3IgY2FsbHMuIEl0J3MgdGltZSB0byBnbyBiYWNrIG92ZXIgdGhlIHBhdGNoIGNoYW5nZXMgYW5kIG1ha2UgYSBsaXN0IG9mIGV2ZXJ5dGhpbmc6IEkgc2VlIGBuZXRjb25zX3Rha2VfaXB2NmAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgLCBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYG5ldHBvbGxfdWRwX2NoZWNrc3VtYCwgYHB1c2hfZXRoYCwgYG5ldHBvbGxfc2VuZF91ZHBgLCBhbmQgYG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmVgLiBPaywgZ290IHRoZSBsaXN0LlxuXG5JIHdhbnQgdG8ga25vdyBob3cgYWxsIHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgY2FsbGluZyBmbG93IHNvIEknbGwgY2hlY2sgd2hhdCBjYWxscyBgbmV0Y29uc19uZXRwb2xsX3NldHVwYCBhbmQgYG5ldHBvbGxfc2VuZF91ZHBgIGV0Yy4gaW4gYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AuIFRoYXQgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYyMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjEyLjMyMzI3OTY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjkxMjI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRjb25zX25ldHBvbGxfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00NTc9c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDg2OnN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NTc2PXN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU4NTpcXHRpZiAobmV0Y29uc19uZXRwb2xsX3NldHVwKG50KSkge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01ODYtXFx0XFx0LyogbmV0cG9sbCBmYWlscyBzZXR1cCBvbmNlLCBkbyBub3QgdHJ5IGFnYWluLiAqL1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEwMTQ9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTA3NS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTA3NjpcXHRcXHRyZXQgPSBuZXRjb25zX25ldHBvbGxfc2V0dXAobnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMDc3LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNjIxPXN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmFsbG9jX3BhcmFtX3RhcmdldChjaGFyICp0YXJnZXRfY29uZmlnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2NTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI2NjA6XFx0ZXJyID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjY2MS1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjEyLjQ0MDE5NjMzNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2Mjg5NTg2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRGlhZ25vc3RpYyBDaGVja2xpc3QqKlxuXG5Pa2F5LCB0aW1lIHRvIHRyb3VibGVzaG9vdC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSByZXZpZXcgdGhlIGtleSBjb21wb25lbnRzIGludm9sdmVkLiBMZXQncyBzdGFydCB3aXRoIHRoZSBmdW5kYW1lbnRhbCB2YXJpYWJsZXM6IEknbGwgcXVpY2tseSBjaGVjayB0aGUgc3RhdGVzIG9mIGBsb2NhbF9pcF9zdG9yZWAsIGByZW1vdGVfaXBfc3RvcmVgLCBgZW5hYmxlZF9zdG9yZWAsIGFuZCBvdGhlciByZWxldmFudCBzdG9yZXMuIE1ha2Ugc3VyZSB0aG9zZSBhcmUgYXMgZXhwZWN0ZWQgYW5kIGNvbnRhaW4gdGhlIHJpZ2h0IGluZm9ybWF0aW9uLlxuXG5OZXh0LCBzaW5jZSBgbmV0cG9sbF9zZW5kX3VkcGAgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgc3RhY2sgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyByZWx5IG9uIGl0LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBuZXRwb2xsX3NlbmRfdWRwYCB0byBmaW5kIHRoZSBzb3VyY2UuIExldCdzIHNlZSB3aGF0IGlzIGNhbGxpbmcgYG5ldHBvbGxfc2VuZF91ZHBgIHNvIEkgdW5kZXJzdGFuZCBob3cgdGhpbmdzIGFyZSBmbG93aW5nLiBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6MTUuMDY5MTU4MTA0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTA3Njc2MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxNTY9c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE3OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE4MDpzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTgxLVxcdFxcdFxcdCAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTctLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMTg6ICogc2VuZF91ZHAgLSBXcmFwcGVyIGZvciBuZXRwb2xsX3NlbmRfdWRwIHRoYXQgY291bnRzIGVycm9yc1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjE5LSAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjItICpcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyMzogKiBDYWxscyBuZXRwb2xsX3NlbmRfdWRwIGFuZCBjbGFzc2lmaWVzIHRoZSByZXR1cm4gdmFsdWUuIElmIGFuIGVycm9yXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjQtICogb2NjdXJyZWQgaXQgaW5jcmVtZW50cyBzdGF0aXN0aWNzIGluIG50LVxcdTAwM2VzdGF0cyBhY2NvcmRpbmdseS5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNTogKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjIyNz1zdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjI5OlxcdGludCByZXN1bHQgPSBuZXRwb2xsX3NlbmRfdWRwKG50LCBtc2csIGxlbik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMzAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjE1LjMxOTkzMjQ4NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODcxNjQzODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBOZXRjb25zb2xlIER5bmFtaWMgTWVzc2FnZSBIYW5kbGluZyoqXG5cblJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBuZXR3b3JrIGNvbnNvbGUgbWVzc2FnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IHRoZSBudWFuY2VzIG9mIGhvdyBpdCBiZWhhdmVzIHdoZW4gZHluYW1pYyBOZXRjb25zb2xlIGlzIGVuYWJsZWQgdmVyc3VzIHdoZW4gaXQncyBkaXNhYmxlZC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHNlbmRfdWRwX2R5bmAsIG9yIHBlcmhhcHMgYHdyaXRlX21zZ2AgZGVwZW5kaW5nIG9uIHRoZSBleGFjdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUuIEkgbmVlZCB0byB0cmFjZSB0aGUgbWVzc2FnZSBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGUgZGlmZmVyZW5jZXMgaW4gbWVzc2FnZSBzZW5kaW5nLCBhbmQgcG90ZW50aWFsbHkgZnJhbWluZywgc2hvdWxkIGJlIGFwcGFyZW50IGluIHRob3NlIGZ1bmN0aW9ucy4gSSdtIHJlYWxseSBjdXJpb3VzIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaWZmZXJlbmNlcyBhdCB0aGUgdW5kZXJseWluZyBsZXZlbCwgYW5kIHdoaWNoIHBpZWNlcyBvZiB0aGUgcHV6emxlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OToxNy4xOTE1ODM0OTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzMyMjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbmRfdWRwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE1Nj1zdGF0aWMgdm9pZCBwdXNoX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTgwOnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxODEtXFx0XFx0XFx0ICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIxNy0vKipcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIxODogKiBzZW5kX3VkcCAtIFdyYXBwZXIgZm9yIG5ldHBvbGxfc2VuZF91ZHAgdGhhdCBjb3VudHMgZXJyb3JzXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMTktICogQG50OiB0YXJnZXQgdG8gc2VuZCBtZXNzYWdlIHRvXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyMi0gKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjIzOiAqIENhbGxzIG5ldHBvbGxfc2VuZF91ZHAgYW5kIGNsYXNzaWZpZXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgYW4gZXJyb3JcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNC0gKiBvY2N1cnJlZCBpdCBpbmNyZW1lbnRzIHN0YXRpc3RpY3MgaW4gbnQtXFx1MDAzZXN0YXRzIGFjY29yZGluZ2x5LlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjI1OiAqIE9ubHkgY2FsbHMgbmV0cG9sbF9zZW5kX3VkcCBpZiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIGRpc2FibGVkLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjI2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjI3OnN0YXRpYyB2b2lkIHNlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZywgaW50IGxlbilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyOC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyMjk6XFx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIzMC1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjQ0PXN0YXRpYyB2b2lkIHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb24oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjc2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjc3OlxcdHNlbmRfdWRwKG50LCBudC1cXHUwMDNlYnVmLCBtc2dfbGVuKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjI3OC19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjI4OD1zdGF0aWMgdm9pZCBzZW5kX2ZyYWdtZW50ZWRfYm9keShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNzY6XFx0XFx0c2VuZF91ZHAobnQsIG50LVxcdTAwM2VidWYsIGJ1Zl9vZmZzZXQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzc3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDI2PXN0YXRpYyB2b2lkIHNlbmRfZXh0X21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDM0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDM1OlxcdC8qIEtlZXBzIHRoZSBwYXlsb2FkIHBpY2tlZCBiZWxvdyBhbGl2ZSB1bnRpbCB0aGUgbGFzdCBzZW5kX3VkcCgpLiAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDM2LVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNDU4PXN0YXRpYyB2b2lkIHNlbmRfbXNnX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ2NS1cXHRcXHRmcmFnID0gbWluKGxlZnQsIE1BWF9QUklOVF9DSFVOSyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI0NjY6XFx0XFx0c2VuZF91ZHAobnQsIHRtcCwgZnJhZyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0NjctXFx0XFx0dG1wICs9IGZyYWc7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjE3LjIzNzMyMDE4M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTU0OTE4MTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBUcmFuc21pc3Npb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgc2VuZF91ZHBgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCdzIGNhbGxpbmcgYG5ldHBvbGxfc2VuZF91ZHBgLiBOb3csIHRoZXJlJ3MgYSBjb21tZW50IHJpZ2h0IGhlcmUgdGhhdCdzIGltbWVkaWF0ZWx5IGdyYWJiaW5nIG15IGF0dGVudGlvbi4gSXQgc3RhdGVzIHNvbWV0aGluZyBhYm91dCB0aGUgYENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIGBuZXRwb2xsX3NlbmRfdWRwYCBjYWxsLiBUaGF0J3MgYSBjbGFzc2ljIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNjZW5hcmlvLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGVudGlyZSBmbG93LiBUaW1lIHRvIGxvb2sgdXAgdGhvc2Ugc3BlY2lmaWMgbGluZXMgaW4gdGhlIG5ldGNvbnNvbGUuYyBmaWxlIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGF0IGNvbmZpZyBvcHRpb24uIExldCdzIHNlZSBpZiB0aGF0IGR5bmFtaWMgY29uc29sZSBoYW5kbGluZyBpcyBhY3R1YWxseSBhY3RpdmUgb3Igbm90IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU2NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjIzLjM5MjI0MTIwM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMTUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMTU6XFx0fVxcbjIyMTY6XFx0XFxuMjIxNzpcXHQvKipcXG4yMjE4OlxcdCAqIHNlbmRfdWRwIC0gV3JhcHBlciBmb3IgbmV0cG9sbF9zZW5kX3VkcCB0aGF0IGNvdW50cyBlcnJvcnNcXG4yMjE5OlxcdCAqIEBudDogdGFyZ2V0IHRvIHNlbmQgbWVzc2FnZSB0b1xcbjIyMjA6XFx0ICogQG1zZzogbWVzc2FnZSB0byBzZW5kXFxuMjIyMTpcXHQgKiBAbGVuOiBsZW5ndGggb2YgbWVzc2FnZVxcbjIyMjI6XFx0ICpcXG4yMjIzOlxcdCAqIENhbGxzIG5ldHBvbGxfc2VuZF91ZHAgYW5kIGNsYXNzaWZpZXMgdGhlIHJldHVybiB2YWx1ZS4gSWYgYW4gZXJyb3JcXG4yMjI0OlxcdCAqIG9jY3VycmVkIGl0IGluY3JlbWVudHMgc3RhdGlzdGljcyBpbiBudC1cXHUwMDNlc3RhdHMgYWNjb3JkaW5nbHkuXFxuMjIyNTpcXHQgKiBPbmx5IGNhbGxzIG5ldHBvbGxfc2VuZF91ZHAgaWYgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBkaXNhYmxlZC5cXG4yMjI2OlxcdCAqL1xcbjIyMjc6XFx0c3RhdGljIHZvaWQgc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKVxcbjIyMjg6XFx0e1xcbjIyMjk6XFx0XFx0aW50IHJlc3VsdCA9IG5ldHBvbGxfc2VuZF91ZHAobnQsIG1zZywgbGVuKTtcXG4yMjMwOlxcdFxcbjIyMzE6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQykpIHtcXG4yMjMyOlxcdFxcdFxcdGlmIChyZXN1bHQgPT0gTkVUX1hNSVRfRFJPUCkge1xcbjIyMzM6XFx0XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2bnQtXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4yMjM0OlxcdFxcdFxcdFxcdHU2NF9zdGF0c19pbmMoXFx1MDAyNm50LVxcdTAwM2VzdGF0cy54bWl0X2Ryb3BfY291bnQpO1xcbjIyMzU6XFx0XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNm50LVxcdTAwM2VzdGF0cy5zeW5jcCk7XFxuMjIzNjpcXHRcXHRcXHR9IGVsc2UgaWYgKHJlc3VsdCA9PSAtRU5PTUVNKSB7XFxuMjIzNzpcXHRcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFxcdTAwMjZudC1cXHUwMDNlc3RhdHMuc3luY3ApO1xcbjIyMzg6XFx0XFx0XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2bnQtXFx1MDAzZXN0YXRzLmVub21lbV9jb3VudCk7XFxuMjIzOTpcXHRcXHRcXHRcXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcXHUwMDI2bnQtXFx1MDAzZXN0YXRzLnN5bmNwKTtcXG4yMjQwOlxcdFxcdFxcdH1cXG4yMjQxOlxcdFxcdH1cXG4yMjQyOlxcdH1cXG4yMjQzOlxcdFxcbjIyNDQ6XFx0c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbjIyNDU6XFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqbXNnLFxcbjIyNDY6XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IG1zZ19sZW4sXFxuMjI0NzpcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcmVsZWFzZV9sZW4sXFxuMjI0ODpcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgbmV0Y29uc191c2VyZGF0YSAqdXNlcmRhdGEpXFxuMjI0OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjIzLjM5MjM2NzUzMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MTEwNTE2NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBOZXRjb25zb2xlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZCB3YXMgYSBzbGlnaHRseSBvdXRkYXRlZCBsaW5lIGluIHRoZSBjb21tZW50LCBidXQgdGhlIGtleSB0aGluZyBpcyB0aGF0IGBzZW5kX3VkcGAgYWx3YXlzIGNhbGxzIGBuZXRwb2xsX3NlbmRfdWRwYC4gVGhhdCdzIGltcG9ydGFudC5cblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJcyB0aGlzIHRoaW5nIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0IG1vZGlmaWVzIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgaW4gUUVNVSwgR0NFLiBXZSdyZSB0YWxraW5nIGFib3V0IGR5bmFtaWMgY29uZmlnZnMgdGFyZ2V0IGNyZWF0aW9uLCBzZXR0aW5nIGxvY2FsIGFuZCByZW1vdGUgSVBzLCBlbmFibGluZyB0aGUgdGFyZ2V0LCBwdXNoaW5nIGNvbnNvbGUgbWVzc2FnZXMgb3ZlciB2aXJ0dWFsIGV0aGVybmV0IGludGVyZmFjZXMgKGR1bW15LCB2ZXRoLCB0YXApLCBhbmQgcG9raW5nIGFyb3VuZCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGVzLiBUaGF0J3MgYSBqdWljeSB0YXJnZXQuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMuIEl04oCZcyBwYXJzaW5nIElQIGFkZHJlc3NlcyBkaWZmZXJlbnRseSwgY2hhbmdpbmcgaG93IHRoZSBhZGRyZXNzIGZhbWlseSBpcyB0cmFja2VkLCB1c2luZyBgbnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5YCBhbmQgYG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHlgIGluc3RlYWQgb2YganVzdCBhbiBgaXB2NmAgZmxhZy4gSXTigJlzIGFkZGluZyB2YWxpZGF0aW9uIGluIGBuZXRjb25zX25ldHBvbGxfc2V0dXBgLCBjaGVja2luZyBpZiB0aGUgcmVtb3RlIElQIGlzIHNldCBhbmQgaWYgdGhlcmXigJlzIGEgZmFtaWx5IG1pc21hdGNoLiBUaGUgcGF0Y2ggYWxzbyBtb2RpZmllcyBgbmV0Y29uc190YWtlX2lwdjRgLCBgbmV0Y29uc190YWtlX2lwdjZgLCBhbmQgdGhlIHN5c2ZzIGhhbmRsZXJzIGZvciBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgbmV0cG9sbF91ZHBfY2hlY2tzdW1gLCBgcHVzaF9ldGhgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGFuZCB0aGUgY29tbWFuZC1saW5lIHBhcnNlciBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIEdpdmVuIGFsbCB0aGF0LCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IHRydWUuXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSByaWdodCBjb25maWcgb3B0aW9ucyBlbmFibGVkLiBXZSBkZWZpbml0ZWx5IG5lZWQgYE5FVENPTlNPTEVgLCBhbmQgYWxzbyBgTkVUQ09OU09MRV9EWU5BTUlDYCAoYmVjYXVzZSBvZiBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBhbmQgYENPTkZJR0ZTX0ZTYCkuIFdlIG5lZWQgYENPTkZJR0ZTX0ZTYCAoaXQncyBhIGRlcGVuZGVuY3kgb2YgYE5FVENPTlNPTEVfRFlOQU1JQ2ApLiBXZSBvYnZpb3VzbHkgbmVlZCBgSU5FVGAgZm9yIElQdjQuIEFuZCwgdG8gYmUgY29tcGxldGUsIGBJUFY2YCBzaW5jZSB3ZSBoYXZlIElQdjYgc3VwcG9ydC4gSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG5hbWVzIGluIHRoZSBLY29uZmlnIGZpbGVzLlxuXG5Ob3csIGxldOKAmXMgaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucywgdGhlIG9uZXMgd2UgcmVhbGx5IHdhbnQgdG8gZm9jdXMgb24uIE9rYXksIGxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY2AsIGl0J3MgdGhlc2UgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZDogYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX3Rha2VfaXB2NmAsIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbmV0Y29uc29sZV9wcmludF9iYW5uZXJgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGFuZCBgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZWAuIExldCdzIGNvbmZpcm0gd2hpY2ggb25lcyBhcmUgaW1wb3J0YW50IGFuZCBub24tc3RhdGljIHNvIHdlIGNhbiBjYWxsIHRoZW0gZGlyZWN0bHkuIEFmdGVyIHZlcmlmaWNhdGlvbiwgaGVyZSBhcmUgdGhlIGltcG9ydGFudCBzeW1ib2xzIGZvciBtZTogYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAsIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgLCBgbG9jYWxfaXBfc3RvcmVgLCBgcmVtb3RlX2lwX3N0b3JlYCwgYGxvY2FsX2lwX3Nob3dgLCBgcmVtb3RlX2lwX3Nob3dgLCBgbmV0cG9sbF9zZW5kX3VkcGAsIGBuZXRjb25zX3Rha2VfaXB2NGAsIGBuZXRjb25zX3Rha2VfaXB2NmAuXG5cbkFyZSB0aGVzZSBmdW5jdGlvbnMgdWJpcXVpdG91cz8gTm8sIHRoZXkncmUgYWxsIG5ldGNvbnNvbGUtc3BlY2lmaWMsIHNvIHRoZXkncmUgZXhjZWxsZW50IGZvY3VzIHN5bWJvbHMuIFRoZXNlIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgYWRkcmVzcyBwYXJzaW5nLCBjb25maWd1cmF0aW9uLCBhbmQgdGhlIGFjdHVhbCBzZW5kaW5nIG9mIFVEUCBwYWNrZXRzLlxuXG5MZXQncyBkbyBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgdGhlIHJlYXNvbmluZyBtYWtlcyBzZW5zZS4gVGhlIHBhdGNoIGlzIGFsbCBhYm91dCByZWZhY3RvcmluZyBob3cgbmV0Y29uc29sZSBtYW5hZ2VzIElQIGFkZHJlc3Nlcy4gSXQncyBtb3ZpbmcgYXdheSBmcm9tIHRoZSBgaXB2NmAgZmxhZyBhbmQgdGhlIGB1bmlvbiBpbmV0X2FkZHJgIGFuZCBpbnN0ZWFkIGludHJvZHVjaW5nIGBzdHJ1Y3QgaW5ldF9hZGRyYCB0byBleHBsaWNpdGx5IHN0b3JlIGFkZHJlc3MgZmFtaWxpZXMuIEl0J3MgYWRkaW5nIHNvbWUgaW1wb3J0YW50IGFkZHJlc3MgZmFtaWx5IGNvbnNpc3RlbmN5IGNoZWNrcy4gVGhlIG5ldHBvbGwgc2V0dXAsIHBhcnNpbmcsIGFuZCBwYWNrZXQgY29uc3RydWN0aW9uIGxvZ2ljIGFyZSBhbGwgYmVpbmcgdXBkYXRlZC4gQW5kIHllcywgYWxsIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBkeW5hbWljIG5ldGNvbnNvbGUgY29uZmlnZnMgaW50ZXJmYWNlIHVuZGVyIGAvc3lzL2tlcm5lbC9jb25maWcvbmV0Y29uc29sZWAuIEl0J3MgYSBuaWNlbHkgc2VsZi1jb250YWluZWQgbGl0dGxlIHN1YnN5c3RlbSwgYW5kIHRoZSBjaGFuZ2VzIGFyZSBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuT2theSwgSSB0aGluayBJJ20gZ29vZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCByZWNvcmQgbXkgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDE1LCJPdXRwdXRUb2tlbnMiOjIxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTozMi41MDI4ODY4NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzcyNzczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUQ09OU09MRVwiLFxuICAgIFwiTkVUQ09OU09MRV9EWU5BTUlDXCIsXG4gICAgXCJDT05GSUdGU19GU1wiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGNvbnNfbmV0cG9sbF9zZXR1cFwiLFxuICAgIFwibmV0cG9sbF9wYXJzZV9pcF9hZGRyXCIsXG4gICAgXCJsb2NhbF9pcF9zdG9yZVwiLFxuICAgIFwicmVtb3RlX2lwX3N0b3JlXCIsXG4gICAgXCJsb2NhbF9pcF9zaG93XCIsXG4gICAgXCJyZW1vdGVfaXBfc2hvd1wiLFxuICAgIFwibmV0cG9sbF9zZW5kX3VkcFwiLFxuICAgIFwibmV0Y29uc190YWtlX2lwdjRcIixcbiAgICBcIm5ldGNvbnNfdGFrZV9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIElQIGFkZHJlc3MgbWFuYWdlbWVudCBpbiB0aGUgbmV0Y29uc29sZSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBzZXBhcmF0ZSBJUHY2IGJvb2xlYW4gZmxhZyBhbmQgdW5pb24gd2l0aCBhIGRlZGljYXRlZCBpbmV0X2FkZHIgc3RydWN0IHN0b3JpbmcgdGhlIGFkZHJlc3MgZmFtaWx5LiBJdCBtb2RpZmllcyBhZGRyZXNzIHBhcnNpbmcsIGludGVyZmFjZSBJUCBhdXRvLXBvcHVsYXRpb24sIGFkZHJlc3MgZmFtaWx5IHZhbGlkYXRpb24gaW4gbmV0Y29uc19uZXRwb2xsX3NldHVwLCBzeXNmcy9jb25maWdmcyBhdHRyaWJ1dGUgaGFuZGxlcnMsIGFuZCBVRFAgdHJhbnNtaXNzaW9uIHBhdGhzLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIGR5bmFtaWMgbmV0Y29uc29sZSB0YXJnZXQgY29uZmlndXJhdGlvbiBpbiBjb25maWdmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRDT05TT0xFXCIsXG4gICAgXCJORVRDT05TT0xFX0RZTkFNSUNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0Y29uc19uZXRwb2xsX3NldHVwXCIsXG4gICAgXCJuZXRwb2xsX3BhcnNlX2lwX2FkZHJcIixcbiAgICBcImxvY2FsX2lwX3N0b3JlXCIsXG4gICAgXCJyZW1vdGVfaXBfc3RvcmVcIixcbiAgICBcImxvY2FsX2lwX3Nob3dcIixcbiAgICBcInJlbW90ZV9pcF9zaG93XCIsXG4gICAgXCJuZXRwb2xsX3NlbmRfdWRwXCIsXG4gICAgXCJuZXRjb25zX3Rha2VfaXB2NFwiLFxuICAgIFwibmV0Y29uc190YWtlX2lwdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgSVAgYWRkcmVzcyBtYW5hZ2VtZW50IGluIHRoZSBuZXRjb25zb2xlIHN1YnN5c3RlbSBieSByZXBsYWNpbmcgdGhlIHNlcGFyYXRlIElQdjYgYm9vbGVhbiBmbGFnIGFuZCB1bmlvbiB3aXRoIGEgZGVkaWNhdGVkIGluZXRfYWRkciBzdHJ1Y3Qgc3RvcmluZyB0aGUgYWRkcmVzcyBmYW1pbHkuIEl0IG1vZGlmaWVzIGFkZHJlc3MgcGFyc2luZywgaW50ZXJmYWNlIElQIGF1dG8tcG9wdWxhdGlvbiwgYWRkcmVzcyBmYW1pbHkgdmFsaWRhdGlvbiBpbiBuZXRjb25zX25ldHBvbGxfc2V0dXAsIHN5c2ZzL2NvbmZpZ2ZzIGF0dHJpYnV0ZSBoYW5kbGVycywgYW5kIFVEUCB0cmFuc21pc3Npb24gcGF0aHMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgZHluYW1pYyBuZXRjb25zb2xlIHRhcmdldCBjb25maWd1cmF0aW9uIGluIGNvbmZpZ2ZzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTozMi41ODA2MjA5MDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjE4OTk0NTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6MzIuNTgxMTkwODkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTc2MTg0MjA5NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxcblxcbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6XFxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cXG4yLiBQYXJzaW5nIGFuZCB1cGRhdGVzOiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBwb3B1bGF0ZXMgYGlwYCAodmlhIGBpbjRfcHRvbmApIG9yIGBpbjZgICh2aWEgYGluNl9wdG9uYCkgYW5kIHNldHMgYGZhbWlseWAgYWNjb3JkaW5nbHkgKGBBRl9JTkVUYCBvciBgQUZfSU5FVDZgKS4gV2hlbiBhdXRvLWRlcml2ZWQsIGBuZXRjb25zX3Rha2VfaXB2NGAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NmAgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYWRkcmVzcyBhbmQgc2V0IGBmYW1pbHlgLlxcbjMuIFVzZXItc3BhY2Ugb3V0cHV0IC8gaW5mbyBsZWFrczogU3lzZnMgYXR0cmlidXRlcyBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AgZW1pdCBmb3JtYXR0ZWQgc3RyaW5ncyBiYXNlZCBvbiB0aGUgdmVyaWZpZWQgYGZhbWlseWAgZGlzY3JpbWluYXRvciBhbmQgcmVhZCBvbmx5IHRoZSBmdWxseSBpbml0aWFsaXplZCBhZGRyZXNzIHVuaW9uIGZpZWxkcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXJzcGFjZS5cXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseWAgYW5kIHJlYWQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYGluNmAgb3IgYGlwYCBmaWVsZHMuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5YTk2NTVlY2UyNWQ5YTNlMmVhYjk4ODlhZGU1MjQxNDEwYjczMjlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDAxOjQ4OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG5pbmRleCA0YWI1ZDdiMDVjZjEwLi42OTRiY2E0ODAzZDUwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS5yc3RcbkBAIC0xNDEsNiArMTQxLDExIEBAIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyB0aGVzZSBwYXJhbWV0ZXJzIG9mIGEgbmV0Y29uc29sZSB0YXJnZXQgdG8gdXNlcnNwYWNlOlxuIFx0dHJhbnNtaXRfZXJyb3JzXHROdW1iZXIgb2YgcGFja2V0IHNlbmQgZXJyb3JzXHRcdChyZWFkLW9ubHkpXG4gXHQ9PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgID09PT09PT09PT09PVxuIFxuK2xvY2FsX2lwIGlzIG9wdGlvbmFsOiBpZiBpdCBpcyBsZWZ0IHVuc2V0LCBuZXRjb25zb2xlIGRlcml2ZXMgYSBzb3VyY2VcbithZGRyZXNzIGZyb20gdGhlIGVncmVzcyBpbnRlcmZhY2Ugd2hlbiB0aGUgdGFyZ2V0IGlzIGVuYWJsZWQuIFdyaXRpbmcgYW55XG4rdmFsdWUgdG8gaXQsIGluY2x1ZGluZyAwLjAuMC4wLCB1c2VzIHRoYXQgdmFsdWUgdmVyYmF0aW0gYW5kIGRpc2FibGVzIHRoZVxuK2F1dG9tYXRpYyBzZWxlY3Rpb24uXG4rXG4gVGhlIFwiZW5hYmxlZFwiIGF0dHJpYnV0ZSBpcyBhbHNvIHVzZWQgdG8gY29udHJvbCB3aGV0aGVyIHRoZSBwYXJhbWV0ZXJzIG9mXG4gYSB0YXJnZXQgY2FuIGJlIHVwZGF0ZWQgb3Igbm90IC0tIHlvdSBjYW4gbW9kaWZ5IHRoZSBwYXJhbWV0ZXJzIG9mIG9ubHlcbiBkaXNhYmxlZCB0YXJnZXRzIChpLmUuIGlmIFwiZW5hYmxlZFwiIGlzIDApLlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuaW5kZXggYjM1OGU1YzM2NzM1MS4uMjY3MjU0ZjA0NmRlOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1xuKysrIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXG5AQCAtMTUxLDYgKzE1MSwxNSBAQCBlbnVtIHRhcmdldF9zdGF0ZSB7XG4gXHRTVEFURV9ERUFDVElWQVRFRCxcbiB9O1xuIFxuK3N0cnVjdCBpbmV0X2FkZHIge1xuK1x0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cbitcdHU4XHRcdFx0ZmFtaWx5O1xuK1x0dW5pb24ge1xuK1x0XHRfX2JlMzJcdFx0aXA7XG4rXHRcdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuK1x0fTtcbit9O1xuK1xuIC8qKlxuICAqIHN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIC0gRm9ybWF0dGVkIHVzZXJkYXRhIHBheWxvYWQgb2YgYSB0YXJnZXQuXG4gICogQHJjdTpcdFVzZWQgdG8gZnJlZSB0aGUgcGF5bG9hZCBhZnRlciBhIGdyYWNlIHBlcmlvZC5cbkBAIC0xOTUsNyArMjA0LDYgQEAgc3RydWN0IG5ldGNvbnNfdXNlcmRhdGEge1xuICAqXHRcdGxvY2FsX21hY1x0KHJlYWQtb25seSlcbiAgKiBAbG9jYWxfaXA6XHRTb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbiAgKiBAcmVtb3RlX2lwOlx0RGVzdGluYXRpb24gSVAgYWRkcmVzcyBvZiB0aGUgdGFyZ2V0IChyZWFkLXdyaXRlKS5cbi0gKiBAaXB2NjpcdFdoZXRoZXIgdGhlIHRhcmdldCBhZGRyZXNzZXMgYXJlIElQdjYgKHJlYWQtd3JpdGUpLlxuICAqIEBsb2NhbF9wb3J0Olx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuICAqIEByZW1vdGVfcG9ydDogRGVzdGluYXRpb24gVURQIHBvcnQgb2YgdGhlIHRhcmdldCAocmVhZC13cml0ZSkuXG4gICogQHJlbW90ZV9tYWM6XHREZXN0aW5hdGlvbiBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxuQEAgLTIyNSw4ICsyMzMsNyBAQCBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xuIFx0Ym9vbFx0XHRcdGV4dGVuZGVkO1xuIFx0Ym9vbFx0XHRcdHJlbGVhc2U7XG4gXHRzdHJ1Y3QgbmV0cG9sbFx0XHRucDtcbi1cdHVuaW9uIGluZXRfYWRkclx0XHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuLVx0Ym9vbFx0XHRcdGlwdjY7XG4rXHRzdHJ1Y3QgaW5ldF9hZGRyXHRsb2NhbF9pcCwgcmVtb3RlX2lwO1xuIFx0dTE2XHRcdFx0bG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7XG4gXHR1OFx0XHRcdHJlbW90ZV9tYWNbRVRIX0FMRU5dO1xuIFx0LyogcHJvdGVjdGVkIGJ5IHRhcmdldF9saXN0X2xvY2s7ICsxIGdpdmVzIHNjbnByaW50ZigpIHJvb20gZm9yIGl0c1xuQEAgLTQyOCw2ICs0MzUsNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfdGFrZV9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHQvKiBHb3QgdGhlIElQLCBsZXQncyByZXR1cm4gKi9cbiBcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5pbjYgPSBpZnAtXHUwMDNlYWRkcjtcbitcdFx0XHRudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPSBBRl9JTkVUNjtcbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNDY5LDI4ICs0NzcsMTIgQEAgc3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFx0fVxuIFxuIFx0bnQtXHUwMDNlbG9jYWxfaXAuaXAgPSBpZmEtXHUwMDNlaWZhX2xvY2FsO1xuK1x0bnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID0gQUZfSU5FVDtcbiBcdG5wX2luZm8obnAsIFwibG9jYWwgSVAgJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pcCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBUZXN0IHdoZXRoZXIgdGhlIGNhbGxlciBsZWZ0IG50LVx1MDAzZWxvY2FsX2lwIHVuc2V0LCBzbyB0aGF0XG4tICogbmV0Y29uc19uZXRwb2xsX3NldHVwKCkgc2hvdWxkIGF1dG8tcG9wdWxhdGUgaXQgZnJvbSB0aGUgZWdyZXNzIGRldmljZS5cbi0gKlxuLSAqIG50LVx1MDAzZWxvY2FsX2lwIGlzIGEgdW5pb24gb2YgX19iZTMyIChJUHY0KSBhbmQgc3RydWN0IGluNl9hZGRyIChJUHY2KSxcbi0gKiBzbyBhbiBJUHY2IGFkZHJlc3Mgd2hvc2UgZmlyc3QgNCBieXRlcyBhcmUgemVybyAoZS5nLiA6OjEsIDo6Mixcbi0gKiBJUHY0LW1hcHBlZCA6OmZmZmY6YS5iLmMuZCkgbXVzdCBub3QgYmUgdGVzdGVkIHZpYSB0aGUgSVB2NCBhcm0g4oCUXG4tICogZG9pbmcgc28gd291bGQgbWlzY2xhc3NpZnkgYSBjYWxsZXItc3VwcGxpZWQgYWRkcmVzcyBhcyB1bnNldCBhbmRcbi0gKiBzaWxlbnRseSBvdmVyd3JpdGUgaXQgd2l0aCB3aGF0ZXZlciBhZGRyZXNzIHRoZSBkZXZpY2UgZXhwb3Nlcy5cbi0gKi9cbi1zdGF0aWMgYm9vbCBuZXRjb25zX2xvY2FsX2lwX3Vuc2V0KGNvbnN0IHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4te1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4tXHRcdHJldHVybiBpcHY2X2FkZHJfYW55KFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNik7XG4tXHRyZXR1cm4gIW50LVx1MDAzZWxvY2FsX2lwLmlwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtXHUwMDNlbnNwcm94eS1cdTAwM2VuZXRfbnM7XG5AQCAtNTAwLDYgKzQ5MiwxNyBAQCBzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRucF9lcnIobnAsIFwicmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVERVNUQUREUlJFUTtcbitcdH1cbitcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XG4rXHRcdG5wX2VycihucCwgXCJsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcblwiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRydG5sX2xvY2soKTtcbiBcdGlmIChucC1cdTAwM2VkZXZfbmFtZVswXSlcbiBcdFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXHUwMDNlZGV2X25hbWUpO1xuQEAgLTUzNiwxNiArNTM5LDEzIEBAIHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXG4gXHRcdHJ0bmxfbG9jaygpO1xuIFx0fVxuIFxuLVx0aWYgKG5ldGNvbnNfbG9jYWxfaXBfdW5zZXQobnQpKSB7XG4tXHRcdGlmICghbnQtXHUwMDNlaXB2Nikge1xuLVx0XHRcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY0KG50LCBuZGV2KTtcbi1cdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0Z290byBwdXQ7XG4tXHRcdH0gZWxzZSB7XG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xuK1x0XHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NihudCwgbmRldik7XG4tXHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdGdvdG8gcHV0O1xuLVx0XHR9XG4rXHRcdGVsc2VcbitcdFx0XHRlcnIgPSBuZXRjb25zX3Rha2VfaXB2NChudCwgbmRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBwdXQ7XG4gXHRcdGlwX292ZXJ3cml0dGVuID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC03MjcsMjQgKzcyNywyOCBAQCBzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4gXG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIHBvcnQgJWRcXG5cIiwgbnQtXHUwMDNlbG9jYWxfcG9ydCk7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQIHVuc2V0XFxuXCIpO1xuK1x0ZWxzZSBpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuIFx0XHRucF9pbmZvKG5wLCBcImxvY2FsIElQdjQgYWRkcmVzcyAlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcblwiLCBucC1cdTAwM2VkZXZfbmFtZSk7XG4gXHRucF9pbmZvKG5wLCBcImxvY2FsIGV0aGVybmV0IGFkZHJlc3MgJyVwTSdcXG5cIiwgbnAtXHUwMDNlZGV2X21hYyk7XG4gXHRucF9pbmZvKG5wLCBcInJlbW90ZSBwb3J0ICVkXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9wb3J0KTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRucF9pbmZvKG5wLCBcInJlbW90ZSBJUCB1bnNldFxcblwiKTtcbitcdGVsc2UgaWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdG5wX2luZm8obnAsIFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2VcbiBcdFx0bnBfaW5mbyhucCwgXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiBcdG5wX2luZm8obnAsIFwicmVtb3RlIGV0aGVybmV0IGFkZHJlc3MgJXBNXFxuXCIsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuIH1cbiBcbi0vKiBQYXJzZSB0aGUgc3RyaW5nIGFuZCBwb3B1bGF0ZSB0aGUgYGluZXRfYWRkcmAgdW5pb24uIFJldHVybiAwIGlmIElQdjQgaXNcbi0gKiBwb3B1bGF0ZWQsIDEgaWYgSVB2NiBpcyBwb3B1bGF0ZWQsIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4rLyogUGFyc2UgdGhlIHN0cmluZyBhbmQgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC4gUmV0dXJuIDAgb24gc3VjY2Vzc1xuKyAqIGFuZCAtMSB1cG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCB1bmlvbiBpbmV0X2FkZHIgKmFkZHIpXG4rc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxuIHtcbiBcdGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7XG4gXHRpbnQgbGVuO1xuQEAgLTc1NiwxNCArNzYwLDE4IEBAIHN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgdW5pb24gaW5ldF9hZGRyICphZGRyKVxuIFx0aWYgKHN0cltsZW4gLSAxXSA9PSAnXFxuJylcbiBcdFx0bGVuIC09IDE7XG4gXG4tXHRpZiAoaW40X3B0b24oc3RyLCBsZW4sICh2b2lkICopYWRkciwgLTEsIFx1MDAyNmVuZCkgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4tXHQgICAgKCFlbmQgfHwgKmVuZCA9PSAwIHx8ICplbmQgPT0gJ1xcbicpKVxuK1x0aWYgKGluNF9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaXAsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ7XG4gXHRcdHJldHVybiAwO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0lQVjYpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKWFkZHIsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuLVx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSlcbi1cdFx0cmV0dXJuIDE7XG4rXHQgICAgaW42X3B0b24oc3RyLCBsZW4sICh2b2lkICopXHUwMDI2YWRkci1cdTAwM2VpbjYsIC0xLCBcdTAwMjZlbmQpIFx1MDAzZSAwIFx1MDAyNlx1MDAyNlxuK1x0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuK1x0XHRhZGRyLVx1MDAzZWZhbWlseSA9IEFGX0lORVQ2O1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdHJldHVybiAtMTtcbiB9XG5AQCAtODY4LDIwICs4NzYsMjQgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcbiB7XG4gXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xuIFxuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIlxcblwiKTtcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcC5pbjYpO1xuIFx0ZWxzZVxuLVx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXBJNFxcblwiLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4rXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk0XFxuXCIsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKVxuK1x0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiXFxuXCIpO1xuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCIlcEk2Y1xcblwiLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXAuaW42KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwKTtcbitcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiVwSTRcXG5cIiwgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmlwKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbG9jYWxfbWFjX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXG5AQCAtMTIyNiw3ICsxMjM4LDYgQEAgc3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTIzNSwxMCArMTI0Niw4IEBAIHN0YXRpYyBzc2l6ZV90IGxvY2FsX2lwX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4tXHRpcHY2ID0gbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApO1xuLVx0aWYgKGlwdjYgPT0gLTEpXG4rXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0xMjUxLDcgKzEyNjAsNiBAQCBzdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXG4ge1xuIFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcbiBcdHNzaXplX3QgcmV0ID0gLUVJTlZBTDtcbi1cdGludCBpcHY2O1xuIFxuIFx0ZHluYW1pY19uZXRjb25zb2xlX211dGV4X2xvY2soKTtcbiBcdGlmIChudC1cdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEKSB7XG5AQCAtMTI2MCwxMCArMTI2OCw4IEBAIHN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFx0fVxuIFxuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiA9PSAtMSlcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoYnVmLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4tXHRudC1cdTAwM2VpcHY2ID0gISFpcHY2O1xuIFxuIFx0cmV0ID0gY291bnQ7XG4gb3V0X3VubG9jazpcbkBAIC0yMDcyLDcgKzIwNzgsNyBAQCBzdGF0aWMgdm9pZCBuZXRwb2xsX3VkcF9jaGVja3N1bShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxuIFxuIFx0LyogY2hlY2sgbmVlZHMgdG8gYmUgc2V0LCBzaW5jZSBpdCB3aWxsIGJlIGNvbnN1bWVkIGluIGNzdW1fcGFydGlhbCAqL1xuIFx0dWRwaC1cdTAwM2VjaGVjayA9IDA7XG4tXHRpZiAobnQtXHUwMDNlaXB2NilcbitcdGlmIChudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxuIFx0XHR1ZHBoLVx1MDAzZWNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2bnQtXHUwMDNlcmVtb3RlX2lwLmluNixcbiBcdFx0XHRcdFx0ICAgICAgdWRwX2xlbiwgSVBQUk9UT19VRFAsXG5AQCAtMjExMyw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XG4gXHRldGhlcl9hZGRyX2NvcHkoZXRoLVx1MDAzZWhfc291cmNlLCBucC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cdTAwM2VoX2Rlc3QsIG50LVx1MDAzZXJlbW90ZV9tYWMpO1xuLVx0aWYgKG50LVx1MDAzZWlwdjYpXG4rXHRpZiAobnQtXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUFY2KTtcbiBcdGVsc2VcbiBcdFx0ZXRoLVx1MDAzZWhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7XG5AQCAtMjE4Miw3ICsyMTg4LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdFx0V0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpO1xuIFxuIFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdGlwX2xlbiA9IHVkcF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xuIFx0ZWxzZVxuIFx0XHRpcF9sZW4gPSB1ZHBfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG5AQCAtMjE5OCw3ICsyMjA0LDcgQEAgc3RhdGljIGludCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNvbnN0IGNoYXIgKm1zZyxcbiBcdHNrYl9wdXQoc2tiLCBsZW4pO1xuIFxuIFx0cHVzaF91ZHAobnQsIHNrYiwgbGVuKTtcbi1cdGlmIChudC1cdTAwM2VpcHY2KVxuK1x0aWYgKG50LVx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXG4gXHRcdHB1c2hfaXB2NihudCwgc2tiLCBsZW4pO1xuIFx0ZWxzZVxuIFx0XHRwdXNoX2lwdjQobnQsIHNrYiwgbGVuKTtcbkBAIC0yNTI3LDEwICsyNTMzLDggQEAgX19yZWxlYXNlcyhcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxuIHN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXG4ge1xuIFx0c3RydWN0IG5ldHBvbGwgKm5wID0gXHUwMDI2bnQtXHUwMDNlbnA7XG4tXHRib29sIGlwdmVyc2lvbl9zZXQgPSBmYWxzZTtcbiBcdGNoYXIgKmN1ciA9IG9wdDtcbiBcdGNoYXIgKmRlbGltO1xuLVx0aW50IGlwdjY7XG4gXG4gXHRpZiAoKmN1ciAhPSAnQCcpIHtcbiBcdFx0ZGVsaW0gPSBzdHJjaHIoY3VyLCAnQCcpO1xuQEAgLTI1NDQsMTYgKzI1NDgsMTIgQEAgc3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcbiBcdGN1cisrO1xuIFxuIFx0aWYgKCpjdXIgIT0gJy8nKSB7XG4tXHRcdGlwdmVyc2lvbl9zZXQgPSB0cnVlO1xuIFx0XHRkZWxpbSA9IHN0cmNocihjdXIsICcvJyk7XG4gXHRcdGlmICghZGVsaW0pXG4gXHRcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHRcdCpkZWxpbSA9IDA7XG4tXHRcdGlwdjYgPSBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2Vsb2NhbF9pcCk7XG4tXHRcdGlmIChpcHY2IFx1MDAzYyAwKVxuK1x0XHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGN1ciwgXHUwMDI2bnQtXHUwMDNlbG9jYWxfaXApIFx1MDAzYyAwKVxuIFx0XHRcdGdvdG8gcGFyc2VfZmFpbGVkO1xuLVx0XHRlbHNlXG4tXHRcdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRcdGN1ciA9IGRlbGltO1xuIFx0fVxuIFx0Y3VyKys7XG5AQCAtMjU5NSwxMyArMjU5NSwxMSBAQCBzdGF0aWMgaW50IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY2hhciAqb3B0KVxuIFx0aWYgKCFkZWxpbSlcbiBcdFx0Z290byBwYXJzZV9mYWlsZWQ7XG4gXHQqZGVsaW0gPSAwO1xuLVx0aXB2NiA9IG5ldHBvbGxfcGFyc2VfaXBfYWRkcihjdXIsIFx1MDAyNm50LVx1MDAzZXJlbW90ZV9pcCk7XG4tXHRpZiAoaXB2NiBcdTAwM2MgMClcbitcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcdTAwMjZudC1cdTAwM2VyZW1vdGVfaXApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2UgaWYgKGlwdmVyc2lvbl9zZXQgXHUwMDI2XHUwMDI2IG50LVx1MDAzZWlwdjYgIT0gKGJvb2wpaXB2NilcbitcdGlmIChudC1cdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gQUZfVU5TUEVDIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG50LVx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxuIFx0XHRnb3RvIHBhcnNlX2ZhaWxlZDtcbi1cdGVsc2Vcbi1cdFx0bnQtXHUwMDNlaXB2NiA9IChib29sKWlwdjY7XG4gXHRjdXIgPSBkZWxpbSArIDE7XG4gXG4gXHRpZiAoKmN1ciAhPSAwKSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuaW5kZXggMWM2YjFlZWM1ZWZkNi4uZWMwODIxYTViMDJkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaFxuQEAgLTE2LDExICsxNiw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VkcC5oXHUwMDNlXG4gXG4tdW5pb24gaW5ldF9hZGRyIHtcbi1cdF9fYmUzMlx0XHRpcDtcbi1cdHN0cnVjdCBpbjZfYWRkclx0aW42O1xuLX07XG4tXG4gc3RydWN0IG5ldHBvbGwge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdG5ldGRldmljZV90cmFja2VyIGRldl90cmFja2VyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6MzIuNTgxMTkyMDgzWiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MjcwNzg3NjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgRGVjaXNpb246IEFuYWx5emluZyB0aGUgTmV0Y29uc29sZSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGBuZXRjb25zb2xlYCBwYXRjaCB3YXJyYW50IHNwaW5uaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgaW4gYWRkaXRpb24gdG8gb3VyIHN0YW5kYXJkIEtBU0FOIGVmZm9ydHM/IExldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZC4gTG9va3MgbGlrZSB3ZSd2ZSBnb3Qgc29tZSBkb2N1bWVudGF0aW9uIHR3ZWFrcyBpbiBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGNvbnNvbGUucnN0YCDigJMgc3BlY2lmaWNhbGx5LCBjbGFyaWZ5aW5nIHRoYXQgYGxvY2FsX2lwYCBpcyBub3cgb3B0aW9uYWwuIEZpbmUsIG5vdCBpbW1lZGlhdGVseSBjb25jZXJuaW5nIGZyb20gYSBtZW1vcnkgc2FmZXR5IFBPVi5cblxuVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSwgaXQgc2VlbXMsIGlzIGluIGBkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNgLiBBaGEsIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCBkZWZpbml0aW9uOlxuXG5gYGBjXG5zdHJ1Y3QgaW5ldF9hZGRyIHtcblx0LyogQWRkcmVzcyBmYW1pbHk6IEFGX1VOU1BFQyB3aGVuIHVuc2V0LCBlbHNlIEFGX0lORVQgb3IgQUZfSU5FVDYgKi9cblx0dTggZmFtaWx5O1xuXHR1bmlvbiB7XG5cdFx0X19iZTMyIGlwO1xuXHRcdHN0cnVjdCBpbjZfYWRkciBpbjY7XG5cdH07XG59O1xuYGBgXG5cblRoaXMgaXMgdGhlIGtleS4gVGhleSd2ZSByZXBsYWNlZCBgdW5pb24gaW5ldF9hZGRyIGxvY2FsX2lwLCByZW1vdGVfaXA7IGJvb2wgaXB2NjtgIHdpdGggYHN0cnVjdCBpbmV0X2FkZHIgbG9jYWxfaXAsIHJlbW90ZV9pcDtgIGluIGBuZXRjb25zb2xlX3RhcmdldGAuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSB1c2luZyBhIHVuaW9uIHRvIHJlcHJlc2VudCB0aGUgSVAgYWRkcmVzcyBmYW1pbHksIHdpdGggdGhlIGBmYW1pbHlgIG1lbWJlciwgY291bGQgYmUgaW50ZXJlc3RpbmcuIFRoZSBjb21waWxlciAqc2hvdWxkKiBiZSBoYW5kbGluZyB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWNjZXNzIGNvcnJlY3RseSwgYnV0IHRoZXNlIHNvcnRzIG9mIGNoYW5nZXMgYXJlIHByaW1lIHRhcmdldHMgZm9yIHN1YnRsZSB1c2UtYWZ0ZXItZnJlZSBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIHBhcnRpY3VsYXJseSBpZiB0aGUgZmFtaWx5IGlzbid0IGhhbmRsZWQgY29ycmVjdGx5LiBUaGUgb3B0aW9uYWwgbmF0dXJlIG9mIGBsb2NhbF9pcGAgbWlnaHQgY29tcGxpY2F0ZSBtYXR0ZXJzIGV2ZW4gZnVydGhlci5cblxuU28sIHdoZXJlIGFyZSB0aGVzZSBgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZD8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgaGVyZS4gTGV0J3MgZmlyZSB1cCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyBgbmV0Y29uc29sZV90YXJnZXRgIGlzIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCB1c2VkLiBUaGF0IHdpbGwgdGVsbCBtZSBpZiB0aGVyZSBpcyBhbnkgcGxhY2UgdG8gdHJpZ2dlciBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMuIE9uY2UgSSBoYXZlIHRoZSBhbGxvY2F0aW9uIGFuZCB1c2Ugb2YgdGhhdCBzdHJ1Y3QgdW5kZXIgY29udHJvbCwgSSBjYW4gbWFrZSBhIGRlY2lzaW9uIGFib3V0IGFkZGluZyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjQ2Ljg1MTk4MzM4OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1OTQxNjQzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLipuZXRjb25zb2xlX3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjQ3LjAwNzkzMzAxMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTMxOTkwNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBNZW1vcnkgQWxsb2NhdGlvbnMgaW4gbmV0Y29uc29sZS5jKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBuZXRjb25zb2xlLmNgLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byBpZGVudGlmeSBldmVyeSBtZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBtb2R1bGUuIFRoaXMgaXMgbGlrZWx5IG1vdGl2YXRlZCBieSBhIHBlcmZvcm1hbmNlIGFuYWx5c2lzLCBhIG1lbW9yeSBsZWFrIGludmVzdGlnYXRpb24sIG9yIHBlcmhhcHMgZXZlbiBhIHNlY3VyaXR5IGF1ZGl0LiBHaXZlbiB0aGUgbmF0dXJlIG9mIG5ldHdvcmtpbmcgY29kZSwgSSdtIGV4cGVjdGluZyBzb21lIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQsIHByb2JhYmx5IGZvciBidWZmZXJpbmcgcGFja2V0cywgY29uZmlndXJpbmcgY29ubmVjdGlvbnMsIG9yIHN0b3JpbmcgY29ubmVjdGlvbiBzdGF0ZS4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuXG5cbkknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCB0ZXh0IHNlYXJjaCB3aXRoaW4gdGhlIGZpbGUsIGxvb2tpbmcgZm9yIHRoZSB1c3VhbCBzdXNwZWN0czogYGttYWxsb2NgLCBga3phbGxvY2AsIGB2bWFsbG9jYCwgYGttZW1fY2FjaGVfYWxsb2NgLCBldGMuIEknbGwgbmVlZCB0byBiZSBtaW5kZnVsIG9mIG1hY3JvIHVzYWdlIHRoYXQgbWlnaHQgd3JhcCB0aGVzZSBmdW5jdGlvbnMuIENvbW1vbiBwYXR0ZXJucyBsaWtlIGFsbG9jYXRpb24gd3JhcHBlcnMsIGUuZy4gYE5FVERFVl9BTExPQ2Agb3Igc2ltaWxhciwgYXJlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIuIEkgYWxzbyBjYW4ndCBmb3JnZXQgY3VzdG9tIG1lbW9yeSBwb29sIGltcGxlbWVudGF0aW9ucyB0aGF0IGFyZSB1bmZvcnR1bmF0ZWx5IGNvbW1vbiBpbiBrZXJuZWwgY29kZSBhbmQgbWlnaHQgYmUgdXNlZCBpbiB0aGUgbW9kdWxlLCBzbyBJJ2xsIGFsc28gYmUgc2Nhbm5pbmcgZm9yIGN1c3RvbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB3aGljaCBtaWdodCBub3QgdXNlIHRoZSBzdGFuZGFyZCBrZXJuZWwgYWxsb2NhdG9ycy5cblxuT25jZSBJJ3ZlIGlkZW50aWZpZWQgcG90ZW50aWFsIGFsbG9jYXRpb24gcG9pbnRzLCBJJ2xsIG5lZWQgdG8gdHJhY2UgZWFjaCBhbGxvY2F0aW9uIGJhY2sgdG8gaXRzIGNvcnJlc3BvbmRpbmcgZnJlZWluZyBtZWNoYW5pc20uIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFzc29jaWF0ZWQgYGtmcmVlYCBjYWxscz8gRG8gdGhleSBmb2xsb3cgYSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgcGF0aD8gQXJlIHRoZXJlIGFueSBkYW5nbGluZyBwb2ludGVycyBpZiB0aGVyZSdzIGFuIGVycm9yPyBBcmUgdGhlcmUgYW55IHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcz8gV2l0aG91dCB0aGlzLCBJJ20ganVzdCBsaXN0aW5nIGFsbG9jYXRpb25zLiBJIGhhdmUgdG8gbG9vayBmb3IgdGhlIGFsbG9jYXRpb24gLyBkZWFsbG9jYXRpb24gcGFpcnMuXG5cbkknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29udGV4dCBvZiB0aGVzZSBhbGxvY2F0aW9ucy4gSXMgaXQgaW4gYSBjcml0aWNhbCBzZWN0aW9uLCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3IgYSB0YXNrbGV0PyBUaGUgY29udGV4dCBkcmFtYXRpY2FsbHkgaW1wYWN0cyB0aGUgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgdGhlIG5lZWQgZm9yIGFwcHJvcHJpYXRlIGxvY2tpbmcgbWVjaGFuaXNtcy4gSSdsbCBiZSBsb29raW5nIGZvciBzcGlubG9ja3MsIG11dGV4ZXMsIGFuZCBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4gSSBuZWVkIHRvIGtub3cgaWYgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgb3Igbm90LlxuXG5JJ2xsIGFsc28ga2VlcCBpbiBtaW5kIGNvbW1vbiBwaXRmYWxsczogYXJlIHRoZXJlIGFsbG9jYXRpb24gc2l6ZSBsaW1pdHMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBBcmUgdGhlcmUgYW55IGFsbG9jYXRpb24gZmFpbHVyZXMgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBXaGF0IGFib3V0IG1lbW9yeSBmcmFnbWVudGF0aW9uIG92ZXIgdGltZT8gQW55IHVzZSBvZiBzbGFiIGNhY2hlcyBhbmQgYXJlIHRoZXkgY29uZmlndXJlZCBvcHRpbWFsbHkgZm9yIHRoZSBleHBlY3RlZCB3b3JrbG9hZD8gVGhpcyBtb2R1bGUgbWF5IGJlIGRlYWxpbmcgd2l0aCBkYXRhIHRoYXQgaXMgdXNlci1zdXBwbGllZCwgc28gSSBhbSB2ZXJ5IG11Y2ggb24gdGhlIGxvb2tvdXQgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIHNpemUgdmFsaWRhdGlvbiwgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93cyBhbmQgb3RoZXIgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIG5ldHdvcmsgY29kZSwgYWZ0ZXIgYWxsLlxuXG5GaW5hbGx5LCBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgaG93IHRoZSBhbGxvY2F0aW9ucyBhZmZlY3QgcGVyZm9ybWFuY2UgYW5kIHdoZXRoZXIgd2UgY2FuIGltcHJvdmUgYW55dGhpbmcuIElzIHRoZXJlIGEgYmV0dGVyIGFsZ29yaXRobSBvciBkYXRhIHN0cnVjdHVyZSB0aGF0IGNvdWxkIHJlZHVjZSB0aGUgbmVlZCBmb3IgZHluYW1pYyBtZW1vcnk/IENvdWxkIHdlIHByZS1hbGxvY2F0ZSBzb21lIG1lbW9yeSBvciB1c2UgYSBzbGFiIGNhY2hlIG1vcmUgZWZmZWN0aXZlbHk/IFRoZSBnb2FsIGlzIHRvIG9idGFpbiBhIGhvbGlzdGljIHZpZXcgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhpcyBtb2R1bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1MS4xMzk5MjY3MjZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODg2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGNvbnNvbGVfdGFyZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE4PXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBuZXRjb25zb2xlX2V4dCwgbmV0Y29uc29sZTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjA6c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0X3N0YXRzICB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMS1cXHR1NjRfc3RhdHNfdCB4bWl0X2Ryb3BfY291bnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcyPXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzgtLyoqXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3OTogKiBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgLSBSZXByZXNlbnRzIGEgY29uZmlndXJlZCBuZXRjb25zb2xlIHRhcmdldC5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTgwLSAqIEBsaXN0OlxcdExpbmtzIHRoaXMgdGFyZ2V0IGludG8gdGhlIHRhcmdldF9saXN0Llxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNy0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE4OnN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOS1cXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzAtI2VuZGlmXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzMTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRfc3RhdHMgc3RhdHM7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzMi1cXHRlbnVtIHRhcmdldF9zdGF0ZVxcdHN0YXRlO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI2MD1zdGF0aWMgdm9pZCBfX2V4aXQgZHluYW1pY19uZXRjb25zb2xlX2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjktICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3MDpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9nZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI3NjpzdGF0aWMgdm9pZCBuZXRjb25zb2xlX3RhcmdldF9wdXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yOTk9c3RhdGljIHZvaWQgX19leGl0IGR5bmFtaWNfbmV0Y29uc29sZV9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzA2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMDc6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzEwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMTE6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcHV0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMxMi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzE0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozMTU6c3RhdGljIHZvaWQgcG9wdWxhdGVfY29uZmlnZnNfaXRlbShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMTYtXFx0XFx0XFx0XFx0ICAgaW50IGNtZGxpbmVfY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MzI0PXN0YXRpYyB2b2lkIGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF91bmxvY2sodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMzAtLyogQ2hlY2sgaWYgdGhlIHRhcmdldCB3YXMgYm91bmQgYnkgbWFjIGFkZHJlc3MuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzMTpzdGF0aWMgYm9vbCBib3VuZF9ieV9tYWMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzMyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zMzUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjMzNjpzdGF0aWMgdm9pZCBuZXRjb25zX3JlbGVhc2VfZGV2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTMzNy17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQyLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNDM6c3RhdGljIHZvaWQgcmVmaWxsX3NrYnMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0zNTc9c3RhdGljIHZvaWQgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzU4LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzU5OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzozNjA6XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCwgcmVmaWxsX3dxKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzYxLVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM2OC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MzY5OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfaW5pdChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0zNzAte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTM3My1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mzc0OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMzc1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00MDE9c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDEzOnN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDE0LVxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0NTc6c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NTgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00ODUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ4NjpzdGF0aWMgaW50IG5ldGNvbnNfbmV0cG9sbF9zZXR1cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00ODcte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTU3NS0vKiBBdHRlbXB0cyB0byByZXN1bWUgbG9nZ2luZyB0byBhIGRlYWN0aXZhdGVkIHRhcmdldC4gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTc2OnN0YXRpYyB2b2lkIHJlc3VtZV90YXJnZXQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTc3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01OTYtLyogQ2hlY2tzIGlmIGEgZGVhY3RpdmF0ZWQgdGFyZ2V0IG1hdGNoZXMgYSBkZXZpY2UuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU5NzpzdGF0aWMgYm9vbCBkZWFjdGl2YXRlZF90YXJnZXRfbWF0Y2goc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTk4LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NjA5PXN0YXRpYyB2b2lkIHByb2Nlc3NfcmVzdW1lX3RhcmdldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTYxMC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjYxMTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTItXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjEzLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2MTQ6XFx0bnQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0LCByZXN1bWVfd3EpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy02MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjY5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo2NzA6c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfYW5kX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNjcxLXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NjcyOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTY3My1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03MDA9c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzAxLXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzAyOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcwMy1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzI1OnN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTcyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzUxPXN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjgwNTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICp0b190YXJnZXQoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04MDYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTgxMi1cXHRyZXR1cm4gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODEzOlxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQsIGdyb3VwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODE0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04MzA9c3RhdGljIHZvaWQgdHJpbV9uZXdsaW5lKGNoYXIgKnMsIHNpemVfdCBtYXhsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODQxLS8qXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg0MjogKiBBdHRyaWJ1dGUgb3BlcmF0aW9ucyBmb3IgbmV0Y29uc29sZV90YXJnZXQuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg0My0gKi9cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04NzU9c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc2LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODc3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg3OC1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz04ODc9c3RhdGljIHNzaXplX3QgcmVtb3RlX2lwX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4OC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg4OTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04OTAtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTEyPXN0YXRpYyBzc2l6ZV90IHRyYW5zbWl0X2Vycm9yc19zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MTMte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MTQ6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTE1LVxcdHU2NCB4bWl0X2Ryb3BfY291bnQsIGVub21lbV9jb3VudDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05Mjg9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9jcHVfbnJfZW5hYmxlZF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05Mjkte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo5MzA6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtLVxcdTAwM2VjaV9wYXJlbnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05MzEtXFx0Ym9vbCBjcHVfbnJfZW5hYmxlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NDE9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV90YXNrbmFtZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0My17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk0NDpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXFx1MDAzZWNpX3BhcmVudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk0NS1cXHRib29sIHRhc2tuYW1lX2VuYWJsZWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9OTU0PXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfcmVsZWFzZV9lbmFibGVkX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1Ni17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk1NzpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXFx1MDAzZWNpX3BhcmVudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk1OC1cXHRib29sIHJlbGVhc2VfZW5hYmxlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz05NzA9c3RhdGljIHZvaWQgdW5yZWdpc3Rlcl9uZXRjb25zX2NvbnNvbGVzKHZvaWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTk3MS17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjk3MjpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy05NzMtXFx0dTMyIGNvbnNvbGVfdHlwZV9uZWVkZWQgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTk5ND1zdGF0aWMgc3NpemVfdCBzeXNkYXRhX21zZ2lkX2VuYWJsZWRfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTk2LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6OTk3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cXHUwMDNlY2lfcGFyZW50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtOTk4LVxcdGJvb2wgbXNnaWRfZW5hYmxlZDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xMDE0PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMTYte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMDE3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEwMTgtXFx0Ym9vbCBlbmFibGVkLCBjdXJyZW50X2VuYWJsZWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTExMj1zdGF0aWMgc3NpemVfdCByZWxlYXNlX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTQte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTE1OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExMTYtXFx0Ym9vbCByZWxlYXNlO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExMzk9c3RhdGljIHNzaXplX3QgZXh0ZW5kZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE0MS17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNDI6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE0My1cXHRib29sIGV4dGVuZGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTExNjU9c3RhdGljIHNzaXplX3QgZGV2X25hbWVfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2Ny17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjExNjg6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTE2OS1cXHRzaXplX3QgbGVuID0gY291bnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTE5Mj1zdGF0aWMgc3NpemVfdCBsb2NhbF9wb3J0X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExOTQte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMTk1OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTExOTYtXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEyMTQ9c3RhdGljIHNzaXplX3QgcmVtb3RlX3BvcnRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMTYte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjE3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyMTgtXFx0c3NpemVfdCByZXQgPSAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTEyMzY9c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzOC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyMzk6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI0MC1cXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI1OD1zdGF0aWMgc3NpemVfdCByZW1vdGVfaXBfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI2MC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNjE6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI2Mi1cXHRzc2l6ZV90IHJldCA9IC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI4NC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI4NTpzdGF0aWMgc2l6ZV90IGNvdW50X3VzZXJkYXRhX2VudHJpZXMoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI4Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTI5MD1zdGF0aWMgc3NpemVfdCByZW1vdGVfbWFjX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY29uc3QgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyOTIte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjkzOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyOTQtXFx0dTggcmVtb3RlX21hY1tFVEhfQUxFTl07XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTMzMD1zdGF0aWMgc3RydWN0IHVzZXJkYXRhICp0b191c2VyZGF0YShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMzNC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTMzNTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICp1c2VyZGF0YV90b190YXJnZXQoc3RydWN0IHVzZXJkYXRhICp1ZClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTMzNi17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTM0Mz1zdGF0aWMgc3NpemVfdCB1c2VyZGF0dW1fdmFsdWVfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzUxLSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMzUyOnN0YXRpYyBpbnQgY2FsY191c2VyZGF0YV9sZW4oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM1My17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTM3MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTM3MTpzdGF0aWMgaW50IHVwZGF0ZV91c2VyZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMzcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNDE5PXN0YXRpYyBzc2l6ZV90IHVzZXJkYXR1bV92YWx1ZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDIzLVxcdGNoYXIgb2xkX3ZhbHVlW01BWF9FWFRSQURBVEFfVkFMVUVfTEVOXTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQyNDpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDI1LVxcdHN0cnVjdCB1c2VyZGF0YSAqdWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ1Ny0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ1ODpzdGF0aWMgdm9pZCBkaXNhYmxlX3N5c2RhdGFfZmVhdHVyZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDU5LVxcdFxcdFxcdFxcdCAgICBlbnVtIHN5c2RhdGFfZmVhdHVyZSBmZWF0dXJlKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0NjU9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9tc2dpZF9lbmFibGVkX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNDY3LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTQ2ODpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0tXFx1MDAzZWNpX3BhcmVudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0NjktXFx0Ym9vbCBtc2dpZF9lbmFibGVkLCBjdXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE0OTQ9c3RhdGljIHNzaXplX3Qgc3lzZGF0YV9yZWxlYXNlX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE0OTYte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNDk3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cXHUwMDNlY2lfcGFyZW50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTQ5OC1cXHRib29sIHJlbGVhc2VfZW5hYmxlZCwgY3VycjtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTIzPXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfdGFza25hbWVfZW5hYmxlZF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTUyNS17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1MjY6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCA9IHRvX3RhcmdldChpdGVtLVxcdTAwM2VjaV9wYXJlbnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTI3LVxcdGJvb2wgdGFza25hbWVfZW5hYmxlZCwgY3VycjtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNTUzPXN0YXRpYyBzc2l6ZV90IHN5c2RhdGFfY3B1X25yX2VuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE1NTUte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNTU2OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbS1cXHUwMDNlY2lfcGFyZW50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1Ny1cXHRib29sIGNwdV9ucl9lbmFibGVkLCBjdXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2MTI9c3RhdGljIHN0cnVjdCBjb25maWdfaXRlbSAqdXNlcmRhdHVtX21ha2VfaXRlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjE0LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTYxNTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjE2LVxcdHN0cnVjdCB1c2VyZGF0dW0gKnVkbTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjM1PXN0YXRpYyB2b2lkIHVzZXJkYXR1bV9kcm9wKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLCBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzYte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjM3OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2MzgtXFx0c3RydWN0IHVzZXJkYXRhICp1ZDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xNjc5PUNPTkZJR0ZTX0FUVFJfUk8oLCB0cmFuc21pdF9lcnJvcnMpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjgwLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjgxOnN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpuZXRjb25zb2xlX3RhcmdldF9hdHRyc1tdID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjgyLVxcdFxcdTAwMjZhdHRyX2VuYWJsZWQsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY5Ni0vKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjk3OiAqIEl0ZW0gb3BlcmF0aW9ucyBhbmQgdHlwZSBmb3IgbmV0Y29uc29sZV90YXJnZXQuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTgtICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MDA6c3RhdGljIHZvaWQgbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDEte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzAyOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQgPSB0b190YXJnZXQoaXRlbSk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MDMtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcwNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwODpzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyBuZXRjb25zb2xlX3RhcmdldF9pdGVtX29wcyA9IHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTcwOTpcXHQucmVsZWFzZVxcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfcmVsZWFzZSxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcxMC19O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzExLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzEyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBuZXRjb25zb2xlX3RhcmdldF90eXBlID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzEzOlxcdC5jdF9hdHRyc1xcdFxcdD0gbmV0Y29uc29sZV90YXJnZXRfYXR0cnMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MTQ6XFx0LmN0X2l0ZW1fb3BzXFx0XFx0PSBcXHUwMDI2bmV0Y29uc29sZV90YXJnZXRfaXRlbV9vcHMsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MTUtXFx0LmN0X293bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzE4OnN0YXRpYyB2b2lkIGluaXRfdGFyZ2V0X2NvbmZpZ19ncm91cChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzE5LVxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqbmFtZSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcyMC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3MjE6XFx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFxcdTAwMjZudC1cXHUwMDNlZ3JvdXAsIG5hbWUsIFxcdTAwMjZuZXRjb25zb2xlX3RhcmdldF90eXBlKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcyMi1cXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXFx1MDAyNm50LVxcdTAwM2V1c2VyZGF0YV9ncm91cCwgXFxcInVzZXJkYXRhXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzI2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzI3OnN0YXRpYyBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKmZpbmRfY21kbGluZV90YXJnZXQoY29uc3QgY2hhciAqbmFtZSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTcyOC17XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE3Mjk6XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgKnJldCA9IE5VTEw7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3MzAtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQ3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzQ4OnN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICptYWtlX25ldGNvbnNvbGVfdGFyZ2V0KHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzQ5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTAte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzUxOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3NTItXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzgxLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNzgyOnN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE3ODMtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzg0LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTc4NTpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNzg2LVxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTgzND1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgbmV0Y29uc29sZV9zdWJzeXNfZ3JvdXBfb3BzID0ge1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM1OlxcdC5tYWtlX2dyb3VwXFx0PSBtYWtlX25ldGNvbnNvbGVfdGFyZ2V0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODM2OlxcdC5kcm9wX2l0ZW1cXHQ9IGRyb3BfbmV0Y29uc29sZV90YXJnZXQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4MzctfTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xODQ1PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIG5ldGNvbnNvbGVfc3Vic3lzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NTQ6c3RhdGljIHZvaWQgcG9wdWxhdGVfY29uZmlnZnNfaXRlbShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODU1LVxcdFxcdFxcdFxcdCAgIGludCBjbWRsaW5lX2NvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NjMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NjQ6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF9jcHVfbnIoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg2NS1cXHRcXHRcXHRcXHQgc3RydWN0IG5iY29uX3dyaXRlX2NvbnRleHQgKndjdHh0KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE4NzEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE4NzI6c3RhdGljIGludCBzeXNkYXRhX2FwcGVuZF90YXNrbmFtZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgb2Zmc2V0LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODczLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODgwOnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfcmVsZWFzZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgb2Zmc2V0KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xODg2LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxODg3OnN0YXRpYyBpbnQgc3lzZGF0YV9hcHBlbmRfbXNnaWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgaW50IG9mZnNldClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg4OC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTg5OS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTkwMDpzdGF0aWMgaW50IHByZXBhcmVfc3lzZGF0YShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTAxLVxcdFxcdFxcdCAgIHN0cnVjdCBuYmNvbl93cml0ZV9jb250ZXh0ICp3Y3R4dClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0xOTI2PXN0YXRpYyBpbnQgbmV0Y29uc29sZV9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MjktXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTMwOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5MzEtXFx0Ym9vbCBzdG9wcGVkID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk0MS1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnQsIHRtcCwgXFx1MDAyNnRhcmdldF9saXN0LCBsaXN0KSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE5NDI6XFx0XFx0bmV0Y29uc29sZV90YXJnZXRfZ2V0KG50KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTk0My1cXHRcXHRpZiAobnQtXFx1MDAzZW5wLmRldiA9PSBkZXYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xOTcxLVxcdFxcdFxcdHF1ZXVlX3dvcmsobmV0Y29uc29sZV93cSwgXFx1MDAyNm50LVxcdTAwM2VyZXN1bWVfd3EpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxOTcyOlxcdFxcdG5ldGNvbnNvbGVfdGFyZ2V0X3B1dChudCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE5NzMtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwMDQ9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZXRjb25zb2xlX25ldGRldl9ub3RpZmllciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDE5LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDIwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmV0Y29uc19za2JfcG9wKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwMjEte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNDItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNDM6c3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBpbnQgbGVuLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDQ0LVxcdFxcdFxcdFxcdGludCByZXNlcnZlKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwNjktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwNzA6c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjA3MS1cXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDk0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDk1OnN0YXRpYyB2b2lkIHB1c2hfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwOTYte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMTItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMTM6c3RhdGljIHZvaWQgcHVzaF9ldGgoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjExNC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyNy1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjEyODpzdGF0aWMgdm9pZCBwdXNoX2lwdjQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjEyOS1cXHRcXHQgICAgICBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTUtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNTY6c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNTctXFx0XFx0ICAgICAgaW50IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTgwOnN0YXRpYyBpbnQgbmV0cG9sbF9zZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxODEtXFx0XFx0XFx0ICAgIGludCBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIyNi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjIyNzpzdGF0aWMgdm9pZCBzZW5kX3VkcChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjb25zdCBjaGFyICptc2csIGludCBsZW4pXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyMjgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyNDMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIyNDQ6c3RhdGljIHZvaWQgc2VuZF9tc2dfbm9fZnJhZ21lbnRhdGlvbihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjQ1LVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm1zZyxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMjgwPXN0YXRpYyB2b2lkIGFwcGVuZF9yZWxlYXNlKGNoYXIgKmJ1ZilcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMjg3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjg4OnN0YXRpYyB2b2lkIHNlbmRfZnJhZ21lbnRlZF9ib2R5KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIyODktXFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKm1zZ2JvZHlfcHRyLCBpbnQgaGVhZGVyX2xlbixcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMzc5LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzgwOnN0YXRpYyB2b2lkIHNlbmRfbXNnX2ZyYWdtZW50ZWQoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM4MS1cXHRcXHRcXHRcXHRjb25zdCBjaGFyICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQyNS0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQyNjpzdGF0aWMgdm9pZCBzZW5kX2V4dF9tc2dfdWRwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0MjctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjQ1Ny1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjQ1ODpzdGF0aWMgdm9pZCBzZW5kX21zZ191ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNDU5LVxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI0Nzk9c3RhdGljIHZvaWQgbmV0Y29uc29sZV93cml0ZShzdHJ1Y3QgbmJjb25fd3JpdGVfY29udGV4dCAqd2N0eHQsIGJvb2wgZXh0ZW5kZWQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODAte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNDgxOlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI0ODItXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjUyOD1fX3JlbGVhc2VzKFxcdTAwMjZ0YXJnZXRfbGlzdF9sb2NrKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1MzItXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjI1MzM6c3RhdGljIGludCBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIGNoYXIgKm9wdClcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjUzNC17XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyMC0vKiBBbGxvY2F0ZSBuZXcgdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgc2V0dXAgbmV0cG9sbCBmb3IgaXQgKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjYyMTpzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19wYXJhbV90YXJnZXQoY2hhciAqdGFyZ2V0X2NvbmZpZyxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjYyMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNtZGxpbmVfY291bnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MjMte1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjI0OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2MjUtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjgyLS8qIENsZWFudXAgbmV0cG9sbCBmb3IgZ2l2ZW4gdGFyZ2V0IChmcm9tIGJvb3QvbW9kdWxlIHBhcmFtKSBhbmQgZnJlZSBpdCAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjgzOnN0YXRpYyB2b2lkIGZyZWVfcGFyYW1fdGFyZ2V0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI2ODQte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3MTM9c3RhdGljIGludCBfX2luaXQgaW5pdF9uZXRjb25zb2xlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjcxNS1cXHRpbnQgZXJyO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNzE2OlxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI3MTctXFx0dTMyIGNvbnNvbGVfdHlwZV9uZWVkZWQgPSAwO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTI3OTQ9c3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfbmV0Y29uc29sZSh2b2lkKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzk1LXtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6Mjc5NjpcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCAqdG1wO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNzk3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1MS4xODY4MjA1NjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0MDI5NTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBOZXR3b3JrIENvbnNvbGUgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMuIExldCdzIHN0YXJ0IGJ5IGNyYWNraW5nIG9wZW4gYGFsbG9jX2FuZF9pbml0YCwgYGFsbG9jX3BhcmFtX3RhcmdldGAsIGFuZCBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAgdXNpbmcgYHJlYWQtZmlsZWAuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggbmV0d29yayBjb25zb2xlIGluaXRpYWxpemF0aW9uIGhlcmUsIGFuZCB0aGVzZSBhcmUgbGlrZWx5IHRoZSBidWlsZGluZyBibG9ja3MuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoZXkgYWxsb2NhdGUgYW5kIGNvbmZpZ3VyZSB0aGUgY29uc29sZSB0YXJnZXRzLiBHaXZlbiBteSBleHBlcnRpc2UsIEnigJlsbCBiZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzLCBwYXJhbWV0ZXIgcGFyc2luZywgYW5kIHRoZSBvdmVyYWxsIGRhdGEgc3RydWN0dXJlcyB0aGF0IGRlZmluZSB0aGUgbmV0d29yayBjb25zb2xlIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGVsZW1lbnRzIGludGVycmVsYXRlIHRvIGVuYWJsZSBuZXR3b3JrIGRlYnVnZ2luZy4gSSBleHBlY3QgdG8gc2VlIGFsbG9jYXRpb24gZm9yIGJ1ZmZlcnMsIHBlcmhhcHMgc3RydWN0dXJlcyB0byBob2xkIG5ldHdvcmsgYWRkcmVzc2VzLCBwb3J0IG51bWJlcnMsIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGRhdGEuIFRoZSBcInRhcmdldFwiIHBhcnQgaW1wbGllcyB0aGVzZSBhcmUgZGVzY3JpYmluZyB3aGVyZSB0aGUgY29uc29sZSBvdXRwdXQgaXMgZ29pbmcgdG8uIFRoZSBcInBhcmFtXCIgYXNwZWN0IHByb2JhYmx5IHJlbGF0ZXMgdG8gcGFzc2luZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBMZXQncyBnZXQgdG8gdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1My45MjcxMTk4NDhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NjU6XFx0fVxcbiA2NjY6XFx0XFxuIDY2NzpcXHQvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHRzLlxcbiA2Njg6XFx0ICogTm90ZSB0aGF0IHRoZXNlIHRhcmdldHMgZ2V0IHRoZWlyIGNvbmZpZ19pdGVtIGZpZWxkcyB6ZXJvZWQtb3V0LlxcbiA2Njk6XFx0ICovXFxuIDY3MDpcXHRzdGF0aWMgc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICphbGxvY19hbmRfaW5pdCh2b2lkKVxcbiA2NzE6XFx0e1xcbiA2NzI6XFx0XFx0c3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudDtcXG4gNjczOlxcdFxcbiA2NzQ6XFx0XFx0bnQgPSBremFsbG9jX29iaigqbnQpO1xcbiA2NzU6XFx0XFx0aWYgKCFudClcXG4gNjc2OlxcdFxcdFxcdHJldHVybiBudDtcXG4gNjc3OlxcdFxcbiA2Nzg6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05FVENPTlNPTEVfRVhURU5ERURfTE9HKSlcXG4gNjc5OlxcdFxcdFxcdG50LVxcdTAwM2VleHRlbmRlZCA9IHRydWU7XFxuIDY4MDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTkVUQ09OU09MRV9QUkVQRU5EX1JFTEVBU0UpKVxcbiA2ODE6XFx0XFx0XFx0bnQtXFx1MDAzZXJlbGVhc2UgPSB0cnVlO1xcbiA2ODI6XFx0XFxuIDY4MzpcXHRcXHRudC1cXHUwMDNlbnAubmFtZSA9IFxcXCJuZXRjb25zb2xlXFxcIjtcXG4gNjg0OlxcdFxcdHN0cnNjcHkobnQtXFx1MDAzZW5wLmRldl9uYW1lLCBcXFwiZXRoMFxcXCIsIElGTkFNU0laKTtcXG4gNjg1OlxcdFxcdG50LVxcdTAwM2Vsb2NhbF9wb3J0ID0gNjY2NTtcXG4gNjg2OlxcdFxcdG50LVxcdTAwM2VyZW1vdGVfcG9ydCA9IDY2NjY7XFxuIDY4NzpcXHRcXHRldGhfYnJvYWRjYXN0X2FkZHIobnQtXFx1MDAzZXJlbW90ZV9tYWMpO1xcbiA2ODg6XFx0XFx0bnQtXFx1MDAzZXN0YXRlID0gU1RBVEVfRElTQUJMRUQ7XFxuIDY4OTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNm50LVxcdTAwM2VyZXN1bWVfd3EsIHByb2Nlc3NfcmVzdW1lX3RhcmdldCk7XFxuIDY5MDpcXHRcXHQvKiBTZXQgdXAgdGhlIHNrYiBwb29sIHByaW1pdGl2ZXMgb25jZTsgZW5hYmxpbmcgb25seSByZWZpbGxzIGl0LiAqL1xcbiA2OTE6XFx0XFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2bnQtXFx1MDAzZXNrYl9wb29sKTtcXG4gNjkyOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2bnQtXFx1MDAzZXJlZmlsbF93cSwgcmVmaWxsX3NrYnNfd29ya19oYW5kbGVyKTtcXG4gNjkzOlxcdFxcbiA2OTQ6XFx0XFx0cmV0dXJuIG50O1xcbiA2OTU6XFx0fVxcbiA2OTY6XFx0XFxuIDY5NzpcXHQvKiBDbGVhbiB1cCBldmVyeSB0YXJnZXQgaW4gdGhlIGNsZWFudXBfbGlzdCBhbmQgbW92ZSB0aGUgY2xlYW4gdGFyZ2V0cyBiYWNrIHRvXFxuIDY5ODpcXHQgKiB0aGUgbWFpbiB0YXJnZXRfbGlzdC5cXG4gNjk5OlxcdCAqL1xcbiA3MDA6XFx0c3RhdGljIHZvaWQgbmV0Y29uc29sZV9wcm9jZXNzX2NsZWFudXBzX2NvcmUodm9pZClcXG4gNzAxOlxcdHtcXG4gNzAyOlxcdFxcdHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsICp0bXA7XFxuIDcwMzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiA3MDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjUzLjkyNzI0ODYxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTM5NjAyMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBQYXJhbWV0ZXIgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGFsbG9jYXRpb24gc3RyYXRlZ2llcy4gQmVmb3JlIGRpdmluZyBkZWVwZXIsIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIHNvbWV0aGluZyBmdW5kYW1lbnRhbC4gVGhlIGN1cnJlbnQgZm9jdXMgc2VlbXMgdG8gYmUgb24gYSBzcGVjaWZpYyBhcmVhLCBidXQgaXQncyBjcnVjaWFsIHRvIHBlcmZvcm0gYSBjb21wbGV0ZSBzeXN0ZW1zIGNoZWNrLiBUaGF0IG1lYW5zIG5vdCBvbmx5IGNoZWNraW5nIHRoZSBtb3JlIG9idmlvdXMgYXJlYSwgYnV0IGFsc28gY29uc2lkZXJpbmcgdGhlIGJyb2FkZXIgcGljdHVyZS4gU28sIHJpZ2h0IG5vdywgdGhlIG1vc3QgcHJlc3NpbmcgdGhpbmcgaXMgdGhhdCBJIG5lZWQgdG8gZXhwYW5kIHRoZSBzY29wZSBhIGJpdC4gTGV0J3Mgc2VlIGlmIHdlJ3ZlIGFkZHJlc3NlZCB0aGlzIHdpdGggYGFsbG9jX3BhcmFtX3RhcmdldGAgYXMgd2VsbC4gUGVyaGFwcyB0aGUgaXNzdWVzIHN0ZW0gZnJvbSBob3cgdGhhdCdzIGJlaW5nIGhhbmRsZWQuIFdlIG5lZWQgdG8gYmUgZXhoYXVzdGl2ZSB0byBlbnN1cmUgd2UncmUgbm90IG1pc3NpbmcgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODUxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1NS44NjY4NTM3NDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjIwOlxcdC8qIEFsbG9jYXRlIG5ldyB0YXJnZXQgKGZyb20gYm9vdC9tb2R1bGUgcGFyYW0pIGFuZCBzZXR1cCBuZXRwb2xsIGZvciBpdCAqL1xcbjI2MjE6XFx0c3RhdGljIHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqYWxsb2NfcGFyYW1fdGFyZ2V0KGNoYXIgKnRhcmdldF9jb25maWcsXFxuMjYyMjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgaW50IGNtZGxpbmVfY291bnQpXFxuMjYyMzpcXHR7XFxuMjYyNDpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbjI2MjU6XFx0XFx0aW50IGVycjtcXG4yNjI2OlxcdFxcbjI2Mjc6XFx0XFx0bnQgPSBhbGxvY19hbmRfaW5pdCgpO1xcbjI2Mjg6XFx0XFx0aWYgKCFudCkge1xcbjI2Mjk6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4yNjMwOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNjMxOlxcdFxcdH1cXG4yNjMyOlxcdFxcbjI2MzM6XFx0XFx0aWYgKCp0YXJnZXRfY29uZmlnID09ICcrJykge1xcbjI2MzQ6XFx0XFx0XFx0bnQtXFx1MDAzZWV4dGVuZGVkID0gdHJ1ZTtcXG4yNjM1OlxcdFxcdFxcdHRhcmdldF9jb25maWcrKztcXG4yNjM2OlxcdFxcdH1cXG4yNjM3OlxcdFxcbjI2Mzg6XFx0XFx0aWYgKCp0YXJnZXRfY29uZmlnID09ICdyJykge1xcbjI2Mzk6XFx0XFx0XFx0aWYgKCFudC1cXHUwMDNlZXh0ZW5kZWQpIHtcXG4yNjQwOlxcdFxcdFxcdFxcdHByX2VycihcXFwiTmV0Y29uc29sZSBjb25maWd1cmF0aW9uIGVycm9yLiBSZWxlYXNlIGZlYXR1cmUgcmVxdWlyZXMgZXh0ZW5kZWQgbG9nIG1lc3NhZ2VcXFwiKTtcXG4yNjQxOlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMjY0MjpcXHRcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMjY0MzpcXHRcXHRcXHR9XFxuMjY0NDpcXHRcXHRcXHRudC1cXHUwMDNlcmVsZWFzZSA9IHRydWU7XFxuMjY0NTpcXHRcXHRcXHR0YXJnZXRfY29uZmlnKys7XFxuMjY0NjpcXHRcXHR9XFxuMjY0NzpcXHRcXG4yNjQ4OlxcdFxcdC8qIFBhcnNlIHBhcmFtZXRlcnMgYW5kIHNldHVwIG5ldHBvbGwgKi9cXG4yNjQ5OlxcdFxcdGVyciA9IG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUobnQsIHRhcmdldF9jb25maWcpO1xcbjI2NTA6XFx0XFx0aWYgKGVycilcXG4yNjUxOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4yNjUyOlxcdFxcbjI2NTM6XFx0XFx0LyogSW5pdGlhbGlzZSB0aGUgc2tiIHBvb2wgYmVmb3JlIG5ldHBvbGxfc2V0dXAoKSBzbyB0aGUgcG9vbCBpc1xcbjI2NTQ6XFx0XFx0ICogdmFsaWQgYXMgc29vbiBhcyBudC1cXHUwMDNlbnAuZGV2IGJlY29tZXMgdmlzaWJsZS4gVGhlIHRhcmdldCBpcyBub3RcXG4yNjU1OlxcdFxcdCAqIHlldCBvbiB0YXJnZXRfbGlzdCwgc28gYSBuZXRkZXYgZXZlbnQgY2Fubm90IHJlYWNoIGl0IGhlcmUsIGJ1dFxcbjI2NTY6XFx0XFx0ICogbWlycm9yIHRoZSBjb25maWdmcyBwYXRoIGZvciBzeW1tZXRyeS5cXG4yNjU3OlxcdFxcdCAqL1xcbjI2NTg6XFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcXG4yNjU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo0OTo1NS44NjY5OTMyNDVaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjIxMTk5MTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIERlZXBlcjogRXhwYW5kaW5nIHRoZSBTY29wZSBvZiB0aGUgSW5xdWlyeSoqXG5cbk9rYXksIEkndmUganVzdCBiZWVuIGxvb2tpbmcgYXQgYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIG1vZHVsZSwgYnV0IEkgdGhpbmsgSSBuZWVkIHRvIGJyb2FkZW4gbXkgaW52ZXN0aWdhdGlvbiBhIGJpdC4gTXkgaW5pdGlhbCBmb2N1cyB3YXMgb24gW2ltcGxpZWQgcHJldmlvdXMgdG9waWMsIGUuZy4sIGVycm9yIGhhbmRsaW5nLCBhIHNwZWNpZmljIGRyaXZlcl0uIEhvd2V2ZXIsIGl0J3Mgb2NjdXJyZWQgdG8gbWUgdGhhdCBhIHJlbGF0ZWQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgbWFrZV9uZXRjb25zb2xlX3RhcmdldGAsIG1pZ2h0IGJlIHJlbGV2YW50IGFuZCBJIHNob3VsZG4ndCBpZ25vcmUgaXQuIEl0J3MgbGlrZWx5IHRoYXQgYSBjaGFuZ2Ugb3IgaXNzdWUgaW4gb25lIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMgaW4gdGhlIG90aGVyLiBJdCBtaWdodCBwcm92aWRlIG1vcmUgY29udGV4dCBvciByZXZlYWwgYSBtb3JlIGhvbGlzdGljIHBlcnNwZWN0aXZlIG9uIHRoZSBwcm9ibGVtIG9yIHRhc2sgYXQgaGFuZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gb3BlbiB0aGF0IGZpbGUgb3IgbW9kdWxlIGFuZCBleGFtaW5lIHRoZSBsb2dpYyB0aGVyZSB0b28sIGFzIHBhcnQgb2YgdGhpcyBhbmFseXNpcy4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBpbnRlcnBsYXkgb3Igc2hhcmVkIHJlc291cmNlcywgYW5kIEkgd2FudCB0byBjb3ZlciBhbGwgYmFzZXMgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYzNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NDk6NTguMDc4OTg3OTgyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc0NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc0NTpcXHQgKiBHcm91cCBvcGVyYXRpb25zIGFuZCB0eXBlIGZvciBuZXRjb25zb2xlX3N1YnN5cy5cXG4xNzQ2OlxcdCAqL1xcbjE3NDc6XFx0XFxuMTc0ODpcXHRzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbWFrZV9uZXRjb25zb2xlX3RhcmdldChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4xNzQ5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuMTc1MDpcXHR7XFxuMTc1MTpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50O1xcbjE3NTI6XFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4xNzUzOlxcdFxcbjE3NTQ6XFx0XFx0LyogQ2hlY2tpbmcgaWYgYSB0YXJnZXQgYnkgdGhpcyBuYW1lIHdhcyBjcmVhdGVkIGF0IGJvb3QgdGltZS4gIElmIHNvLFxcbjE3NTU6XFx0XFx0ICogYXR0YWNoIGEgY29uZmlnZnMgZW50cnkgdG8gdGhhdCB0YXJnZXQuICBUaGlzIGVuYWJsZXMgZHluYW1pY1xcbjE3NTY6XFx0XFx0ICogY29udHJvbC5cXG4xNzU3OlxcdFxcdCAqL1xcbjE3NTg6XFx0XFx0aWYgKCFzdHJuY21wKG5hbWUsIE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCxcXG4xNzU5OlxcdFxcdFxcdCAgICAgc3RybGVuKE5FVENPTlNPTEVfUEFSQU1fVEFSR0VUX1BSRUZJWCkpKSB7XFxuMTc2MDpcXHRcXHRcXHRudCA9IGZpbmRfY21kbGluZV90YXJnZXQobmFtZSk7XFxuMTc2MTpcXHRcXHRcXHRpZiAobnQpIHtcXG4xNzYyOlxcdFxcdFxcdFxcdGluaXRfdGFyZ2V0X2NvbmZpZ19ncm91cChudCwgbmFtZSk7XFxuMTc2MzpcXHRcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNm50LVxcdTAwM2Vncm91cDtcXG4xNzY0OlxcdFxcdFxcdH1cXG4xNzY1OlxcdFxcdH1cXG4xNzY2OlxcdFxcbjE3Njc6XFx0XFx0bnQgPSBhbGxvY19hbmRfaW5pdCgpO1xcbjE3Njg6XFx0XFx0aWYgKCFudClcXG4xNzY5OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjE3NzA6XFx0XFxuMTc3MTpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSBjb25maWdfZ3JvdXAgbWVtYmVyICovXFxuMTc3MjpcXHRcXHRpbml0X3RhcmdldF9jb25maWdfZ3JvdXAobnQsIG5hbWUpO1xcbjE3NzM6XFx0XFxuMTc3NDpcXHRcXHQvKiBBZGRpbmcsIGJ1dCBpdCBpcyBkaXNhYmxlZCAqL1xcbjE3NzU6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4xNzc2OlxcdFxcdGxpc3RfYWRkKFxcdTAwMjZudC1cXHUwMDNlbGlzdCwgXFx1MDAyNnRhcmdldF9saXN0KTtcXG4xNzc3OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRhcmdldF9saXN0X2xvY2ssIGZsYWdzKTtcXG4xNzc4OlxcdFxcbjE3Nzk6XFx0XFx0cmV0dXJuIFxcdTAwMjZudC1cXHUwMDNlZ3JvdXA7XFxuMTc4MDpcXHR9XFxuMTc4MTpcXHRcXG4xNzgyOlxcdHN0YXRpYyB2b2lkIGRyb3BfbmV0Y29uc29sZV90YXJnZXQoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXFxuMTc4MzpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuMTc4NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjQ5OjU4LjA3OTEzNDYwMloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MjkyOTEzMTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgaW5ldF9hZGRyIFN0cnVjdHVyZSBpbiBuZXRjb25zb2xlLmMqKlxuXG5Pa2F5LCBzbyBgYWxsb2NfYW5kX2luaXRgIHVzZXMgYGt6YWxsb2Nfb2JqKCpudClgLCBtZWFuaW5nIHRoZSBgbnRgIHN0cnVjdCBpcyBjb21wbGV0ZWx5IHplcm8taW5pdGlhbGl6ZWQuIFRoYXQncyBnb29kIHRvIGtub3cuIFNwZWNpZmljYWxseSwgdGhpcyBtZWFucyB0aGUgYGZhbWlseWAgbWVtYmVyLCB3aGljaCBJIHNlZSBpcyBwYXJ0IG9mIHRoZSBgaW5ldF9hZGRyYCBzdHJ1Y3R1cmUsIHdpbGwgc3RhcnQgYXMgYDBgLCB3aGljaCB0cmFuc2xhdGVzIHRvIGBBRl9VTlNQRUNgLiBUaGUgYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgbWVtYmVycywgYWxzbyBgaW5ldF9hZGRyYCBzdHJ1Y3RzLCBhcmUgYWxzbyB6ZXJvZWQgb3V0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBpbmV0X2FkZHJgIGlzIHVzZWQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgcG90ZW50aWFsIHRyYW5zaXRpb25zIGJldHdlZW4gSVB2NCBhbmQgSVB2Ni4gTGV0J3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSBob3cgYG5ldHBvbGxfcGFyc2VfaXBfYWRkcmAgaGFuZGxlcyBpdDpcblxuYGBgY1xuc3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxue1xuXHRjb25zdCBjaGFyICplbmQgPSBOVUxMO1xuXHRpbnQgbGVuO1xuXG5cdGxlbiA9IHN0cmxlbihzdHIpO1xuXHRpZiAobGVuID09IDApXG5cdFx0cmV0dXJuIC0xO1xuXHRpZiAoc3RyW2xlbiAtIDFdID09ICdcXG4nKVxuXHRcdGxlbiAtPSAxO1xuXG5cdGlmIChpbjRfcHRvbihzdHIsIGxlbiwgKHZvaWQgKilcdTAwMjZhZGRyLVx1MDAzZWlwLCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcblx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuXHRcdGFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGlmIChJU19FTkFCTEVEKENPTkZJR19JUFY2KSBcdTAwMjZcdTAwMjZcblx0ICAgIGluNl9wdG9uKHN0ciwgbGVuLCAodm9pZCAqKVx1MDAyNmFkZHItXHUwMDNlaW42LCAtMSwgXHUwMDI2ZW5kKSBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcblx0ICAgICghZW5kIHx8ICplbmQgPT0gMCB8fCAqZW5kID09ICdcXG4nKSkge1xuXHRcdGFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVDY7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gLTE7XG59XG5gYGBcblxuT2theSwgc28gd2hlbiBgaW40X3B0b25gIHN1Y2NlZWRzLCBpdCB3cml0ZXMgNCBieXRlcyB0byBgYWRkci1cdTAwM2VpcGAgYW5kIHNldHMgYGFkZHItXHUwMDNlZmFtaWx5ID0gQUZfSU5FVGAuIE1ha2VzIHNlbnNlLiBXaGVuIGBpbjZfcHRvbmAgc3VjY2VlZHMsIGl0IHdyaXRlcyAxNiBieXRlcyB0byBgYWRkci1cdTAwM2VpbjZgLCBhbmQgc2V0cyBgYWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUNmAuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgaG93IGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIGFyZSB1cGRhdGVkLCBiZWNhdXNlIHRoZXkgYXJlIGBpbmV0X2FkZHJgIHN0cnVjdHVyZXMsIHdoaWNoIGFyZSBsaWtlbHkgdW5pb25zLlxuXG5UaGUgdnVsbmVyYWJpbGl0eSBjb3VsZCBjb21lIGludG8gcGxheSB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXMuIGBsb2NhbF9pcF9zdG9yZWAgaXMgYSBnb29kIGV4YW1wbGUuXG5cbmBgYGNcblx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFx1MDAyNm50LVx1MDAzZWxvY2FsX2lwKSBcdTAwM2MgMClcblx0XHRnb3RvIG91dF91bmxvY2s7XG5gYGBcblxuTGV0J3Mgc2F5IGBudC1cdTAwM2Vsb2NhbF9pcGAgd2FzIHByZXZpb3VzbHkgSVB2NiAobWVhbmluZyB0aGUgYGluNmAgbWVtYmVyIGhlbGQgMTYgYnl0ZXMpLiBOb3csIGBuZXRwb2xsX3BhcnNlX2lwX2FkZHJgIHBhcnNlcyBhbiBJUHY0IGFkZHJlc3MuICBgaW40X3B0b25gIHdyaXRlcyBvbmx5IDQgYnl0ZXMgaW50byBgYWRkci1cdTAwM2VpcGAgKHRoZSBzdGFydCBvZiB0aGUgdW5pb24pLCBhbmQgc2V0cyBgYWRkci1cdTAwM2VmYW1pbHkgPSBBRl9JTkVUYC4gIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgd2hlbiBgYWRkci1cdTAwM2VmYW1pbHlgIGlzIGBBRl9JTkVUYCwgaXMgYW55dGhpbmcgYWN0dWFsbHkgKnJlYWRpbmcqIHRoZSAqcmVtYWluaW5nKiAxMiBieXRlcyBvZiB0aGUgdW5pb24/IElmIG5vdCwgdGhlcmUncyBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrIG9yIGNvcnJ1cHRpb24uXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHN1YnNlcXVlbnQgY29kZSBwYXRocyBtaWdodCB1c2UgdGhlIGBpbjZgIG1lbWJlciBhZnRlciB0aGlzIGtpbmQgb2YgdHJhbnNpdGlvbi4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgYWxsIGFjY2Vzc2VzIHRvIGJvdGggYGxvY2FsX2lwYCBhbmQgYHJlbW90ZV9pcGAgdG8gYmUgc3VyZS4gU28sIGxldCdzIGdyZXAgZm9yIGBsb2NhbF9pcGAgYW5kIGByZW1vdGVfaXBgIHdpdGhpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gVGhhdCBzaG91bGQgcmV2ZWFsIGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoZXNlIG1lbWJlcnMgYXJlIHVzZWQgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgaXNzdWVzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ1OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjUwOjAzLjM3MjA1MDc2N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4MDg0NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihsb2NhbF9pcHxyZW1vdGVfaXApXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTcyPXN0cnVjdCBuZXRjb25zX3VzZXJkYXRhIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDQtICpcXHRcXHRsb2NhbF9tYWNcXHQocmVhZC1vbmx5KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDU6ICogQGxvY2FsX2lwOlxcdFNvdXJjZSBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDY6ICogQHJlbW90ZV9pcDpcXHREZXN0aW5hdGlvbiBJUCBhZGRyZXNzIG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDctICogQGxvY2FsX3BvcnQ6XFx0U291cmNlIFVEUCBwb3J0IG9mIHRoZSB0YXJnZXQgKHJlYWQtd3JpdGUpLlxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxOD1zdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQge1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNS1cXHRzdHJ1Y3QgbmV0cG9sbFxcdFxcdG5wO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMzY6XFx0c3RydWN0IGluZXRfYWRkclxcdGxvY2FsX2lwLCByZW1vdGVfaXA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIzNy1cXHR1MTZcXHRcXHRcXHRsb2NhbF9wb3J0LCByZW1vdGVfcG9ydDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00MDE9c3RhdGljIGNoYXIgKm5ldGNvbnNfZWdyZXNzX2RldihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxMC0vKlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0MTE6ICogUG9wdWxhdGUgdGhlIHRhcmdldCdzIGxvY2FsX2lwIHdpdGggdGhlIElQdjYgYWRkcmVzcyBmcm9tIG5kZXYuXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQxMi0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NDEzPXN0YXRpYyBpbnQgbmV0Y29uc190YWtlX2lwdjYoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzMtXFx0XFx0XFx0aWYgKCEhKGlwdjZfYWRkcl90eXBlKFxcdTAwMjZpZnAtXFx1MDAzZWFkZHIpIFxcdTAwMjYgSVBWNl9BRERSX0xJTktMT0NBTCkgIT1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDM0OlxcdFxcdFxcdFxcdCEhKGlwdjZfYWRkcl90eXBlKFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmluNikgXFx1MDAyNiBJUFY2X0FERFJfTElOS0xPQ0FMKSlcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDM1LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzYtXFx0XFx0XFx0LyogR290IHRoZSBJUCwgbGV0J3MgcmV0dXJuICovXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQzNzpcXHRcXHRcXHRudC1cXHUwMDNlbG9jYWxfaXAuaW42ID0gaWZwLVxcdTAwM2VhZGRyO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0Mzg6XFx0XFx0XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ2O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00MzktXFx0XFx0XFx0ZXJyID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NDktXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1MDpcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVB2NiAlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00NTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU0LS8qXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ1NTogKiBQb3B1bGF0ZSB0aGUgdGFyZ2V0J3MgbG9jYWxfaXAgd2l0aCB0aGUgSVB2NCBhZGRyZXNzIGZyb20gbmRldi5cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNDU2LSAqL1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00NTc9c3RhdGljIGludCBuZXRjb25zX3Rha2VfaXB2NChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ3OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NDc5OlxcdG50LVxcdTAwM2Vsb2NhbF9pcC5pcCA9IGlmYS1cXHUwMDNlaWZhX2xvY2FsO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo0ODA6XFx0bnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9IEFGX0lORVQ7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ4MTpcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVAgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pcCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ4Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz00ODY9c3RhdGljIGludCBuZXRjb25zX25ldHBvbGxfc2V0dXAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudClcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy00OTQtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjQ5NTpcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfVU5TUEVDKSB7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ5Ni1cXHRcXHRucF9lcnIobnAsIFxcXCJyZW1vdGUgSVAgYWRkcmVzcyBub3QgY29uZmlndXJlZCwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTQ5OS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTAwOlxcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1MDE6XFx0ICAgIG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgIT0gbnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTAyLVxcdFxcdG5wX2VycihucCwgXFxcImxvY2FsIGFuZCByZW1vdGUgSVAgYWRkcmVzcyBmYW1pbGllcyBkaWZmZXIsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NDEtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjU0MjpcXHRpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NTQzOlxcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTQ0LVxcdFxcdFxcdGVyciA9IG5ldGNvbnNfdGFrZV9pcHY2KG50LCBuZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy01NjctXFx0aWYgKGlwX292ZXJ3cml0dGVuKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo1Njg6XFx0XFx0bWVtc2V0KFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAsIDAsIHNpemVvZihudC1cXHUwMDNlbG9jYWxfaXApKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNTY5LVxcdG5ldGRldl9wdXQobmRldiwgXFx1MDAyNm5wLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9NzI1PXN0YXRpYyB2b2lkIG5ldGNvbnNvbGVfcHJpbnRfYmFubmVyKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzI5LVxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlbG9jYWxfcG9ydCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjczMDpcXHRpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczMS1cXHRcXHRucF9pbmZvKG5wLCBcXFwibG9jYWwgSVAgdW5zZXRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3MzI6XFx0ZWxzZSBpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzMzOlxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY2IGFkZHJlc3MgJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAuaW42KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzM0LVxcdGVsc2VcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzM1OlxcdFxcdG5wX2luZm8obnAsIFxcXCJsb2NhbCBJUHY0IGFkZHJlc3MgJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pcCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTczNi1cXHRucF9pbmZvKG5wLCBcXFwiaW50ZXJmYWNlIG5hbWUgJyVzJ1xcXFxuXFxcIiwgbnAtXFx1MDAzZWRldl9uYW1lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03MzgtXFx0bnBfaW5mbyhucCwgXFxcInJlbW90ZSBwb3J0ICVkXFxcXG5cXFwiLCBudC1cXHUwMDNlcmVtb3RlX3BvcnQpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3Mzk6XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQylcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQwLVxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVAgdW5zZXRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3NDE6XFx0ZWxzZSBpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjc0MjpcXHRcXHRucF9pbmZvKG5wLCBcXFwicmVtb3RlIElQdjYgYWRkcmVzcyAlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQzLVxcdGVsc2VcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzQ0OlxcdFxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgSVB2NCBhZGRyZXNzICVwSTRcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmlwKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzQ1LVxcdG5wX2luZm8obnAsIFxcXCJyZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAlcE1cXFxcblxcXCIsIG50LVxcdTAwM2VyZW1vdGVfbWFjKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz03NTE9c3RhdGljIGludCBuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY29uc3QgY2hhciAqc3RyLCBzdHJ1Y3QgaW5ldF9hZGRyICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc5MS0gKlxcdFxcdFxcdFxcdHxcXHRyZW1vdGVfcG9ydFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo3OTI6ICpcXHRcXHRcXHRcXHR8XFx0bG9jYWxfaXBcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzkzOiAqXFx0XFx0XFx0XFx0fFxcdHJlbW90ZV9pcFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy03OTQtICpcXHRcXHRcXHRcXHR8XFx0bG9jYWxfbWFjXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9ODcwPXN0YXRpYyBzc2l6ZV90IHJlbW90ZV9wb3J0X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc0LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4NzU6c3RhdGljIHNzaXplX3QgbG9jYWxfaXBfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKmJ1ZilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtODc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04NzgtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg3OTpcXHRpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4MC1cXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODE6XFx0aWYgKG50LVxcdTAwM2Vsb2NhbF9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg4MjpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcEk2Y1xcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODMtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4ODQ6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNFxcXFxuXFxcIiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pcCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4NS19XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg4Ni1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODg3OnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwgY2hhciAqYnVmKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy04ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5MC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6ODkxOlxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9VTlNQRUMpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5Mi1cXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTM6XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzo4OTQ6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXBJNmNcXFxcblxcXCIsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwLmluNik7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5NS1cXHRlbHNlXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjg5NjpcXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIlcEk0XFxcXG5cXFwiLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcC5pcCk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTg5Ny19XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTIxND1zdGF0aWMgc3NpemVfdCByZW1vdGVfcG9ydF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzNS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTIzNjpzdGF0aWMgc3NpemVfdCBsb2NhbF9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTIzNy1cXHRcXHRzaXplX3QgY291bnQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI0OC1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTI0OTpcXHRpZiAobmV0cG9sbF9wYXJzZV9pcF9hZGRyKGJ1ZiwgXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcCkgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjUwLVxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xMjU3LVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxMjU4OnN0YXRpYyBzc2l6ZV90IHJlbW90ZV9pcF9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNvbnN0IGNoYXIgKmJ1ZixcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTI1OS1cXHQgICAgICAgc2l6ZV90IGNvdW50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNzAtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjEyNzE6XFx0aWYgKG5ldHBvbGxfcGFyc2VfaXBfYWRkcihidWYsIFxcdTAwMjZudC1cXHUwMDNlcmVtb3RlX2lwKSBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTEyNzItXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2NzM9Q09ORklHRlNfQVRUUigsIHJlbW90ZV9wb3J0KTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY3NDpDT05GSUdGU19BVFRSKCwgbG9jYWxfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoxNjc1OkNPTkZJR0ZTX0FUVFIoLCByZW1vdGVfaXApO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNjc2LUNPTkZJR0ZTX0FUVFJfUk8oLCBsb2NhbF9tYWMpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTE2ODE9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm5ldGNvbnNvbGVfdGFyZ2V0X2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTY4Ny1cXHRcXHUwMDI2YXR0cl9yZW1vdGVfcG9ydCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY4ODpcXHRcXHUwMDI2YXR0cl9sb2NhbF9pcCxcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MTY4OTpcXHRcXHUwMDI2YXR0cl9yZW1vdGVfaXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTE2OTAtXFx0XFx1MDAyNmF0dHJfbG9jYWxfbWFjLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIwNzA9c3RhdGljIHZvaWQgbmV0cG9sbF91ZHBfY2hlY2tzdW0oc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCxcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDgwLVxcdHVkcGgtXFx1MDAzZWNoZWNrID0gMDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjA4MTpcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwODI6XFx0XFx0dWRwaC1cXHUwMDNlY2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoXFx1MDAyNm50LVxcdTAwM2Vsb2NhbF9pcC5pbjYsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIwODM6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm50LVxcdTAwM2VyZW1vdGVfaXAuaW42LFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMDg0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHVkcF9sZW4sIElQUFJPVE9fVURQLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODYtXFx0ZWxzZVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDg3OlxcdFxcdHVkcGgtXFx1MDAzZWNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMobnQtXFx1MDAzZWxvY2FsX2lwLmlwLFxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMDg4OlxcdFxcdFxcdFxcdFxcdFxcdG50LVxcdTAwM2VyZW1vdGVfaXAuaXAsXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIwODktXFx0XFx0XFx0XFx0XFx0XFx0dWRwX2xlbiwgSVBQUk9UT19VRFAsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjExMz1zdGF0aWMgdm9pZCBwdXNoX2V0aChzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxMjEtXFx0ZXRoZXJfYWRkcl9jb3B5KGV0aC1cXHUwMDNlaF9kZXN0LCBudC1cXHUwMDNlcmVtb3RlX21hYyk7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxMjI6XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTIzLVxcdFxcdGV0aC1cXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTIxMjg9c3RhdGljIHZvaWQgcHVzaF9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjE0OS1cXHRpcGgtXFx1MDAzZWNoZWNrID0gMDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE1MDpcXHRwdXRfdW5hbGlnbmVkKG50LVxcdTAwM2Vsb2NhbF9pcC5pcCwgXFx1MDAyNmlwaC1cXHUwMDNlc2FkZHIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTUxOlxcdHB1dF91bmFsaWduZWQobnQtXFx1MDAzZXJlbW90ZV9pcC5pcCwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yMTUyLVxcdGlwaC1cXHUwMDNlY2hlY2sgPSBpcF9mYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKilpcGgsIGlwaC1cXHUwMDNlaWhsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yMTU2PXN0YXRpYyB2b2lkIHB1c2hfaXB2NihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzMtXFx0aXA2aC1cXHUwMDNlaG9wX2xpbWl0ID0gMzI7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIxNzQ6XFx0aXA2aC1cXHUwMDNlc2FkZHIgPSBudC1cXHUwMDNlbG9jYWxfaXAuaW42O1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMTc1OlxcdGlwNmgtXFx1MDAzZWRhZGRyID0gbnQtXFx1MDAzZXJlbW90ZV9pcC5pbjY7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE4MD1zdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTAtXFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6MjE5MTpcXHRpZiAobnQtXFx1MDAzZXJlbW90ZV9pcC5mYW1pbHkgPT0gQUZfSU5FVDYpXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTIxOTItXFx0XFx0aXBfbGVuID0gdWRwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwNi1cXHRwdXNoX3VkcChudCwgc2tiLCBsZW4pO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyMjA3OlxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjIwOC1cXHRcXHRwdXNoX2lwdjYobnQsIHNrYiwgbGVuKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYz0yNTMzPXN0YXRpYyBpbnQgbmV0Y29uc29sZV9wYXJzZXJfY21kbGluZShzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50LCBjaGFyICpvcHQpXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU1NC1cXHRcXHQqZGVsaW0gPSAwO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTU1OlxcdFxcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcXHUwMDI2bnQtXFx1MDAzZWxvY2FsX2lwKSBcXHUwMDNjIDApXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTI1NTYtXFx0XFx0XFx0Z290byBwYXJzZV9mYWlsZWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjU5Ny1cXHQqZGVsaW0gPSAwO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNTk4OlxcdGlmIChuZXRwb2xsX3BhcnNlX2lwX2FkZHIoY3VyLCBcXHUwMDI2bnQtXFx1MDAzZXJlbW90ZV9pcCkgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNTk5LVxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAwOlxcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IEFGX1VOU1BFQyBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYzoyNjAxOlxcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0yNjAyLVxcdFxcdGdvdG8gcGFyc2VfZmFpbGVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDowMy42MjAxNDM0MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNTQwNzExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgSSdtIGxvb2tpbmcgaW50byByZWdhcmRpbmcgYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGA6XG5cbioqRGlzc2VjdGluZyBuZXRjb25zX25ldHBvbGxfc2V0dXAgYW5kIFRhcmdldCBFbmFibGVtZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGAg4oCTIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0YXJnZXQgZW5hYmxlbWVudCB3aXRoaW4gdGhlIG5ldGNvbnNvbGUgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkgc2VlbXMgdG8gYmUgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jYC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGNyaXRpY2FsIHNlY3Rpb24gZnJvbSBsaW5lIDQ4MCB0byA1NzUuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoaXMgY29kZSBjaHVuayB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGFyZ2V0IGZvciB0aGUgY29uc29sZSBpcyBzZXQgdXAgYW5kIGFjdGl2YXRlZCB2aWEgdGhlIG5ldHBvbGwgbWVjaGFuaXNtLiBJdCdzIGxpa2VseSBpbiB0aGlzIHNlY3Rpb24gSSdsbCBmaW5kIHRoZSBsb2dpYyB0aGF0IGRldGVybWluZXMgd2hlcmUgYW5kIGhvdyBjb25zb2xlIG1lc3NhZ2VzIGFyZSB1bHRpbWF0ZWx5IHJvdXRlZCwgYW5kIHdoYXQgdHJpZ2dlcnMgdGhhdCByZWRpcmVjdGlvbiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIGFsbG93IG1lIHRvIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGEga2V5IGVsZW1lbnQgb2YgbmV0Y29uc29sZSBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjUwOjA1LjYyNTU1NDc5MloiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4NSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4NTpcXHRcXG4gNDg2OlxcdHN0YXRpYyBpbnQgbmV0Y29uc19uZXRwb2xsX3NldHVwKHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQpXFxuIDQ4NzpcXHR7XFxuIDQ4ODpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnM7XFxuIDQ4OTpcXHRcXHRjaGFyIGJ1ZltNQUNfQUREUl9TVFJfTEVOICsgMV07XFxuIDQ5MDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IE5VTEw7XFxuIDQ5MTpcXHRcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbiA0OTI6XFx0XFx0Ym9vbCBpcF9vdmVyd3JpdHRlbiA9IGZhbHNlO1xcbiA0OTM6XFx0XFx0aW50IGVycjtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbiA0OTY6XFx0XFx0XFx0bnBfZXJyKG5wLCBcXFwicmVtb3RlIElQIGFkZHJlc3Mgbm90IGNvbmZpZ3VyZWQsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4gNDk3OlxcdFxcdFxcdHJldHVybiAtRURFU1RBRERSUkVRO1xcbiA0OTg6XFx0XFx0fVxcbiA0OTk6XFx0XFxuIDUwMDpcXHRcXHRpZiAobnQtXFx1MDAzZWxvY2FsX2lwLmZhbWlseSAhPSBBRl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4gNTAxOlxcdFxcdCAgICBudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ICE9IG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5KSB7XFxuIDUwMjpcXHRcXHRcXHRucF9lcnIobnAsIFxcXCJsb2NhbCBhbmQgcmVtb3RlIElQIGFkZHJlc3MgZmFtaWxpZXMgZGlmZmVyLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuIDUwMzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTA0OlxcdFxcdH1cXG4gNTA1OlxcdFxcbiA1MDY6XFx0XFx0cnRubF9sb2NrKCk7XFxuIDUwNzpcXHRcXHRpZiAobnAtXFx1MDAzZWRldl9uYW1lWzBdKVxcbiA1MDg6XFx0XFx0XFx0bmRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgbnAtXFx1MDAzZWRldl9uYW1lKTtcXG4gNTA5OlxcdFxcdGVsc2UgaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobnAtXFx1MDAzZWRldl9tYWMpKVxcbiA1MTA6XFx0XFx0XFx0bmRldiA9IGRldl9nZXRieWh3YWRkcihuZXQsIEFSUEhSRF9FVEhFUiwgbnAtXFx1MDAzZWRldl9tYWMpO1xcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRpZiAoIW5kZXYpIHtcXG4gNTEzOlxcdFxcdFxcdG5wX2VycihucCwgXFxcIiVzIGRvZXNuJ3QgZXhpc3QsIGFib3J0aW5nXFxcXG5cXFwiLFxcbiA1MTQ6XFx0XFx0XFx0ICAgICAgIG5ldGNvbnNfZWdyZXNzX2RldihucCwgYnVmLCBzaXplb2YoYnVmKSkpO1xcbiA1MTU6XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4gNTE2OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiA1MTc6XFx0XFx0fVxcbiA1MTg6XFx0XFx0bmV0ZGV2X2hvbGQobmRldiwgXFx1MDAyNm5wLVxcdTAwM2VkZXZfdHJhY2tlciwgR0ZQX0tFUk5FTCk7XFxuIDUxOTpcXHRcXG4gNTIwOlxcdFxcdGlmIChuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmRldikpIHtcXG4gNTIxOlxcdFxcdFxcdG5wX2VycihucCwgXFxcIiVzIGlzIGEgc2xhdmUgZGV2aWNlLCBhYm9ydGluZ1xcXFxuXFxcIixcXG4gNTIyOlxcdFxcdFxcdCAgICAgICBuZXRjb25zX2VncmVzc19kZXYobnAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTtcXG4gNTIzOlxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4gNTI0OlxcdFxcdFxcdGdvdG8gcHV0O1xcbiA1MjU6XFx0XFx0fVxcbiA1MjY6XFx0XFxuIDUyNzpcXHRcXHRpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpIHtcXG4gNTI4OlxcdFxcdFxcdG5wX2luZm8obnAsIFxcXCJkZXZpY2UgJXMgbm90IHVwIHlldCwgZm9yY2luZyBpdFxcXFxuXFxcIixcXG4gNTI5OlxcdFxcdFxcdFxcdG5ldGNvbnNfZWdyZXNzX2RldihucCwgYnVmLCBzaXplb2YoYnVmKSkpO1xcbiA1MzA6XFx0XFxuIDUzMTpcXHRcXHRcXHRlcnIgPSBkZXZfb3BlbihuZGV2LCBOVUxMKTtcXG4gNTMyOlxcdFxcdFxcdGlmIChlcnIpIHtcXG4gNTMzOlxcdFxcdFxcdFxcdG5wX2VycihucCwgXFxcImZhaWxlZCB0byBvcGVuICVzXFxcXG5cXFwiLCBuZGV2LVxcdTAwM2VuYW1lKTtcXG4gNTM0OlxcdFxcdFxcdFxcdGdvdG8gcHV0O1xcbiA1MzU6XFx0XFx0XFx0fVxcbiA1MzY6XFx0XFxuIDUzNzpcXHRcXHRcXHRydG5sX3VubG9jaygpO1xcbiA1Mzg6XFx0XFx0XFx0bmV0Y29uc193YWl0X2NhcnJpZXIobnAsIG5kZXYpO1xcbiA1Mzk6XFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuIDU0MDpcXHRcXHR9XFxuIDU0MTpcXHRcXG4gNTQyOlxcdFxcdGlmIChudC1cXHUwMDNlbG9jYWxfaXAuZmFtaWx5ID09IEFGX1VOU1BFQykge1xcbiA1NDM6XFx0XFx0XFx0aWYgKG50LVxcdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2KVxcbiA1NDQ6XFx0XFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjYobnQsIG5kZXYpO1xcbiA1NDU6XFx0XFx0XFx0ZWxzZVxcbiA1NDY6XFx0XFx0XFx0XFx0ZXJyID0gbmV0Y29uc190YWtlX2lwdjQobnQsIG5kZXYpO1xcbiA1NDc6XFx0XFx0XFx0aWYgKGVycilcXG4gNTQ4OlxcdFxcdFxcdFxcdGdvdG8gcHV0O1xcbiA1NDk6XFx0XFx0XFx0aXBfb3ZlcndyaXR0ZW4gPSB0cnVlO1xcbiA1NTA6XFx0XFx0fVxcbiA1NTE6XFx0XFxuIDU1MjpcXHRcXHRlcnIgPSBfX25ldHBvbGxfc2V0dXAobnAsIG5kZXYpO1xcbiA1NTM6XFx0XFx0aWYgKGVycilcXG4gNTU0OlxcdFxcdFxcdGdvdG8gcHV0O1xcbiA1NTU6XFx0XFx0cnRubF91bmxvY2soKTtcXG4gNTU2OlxcdFxcbiA1NTc6XFx0XFx0LyogTWFrZSBzdXJlIGFsbCBOQVBJIHBvbGxzIHdoaWNoIHN0YXJ0ZWQgYmVmb3JlIGRldi1cXHUwMDNlbnBpbmZvXFxuIDU1ODpcXHRcXHQgKiB3YXMgdmlzaWJsZSBoYXZlIGV4aXRlZCBiZWZvcmUgd2Ugc3RhcnQgY2FsbGluZyBOQVBJIHBvbGwuXFxuIDU1OTpcXHRcXHQgKiBOQVBJIHNraXBzIGxvY2tpbmcgaWYgZGV2LVxcdTAwM2VucGluZm8gaXMgTlVMTC5cXG4gNTYwOlxcdFxcdCAqL1xcbiA1NjE6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDU2MjpcXHRcXG4gNTYzOlxcdFxcdHJldHVybiAwO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRwdXQ6XFxuIDU2NjpcXHRcXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKG5wLVxcdTAwM2VkZXYpO1xcbiA1Njc6XFx0XFx0aWYgKGlwX292ZXJ3cml0dGVuKVxcbiA1Njg6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZudC1cXHUwMDNlbG9jYWxfaXAsIDAsIHNpemVvZihudC1cXHUwMDNlbG9jYWxfaXApKTtcXG4gNTY5OlxcdFxcdG5ldGRldl9wdXQobmRldiwgXFx1MDAyNm5wLVxcdTAwM2VkZXZfdHJhY2tlcik7XFxuIDU3MDpcXHR1bmxvY2s6XFxuIDU3MTpcXHRcXHRydG5sX3VubG9jaygpO1xcbiA1NzI6XFx0XFx0cmV0dXJuIGVycjtcXG4gNTczOlxcdH1cXG4gNTc0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDowNS42MjU3MTk2NzJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2Nzk5OTc0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGVuYWJsZWRgIEZsYWcgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBgZW5hYmxlZGAgZmxhZyBhY3R1YWxseSBmdW5jdGlvbnMgd2l0aGluIHRoZSBzeXN0ZW0uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHdoZW4gaXQncyBzZXQsIHVuc2V0LCBvciBtb2RpZmllZCBkdXJpbmcgcnVudGltZS4gVGhpcyByZXF1aXJlcyBtZSB0byB0aG9yb3VnaGx5IGRpc3NlY3QgaXRzIGJlaGF2aW9yIGluIGFsbCBzdGF0ZXMuIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBob3cgdGhlIHZhcmlhYmxlIGluZmx1ZW5jZXMgdGhlIG92ZXJhbGwgcHJvZ3JhbSBmbG93LlxuXG5TbywgSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzcGVjaWZpY2FsbHksIEkgd2FudCB0byByZWFkIHRoZSBjb2RlIHRoYXQgaW50ZXJhY3RzIHdpdGggYGVuYWJsZWRfc3RvcmVgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMsIHJvdWdobHkgYXJvdW5kIGxpbmVzIDEwMTAgdG8gMTExMC4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGNoYW5nZXMgYW5kIGhvdyB0aGVzZSBzdGF0ZXMgcHJvcGFnYXRlIHRocm91Z2hvdXQgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwODQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjUwOjA3Ljc5MzcyMzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTAxMDpcXHQgKiBUaGUgdXNlciBpcyBleHBlY3RlZCB0byBzZXQgdGhlIGRlc2lyZWQgcGFyYW1ldGVycyBmaXJzdCAod2hpY2hcXG4xMDExOlxcdCAqIHdvdWxkIGVuYWJsZSBoaW0gdG8gZHluYW1pY2FsbHkgYWRkIG5ldyBuZXRwb2xsIHRhcmdldHMgZm9yIG5ld1xcbjEwMTI6XFx0ICogbmV0d29yayBpbnRlcmZhY2VzIGFzIGFuZCB3aGVuIHRoZXkgY29tZSB1cCkuXFxuMTAxMzpcXHQgKi9cXG4xMDE0OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbjEwMTU6XFx0XFx0XFx0Y29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuMTAxNjpcXHR7XFxuMTAxNzpcXHRcXHRzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50ID0gdG9fdGFyZ2V0KGl0ZW0pO1xcbjEwMTg6XFx0XFx0Ym9vbCBlbmFibGVkLCBjdXJyZW50X2VuYWJsZWQ7XFxuMTAxOTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjEwMjA6XFx0XFx0c3NpemVfdCByZXQ7XFxuMTAyMTpcXHRcXG4xMDIyOlxcdFxcdGR5bmFtaWNfbmV0Y29uc29sZV9tdXRleF9sb2NrKCk7XFxuMTAyMzpcXHRcXHRyZXQgPSBrc3RydG9ib29sKGJ1ZiwgXFx1MDAyNmVuYWJsZWQpO1xcbjEwMjQ6XFx0XFx0aWYgKHJldClcXG4xMDI1OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMDI2OlxcdFxcbjEwMjc6XFx0XFx0LyogV2hlbiB0aGUgdXNlciBleHBsaWNpdGx5IGVuYWJsZXMgb3IgZGlzYWJsZXMgYSB0YXJnZXQgdGhhdCBpc1xcbjEwMjg6XFx0XFx0ICogY3VycmVudGx5IGRlYWN0aXZhdGVkLCByZXNldCBpdHMgc3RhdGUgdG8gZGlzYWJsZWQuIFRoZSBERUFDVElWQVRFRFxcbjEwMjk6XFx0XFx0ICogc3RhdGUgb25seSB0cmFja3MgaW50ZXJmYWNlLWRyaXZlbiBkZWFjdGl2YXRpb24gYW5kIHNob3VsZCBfbm90X1xcbjEwMzA6XFx0XFx0ICogcGVyc2lzdCB3aGVuIHRoZSB1c2VyIG1hbnVhbGx5IGNoYW5nZXMgdGhlIHRhcmdldCdzIGVuYWJsZWQgc3RhdGUuXFxuMTAzMTpcXHRcXHQgKi9cXG4xMDMyOlxcdFxcdGlmIChudC1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVBQ1RJVkFURUQpXFxuMTAzMzpcXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9ESVNBQkxFRDtcXG4xMDM0OlxcdFxcbjEwMzU6XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xMDM2OlxcdFxcdGN1cnJlbnRfZW5hYmxlZCA9IG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEO1xcbjEwMzc6XFx0XFx0aWYgKGVuYWJsZWQgPT0gY3VycmVudF9lbmFibGVkKSB7XFxuMTAzODpcXHRcXHRcXHRwcl9pbmZvKFxcXCJuZXR3b3JrIGxvZ2dpbmcgaGFzIGFscmVhZHkgJXNcXFxcblxcXCIsXFxuMTAzOTpcXHRcXHRcXHRcXHRjdXJyZW50X2VuYWJsZWQgPyBcXFwic3RhcnRlZFxcXCIgOiBcXFwic3RvcHBlZFxcXCIpO1xcbjEwNDA6XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEwNDE6XFx0XFx0fVxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHRpZiAoZW5hYmxlZCkge1xcdC8qIHRydWUgKi9cXG4xMDQ0OlxcdFxcdFxcdGlmIChudC1cXHUwMDNlcmVsZWFzZSBcXHUwMDI2XFx1MDAyNiAhbnQtXFx1MDAzZWV4dGVuZGVkKSB7XFxuMTA0NTpcXHRcXHRcXHRcXHRwcl9lcnIoXFxcIk5vdCBlbmFibGluZyBuZXRjb25zb2xlLiBSZWxlYXNlIGZlYXR1cmUgcmVxdWlyZXMgZXh0ZW5kZWQgbG9nIG1lc3NhZ2VcXFwiKTtcXG4xMDQ2OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMDQ3OlxcdFxcdFxcdH1cXG4xMDQ4OlxcdFxcbjEwNDk6XFx0XFx0XFx0aWYgKG50LVxcdTAwM2VleHRlbmRlZCBcXHUwMDI2XFx1MDAyNiAhY29uc29sZV9pc19yZWdpc3RlcmVkKFxcdTAwMjZuZXRjb25zb2xlX2V4dCkpIHtcXG4xMDUwOlxcdFxcdFxcdFxcdG5ldGNvbnNvbGVfZXh0LmZsYWdzIHw9IENPTl9FTkFCTEVEO1xcbjEwNTE6XFx0XFx0XFx0XFx0cmVnaXN0ZXJfY29uc29sZShcXHUwMDI2bmV0Y29uc29sZV9leHQpO1xcbjEwNTI6XFx0XFx0XFx0fVxcbjEwNTM6XFx0XFxuMTA1NDpcXHRcXHRcXHQvKiBVc2VyIG1pZ2h0IGJlIGVuYWJsaW5nIHRoZSBiYXNpYyBmb3JtYXQgdGFyZ2V0IGZvciB0aGUgdmVyeVxcbjEwNTU6XFx0XFx0XFx0ICogZmlyc3QgdGltZSwgbWFrZSBzdXJlIHRoZSBjb25zb2xlIGlzIHJlZ2lzdGVyZWQuXFxuMTA1NjpcXHRcXHRcXHQgKi9cXG4xMDU3OlxcdFxcdFxcdGlmICghbnQtXFx1MDAzZWV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFjb25zb2xlX2lzX3JlZ2lzdGVyZWQoXFx1MDAyNm5ldGNvbnNvbGUpKSB7XFxuMTA1ODpcXHRcXHRcXHRcXHRuZXRjb25zb2xlLmZsYWdzIHw9IENPTl9FTkFCTEVEO1xcbjEwNTk6XFx0XFx0XFx0XFx0cmVnaXN0ZXJfY29uc29sZShcXHUwMDI2bmV0Y29uc29sZSk7XFxuMTA2MDpcXHRcXHRcXHR9XFxuMTA2MTpcXHRcXG4xMDYyOlxcdFxcdFxcdC8qXFxuMTA2MzpcXHRcXHRcXHQgKiBTa2lwIG5ldGNvbnNvbGVfcGFyc2VyX2NtZGxpbmUoKSAtLSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlXFxuMTA2NDpcXHRcXHRcXHQgKiBhbHJlYWR5IGNvbmZpZ3VyZWQgdmlhIGNvbmZpZ2ZzLiBKdXN0IHByaW50IHRoZW0gb3V0LlxcbjEwNjU6XFx0XFx0XFx0ICovXFxuMTA2NjpcXHRcXHRcXHRuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihudCk7XFxuMTA2NzpcXHRcXG4xMDY4OlxcdFxcdFxcdC8qIEluaXRpYWxpc2UgdGhlIHNrYiBwb29sIGJlZm9yZSBuZXRwb2xsX3NldHVwKCkgc28gdGhlIHBvb2xcXG4xMDY5OlxcdFxcdFxcdCAqIGlzIHZhbGlkIGFzIHNvb24gYXMgbnQtXFx1MDAzZW5wLmRldiBiZWNvbWVzIHZpc2libGUgdG9cXG4xMDcwOlxcdFxcdFxcdCAqIHRhcmdldF9saXN0IHdhbGtlcnMgKG5ldGNvbnNvbGVfbmV0ZGV2X2V2ZW50KSwgd2hpY2ggd291bGRcXG4xMDcxOlxcdFxcdFxcdCAqIG90aGVyd2lzZSBjYWxsIG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2goKSBvbiB1bmluaXRpYWxpc2VkXFxuMTA3MjpcXHRcXHRcXHQgKiBzdGF0ZS5cXG4xMDczOlxcdFxcdFxcdCAqL1xcbjEwNzQ6XFx0XFx0XFx0bmV0Y29uc29sZV9za2JfcG9vbF9pbml0KG50KTtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0XFx0cmV0ID0gbmV0Y29uc19uZXRwb2xsX3NldHVwKG50KTtcXG4xMDc3OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xMDc4OlxcdFxcdFxcdFxcdG5ldGNvbnNvbGVfc2tiX3Bvb2xfZmx1c2gobnQpO1xcbjEwNzk6XFx0XFx0XFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbjEwODA6XFx0XFx0XFx0fVxcbjEwODE6XFx0XFxuMTA4MjpcXHRcXHRcXHRudC1cXHUwMDNlc3RhdGUgPSBTVEFURV9FTkFCTEVEO1xcbjEwODM6XFx0XFx0XFx0cHJfaW5mbyhcXFwibmV0d29yayBsb2dnaW5nIHN0YXJ0ZWRcXFxcblxcXCIpO1xcbjEwODQ6XFx0XFx0fSBlbHNlIHtcXHQvKiBmYWxzZSAqL1xcbjEwODU6XFx0XFx0XFx0LyogV2UgbmVlZCB0byBkaXNhYmxlIHRoZSBuZXRjb25zb2xlIGJlZm9yZSBjbGVhbmluZyBpdCB1cFxcbjEwODY6XFx0XFx0XFx0ICogb3RoZXJ3aXNlIHdlIG1pZ2h0IGVuZCB1cCBpbiB3cml0ZV9tc2coKSB3aXRoXFxuMTA4NzpcXHRcXHRcXHQgKiBudC1cXHUwMDNlbnAuZGV2ID09IE5VTEwgYW5kIG50LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9FTkFCTEVEXFxuMTA4ODpcXHRcXHRcXHQgKi9cXG4xMDg5OlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNnRhcmdldF9jbGVhbnVwX2xpc3RfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDAxOjUwOjA3Ljc5Mzg3MjY2MVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDI1NzgwNDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgcmV2aWV3aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byB0aGUgSVAgQWRkcmVzcyBVc2FnZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIGhvdyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCBhcmUgYmVpbmcgdXNlZCB3aXRoaW4gdGhpcyBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBsaWtlbHkgc3VzcGVjdHMg4oCTIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBJUCBwYWNrZXQgY29uc3RydWN0aW9uIGFuZCB0cmFuc21pc3Npb24uIE15IGd1dCB0ZWxscyBtZSB0byBsb29rIGF0IGBuZXRjb25zb2xlX3dyaXRlYCwgYHB1c2hfaXB2NGAsIGBwdXNoX2lwdjZgLCBhbmQgYHNlbmRfbXNnX25vX2ZyYWdtZW50YXRpb25gLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyB3aGVyZSBJUCBhZGRyZXNzIGluZm9ybWF0aW9uIHdvdWxkIGJlIGNyaXRpY2FsLiBJIGV4cGVjdCB0aGV5IGFyZSBlaXRoZXIgcmVhZGluZyB0aGUgSVAgZnJvbSBhbiBhZGRyZXNzLCBvciBpbmplY3RpbmcgaXQgaW50byB0aGUgSVAgaGVhZGVycy5cblxuVG8gc3RhcnQsIEknbGwgZm9jdXMgb24gYG5ldGNvbnNvbGUuY2AsIHNpbmNlIHRoYXTigJlzIHByb2JhYmx5IHRoZSBmaXJzdCB0aGluZyB0byBpbnZlc3RpZ2F0ZS4gSSdsbCB6ZXJvIGluIG9uIGxpbmVzIDIxMjUgdG8gMjIyMCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBzcGVjaWZpYyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgSVAgYWRkcmVzc2VzLiBJIGFudGljaXBhdGUgdGhpcyB3aWxsIGJlIHJlbGF0ZWQgdG8gaG93IG5ldHdvcmsgY29uc29sZSBvdXRwdXQgaXMgaGFuZGxlZCBhbmQgY29uZmlndXJlZCwgd2hpY2ggY291bGQgaGVhdmlseSBpbmZsdWVuY2UgSVAgYWRkcmVzcyB1c2UuIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDoxMS4yMTk2NjkyNjVaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L25ldGNvbnNvbGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTI1LFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTI1OlxcdFxcdFxcdGV0aC1cXHUwMDNlaF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTtcXG4yMTI2OlxcdH1cXG4yMTI3OlxcdFxcbjIxMjg6XFx0c3RhdGljIHZvaWQgcHVzaF9pcHY0KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjEyOTpcXHRcXHRcXHQgICAgICBpbnQgbGVuKVxcbjIxMzA6XFx0e1xcbjIxMzE6XFx0XFx0c3RhdGljIGF0b21pY190IGlwX2lkZW50O1xcbjIxMzI6XFx0XFx0c3RydWN0IGlwaGRyICppcGg7XFxuMjEzMzpcXHRcXHRpbnQgaXBfbGVuO1xcbjIxMzQ6XFx0XFxuMjEzNTpcXHRcXHRpcF9sZW4gPSBsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IGlwaGRyKTtcXG4yMTM2OlxcdFxcbjIxMzc6XFx0XFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7XFxuMjEzODpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4yMTM5OlxcdFxcdGlwaCA9IGlwX2hkcihza2IpO1xcbjIxNDA6XFx0XFxuMjE0MTpcXHRcXHQvKiBpcGgtXFx1MDAzZXZlcnNpb24gPSA0OyBpcGgtXFx1MDAzZWlobCA9IDU7ICovXFxuMjE0MjpcXHRcXHQqKHVuc2lnbmVkIGNoYXIgKilpcGggPSAweDQ1O1xcbjIxNDM6XFx0XFx0aXBoLVxcdTAwM2V0b3MgPSAwO1xcbjIxNDQ6XFx0XFx0cHV0X3VuYWxpZ25lZChodG9ucyhpcF9sZW4pLCBcXHUwMDI2aXBoLVxcdTAwM2V0b3RfbGVuKTtcXG4yMTQ1OlxcdFxcdGlwaC1cXHUwMDNlaWQgPSBodG9ucyhhdG9taWNfaW5jX3JldHVybihcXHUwMDI2aXBfaWRlbnQpKTtcXG4yMTQ2OlxcdFxcdGlwaC1cXHUwMDNlZnJhZ19vZmYgPSAwO1xcbjIxNDc6XFx0XFx0aXBoLVxcdTAwM2V0dGwgPSA2NDtcXG4yMTQ4OlxcdFxcdGlwaC1cXHUwMDNlcHJvdG9jb2wgPSBJUFBST1RPX1VEUDtcXG4yMTQ5OlxcdFxcdGlwaC1cXHUwMDNlY2hlY2sgPSAwO1xcbjIxNTA6XFx0XFx0cHV0X3VuYWxpZ25lZChudC1cXHUwMDNlbG9jYWxfaXAuaXAsIFxcdTAwMjZpcGgtXFx1MDAzZXNhZGRyKTtcXG4yMTUxOlxcdFxcdHB1dF91bmFsaWduZWQobnQtXFx1MDAzZXJlbW90ZV9pcC5pcCwgXFx1MDAyNmlwaC1cXHUwMDNlZGFkZHIpO1xcbjIxNTI6XFx0XFx0aXBoLVxcdTAwM2VjaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLVxcdTAwM2VpaGwpO1xcbjIxNTM6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcXG4yMTU0OlxcdH1cXG4yMTU1OlxcdFxcbjIxNTY6XFx0c3RhdGljIHZvaWQgcHVzaF9pcHY2KHN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCAqbnQsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjE1NzpcXHRcXHRcXHQgICAgICBpbnQgbGVuKVxcbjIxNTg6XFx0e1xcbjIxNTk6XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwNmg7XFxuMjE2MDpcXHRcXG4yMTYxOlxcdFxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuMjE2MjpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4yMTYzOlxcdFxcdGlwNmggPSBpcHY2X2hkcihza2IpO1xcbjIxNjQ6XFx0XFxuMjE2NTpcXHRcXHQvKiBpcDZoLVxcdTAwM2V2ZXJzaW9uID0gNjsgaXA2aC1cXHUwMDNlcHJpb3JpdHkgPSAwOyAqL1xcbjIxNjY6XFx0XFx0Kih1bnNpZ25lZCBjaGFyICopaXA2aCA9IDB4NjA7XFxuMjE2NzpcXHRcXHRpcDZoLVxcdTAwM2VmbG93X2xibFswXSA9IDA7XFxuMjE2ODpcXHRcXHRpcDZoLVxcdTAwM2VmbG93X2xibFsxXSA9IDA7XFxuMjE2OTpcXHRcXHRpcDZoLVxcdTAwM2VmbG93X2xibFsyXSA9IDA7XFxuMjE3MDpcXHRcXG4yMTcxOlxcdFxcdGlwNmgtXFx1MDAzZXBheWxvYWRfbGVuID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgbGVuKTtcXG4yMTcyOlxcdFxcdGlwNmgtXFx1MDAzZW5leHRoZHIgPSBJUFBST1RPX1VEUDtcXG4yMTczOlxcdFxcdGlwNmgtXFx1MDAzZWhvcF9saW1pdCA9IDMyO1xcbjIxNzQ6XFx0XFx0aXA2aC1cXHUwMDNlc2FkZHIgPSBudC1cXHUwMDNlbG9jYWxfaXAuaW42O1xcbjIxNzU6XFx0XFx0aXA2aC1cXHUwMDNlZGFkZHIgPSBudC1cXHUwMDNlcmVtb3RlX2lwLmluNjtcXG4yMTc2OlxcdFxcbjIxNzc6XFx0XFx0c2tiLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xcbjIxNzg6XFx0fVxcbjIxNzk6XFx0XFxuMjE4MDpcXHRzdGF0aWMgaW50IG5ldHBvbGxfc2VuZF91ZHAoc3RydWN0IG5ldGNvbnNvbGVfdGFyZ2V0ICpudCwgY29uc3QgY2hhciAqbXNnLFxcbjIxODE6XFx0XFx0XFx0XFx0ICAgIGludCBsZW4pXFxuMjE4MjpcXHR7XFxuMjE4MzpcXHRcXHRzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBcXHUwMDI2bnQtXFx1MDAzZW5wO1xcbjIxODQ6XFx0XFx0aW50IHRvdGFsX2xlbiwgaXBfbGVuLCB1ZHBfbGVuO1xcbjIxODU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4yMTg2OlxcdFxcbjIxODc6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSlcXG4yMTg4OlxcdFxcdFxcdFdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTtcXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0dWRwX2xlbiA9IGxlbiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4yMTkxOlxcdFxcdGlmIChudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseSA9PSBBRl9JTkVUNilcXG4yMTkyOlxcdFxcdFxcdGlwX2xlbiA9IHVkcF9sZW4gKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpO1xcbjIxOTM6XFx0XFx0ZWxzZVxcbjIxOTQ6XFx0XFx0XFx0aXBfbGVuID0gdWRwX2xlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbjIxOTU6XFx0XFxuMjE5NjpcXHRcXHR0b3RhbF9sZW4gPSBpcF9sZW4gKyBMTF9SRVNFUlZFRF9TUEFDRShucC1cXHUwMDNlZGV2KTtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0c2tiID0gZmluZF9za2IobnQsIHRvdGFsX2xlbiArIG5wLVxcdTAwM2VkZXYtXFx1MDAzZW5lZWRlZF90YWlscm9vbSxcXG4yMTk5OlxcdFxcdFxcdCAgICAgICB0b3RhbF9sZW4gLSBsZW4pO1xcbjIyMDA6XFx0XFx0aWYgKCFza2IpXFxuMjIwMTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMjAyOlxcdFxcbjIyMDM6XFx0XFx0c2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtc2csIGxlbik7XFxuMjIwNDpcXHRcXHRza2JfcHV0KHNrYiwgbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NTA6MTEuMjE5ODMzMjc1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjczODQzMjAwMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRjb25zb2xlIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIEFkZHJlc3MgRmFtaWx5IEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYG5ldGNvbnNvbGVgIHN1YnN5c3RlbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiVGhpcyBpcyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIG9mIGhvdyBJUCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGFkZHJlc3MgZmFtaWxpZXMgYW5kIHRoZSBjb25jZXB0IG9mIGFuICd1bnNldCcgSVAuXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aG9yb3VnaGx5LlxuXG5GaXJzdCwgSSBzZWUgdGhlIGNvcmUgY2hhbmdlOiB3ZSdyZSBtb3ZpbmcgYXdheSBmcm9tIHRoZSBvbGQgYHVuaW9uIGluZXRfYWRkcmAgYW5kIHRoZSBib29sZWFuIGBpcHY2YCBmbGFnIHdpdGhpbiB0aGUgYG5ldGNvbnNvbGVfdGFyZ2V0YCBzdHJ1Y3QsIGFuZCBpbnN0ZWFkIHVzaW5nIGEgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCB3aXRoIGEgYGZhbWlseWAgbWVtYmVyIChhbiBgQUZfKmAgdmFsdWUpIGFuZCBhIHVuaW9uIGZvciB0aGUgSVAgYWRkcmVzcyBpdHNlbGYgKGVpdGhlciBJUHY0IG9yIElQdjYpLiAgVGhlIG9sZCBhcHByb2FjaCwgd2hlcmUgYDAuMC4wLjBgIHdhcyB0cmVhdGVkIGFzICd1bnNldCcsIHNlZW1zIGNsdW5reS4gIFRoaXMgbmV3IHN0cnVjdHVyZSBhbGxvd3MgZm9yIGEgbW9yZSBleHBsaWNpdCBhbmQgY2xlYW5lciB3YXkgdG8gcmVwcmVzZW50IGFuIHVuc2V0IGFkZHJlc3MgdmlhIGBBRl9VTlNQRUNgLlxuXG5Ob3csIGxldCdzIHN0ZXAgdGhyb3VnaCB0aGUgcGF0Y2ggYW5kIHNlZSBob3cgdGhpcyBuZXcgc3RydWN0dXJlIGlzIGludGVncmF0ZWQ6XG5cbjEuICAqKmBuZXRjb25zX3Rha2VfaXB2NmAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NGA6KiogVGhlc2UgZnVuY3Rpb25zIG5vdyBleHBsaWNpdGx5IHNldCB0aGUgYGZhbWlseWAgbWVtYmVyIHRvIGBBRl9JTkVUNmAgb3IgYEFGX0lORVRgLCByZXNwZWN0aXZlbHksIGFsb25nc2lkZSB0aGUgYWRkcmVzcyB2YWx1ZSBpdHNlbGYuIFRoaXMgaXMgbXVjaCBjbGVhcmVyIHRoYW4gdGhlIGltcGxpY2l0IGJlaGF2aW9yIGJlZm9yZS5cblxuMi4gICoqYG5ldGNvbnNfbmV0cG9sbF9zZXR1cGA6KiogVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiAgV2UgaGF2ZSBzZXZlcmFsIGNoZWNrcyBoZXJlLiAgSWYgdGhlIHJlbW90ZSBJUCBpcyB1bnNldCwgaXQncyBhbiBlcnJvci4gSWYgdGhlIGxvY2FsIElQIGlzIHNldCwgdGhlcmUncyBhIGNoZWNrIHRvIGVuc3VyZSBpdCBoYXMgdGhlIHNhbWUgZmFtaWx5IGFzIHRoZSByZW1vdGUgSVAuIElmIHRoZSBsb2NhbCBJUCAqaXMqIHVuc2V0LCB0aGUgY29kZSBub3cgKmV4cGxpY2l0bHkqIHRha2VzIHRoZSBJUHY2IG9yIElQdjQgYWRkcmVzcyBkZXBlbmRpbmcgb24gdGhlIHJlbW90ZSBJUCBhZGRyZXNzIGZhbWlseS4gVGhlIGBtZW1zZXRgIGlmIGFuIGVycm9yIG9jY3VycyBzZWVtcyBhIGxpdHRsZSBoZWF2eSBoYW5kZWQuXG5cbjMuICAqKmBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcmA6KiogIFRoaXMgZnVuY3Rpb24gbm93IGNvcnJlY3RseSBwcmludHMgdGhlIGFwcHJvcHJpYXRlIElQIGFkZHJlc3MgdHlwZSBiYXNlZCBvbiB0aGUgYGZhbWlseWAgbWVtYmVyLCBiZSBpdCBJUHY0LCBJUHY2LCBvciBub3RoaW5nLlxuXG40LiAgKipgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYDoqKiAgVGhpcyB1c2VzIGBpbjRfcHRvbmAgYW5kIGBpbjZfcHRvbmAsIHRvIHBhcnNlIGFkZHJlc3NlcyBhbmQgc2V0IHRoZSBgZmFtaWx5YCBtZW1iZXIgYXBwcm9wcmlhdGVseS4gSXQncyBhIGNsZWFuIHdheSB0byBoYW5kbGUgdGhlIGlucHV0IGFuZCBjb3JyZWN0bHkgcG9wdWxhdGUgdGhlIGBpbmV0X2FkZHJgIHN0cnVjdC5cblxuNS4gICoqYGxvY2FsX2lwX3Nob3dgIC8gYHJlbW90ZV9pcF9zaG93YDoqKiAgVGhlc2UgdXNlIHRoZSBgZmFtaWx5YCBtZW1iZXIgdG8gZm9ybWF0IHRoZSBvdXRwdXQuIEEgbmVhdCBpbXBsZW1lbnRhdGlvbi5cblxuNi4gICoqYGxvY2FsX2lwX3N0b3JlYCAvIGByZW1vdGVfaXBfc3RvcmVgOioqIFRoZXNlIGZ1bmN0aW9ucyBwYXNzIGEgcG9pbnRlciB0byBgaW5ldF9hZGRyYCB0byBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCwgd2hpY2ggaXMgZXhhY3RseSBob3cgaXQgc2hvdWxkIHdvcmsuXG5cbjcuICAqKlBhY2tldCBUcmFuc21pc3Npb24gKGBuZXRwb2xsX3VkcF9jaGVja3N1bWAsIGBwdXNoX2V0aGAsIGBuZXRwb2xsX3NlbmRfdWRwYCk6KiogSGVyZSwgdGhlIHBhdGNoIHJlcGxhY2VzIHRoZSBgaXB2NmAgYm9vbGVhbiBmbGFnIHdpdGggYSBjaGVjayBhZ2FpbnN0IGBudC1cdTAwM2VyZW1vdGVfaXAuZmFtaWx5ID09IEFGX0lORVQ2YC4gVGhpcyBpcyBhIG11Y2ggbW9yZSByb2J1c3QgYW5kIHVuZGVyc3RhbmRhYmxlIHdheSB0byBkZXRlcm1pbmUgdGhlIElQIHZlcnNpb24uXG5cbjguICAqKmBuZXRjb25zb2xlX3BhcnNlcl9jbWRsaW5lYDoqKiAgVGhpcyBwcm9iYWJseSBkZWFscyB3aXRoIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGlzIHNob3VsZCBiZSBmaW5lLlxuXG45LiAgKipIZWFkZXIgQ2xlYW51cDoqKiBUaGUgcmVtb3ZhbCBvZiBgdW5pb24gaW5ldF9hZGRyYCBmcm9tIHRoZSBoZWFkZXIgZmlsZSBjbGVhbnMgdXAgdGhlIHN0cnVjdHVyZS5cblxuTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZG8gYSBmdWxsIGNvZGUtYmFzZSBzZWFyY2ggdG8gaWRlbnRpZnkgYW55IG90aGVyIGluc3RhbmNlcyBvZiBgdW5pb24gaW5ldF9hZGRyYCB0byBtYWtlIHN1cmUgbm90aGluZyB3YXMgbWlzc2VkLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIGZ1bGx5IHNlbGYtY29udGFpbmVkIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgc3VidGxlIHJlZ3Jlc3Npb25zIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiAgSSdsbCBzdGFydCB3aXRoIGEgYGdyZXBgIGZvciBgdW5pb24gaW5ldF9hZGRyYCB0byBiZSB0aG9yb3VnaC5cblxuT3ZlcmFsbCwgdGhpcyBsb29rcyBsaWtlIGEgd2VsbC10aG91Z2h0LW91dCBpbXByb3ZlbWVudCwgbWFraW5nIGFkZHJlc3MgZmFtaWx5IGhhbmRsaW5nIG11Y2ggY2xlYXJlciBhbmQgbW9yZSBleHBsaWNpdCB3aXRoaW4gdGhlIGBuZXRjb25zb2xlYCBzdWJzeXN0ZW0uICBUaGUgcmVwbGFjZW1lbnQgb2YgdGhlIG9sZCBtZXRob2Qgd2l0aCB0aGUgbmV3IGBzdHJ1Y3QgaW5ldF9hZGRyYCBzZWVtcyBhIGdvb2QgbW92ZS4gSSBhbSB2ZXJ5IGludGVyZXN0ZWQgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBwZXJmb3JtYW5jZSBpbXBhY3Qgd2l0aCB0aGUgY29kZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDIzNiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDoxOC42MDQxNTYzNDNaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTgzODU0MjcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVuaW9uIGluZXRfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDE6NTA6MjAuMzIyNTU1NjdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0OTY0NTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBMYW5kc2NhcGUgb2YgYHN0cnVjdCBpbmV0X2FkZHJgKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIGhvdyBgc3RydWN0IGluZXRfYWRkcmAgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZS4gSSB3YW50IHRvIGlkZW50aWZ5IGFsbCB0aGUgaW5zdGFuY2VzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGl0cyByb2xlIGluIHZhcmlvdXMgbmV0d29yayBvcGVyYXRpb25zLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IsIGZyYW5rbHksIHZ1bG5lcmFiaWxpdGllcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBkaWZmZXJlbnQgY29udGV4dHMsIGxpa2UgaG93IGl0J3MgdHJlYXRlZCBpbiBrZXJuZWwgbmV0d29ya2luZyBjb2RlIHZlcnN1cyB1c2VyLXNwYWNlIGxpYnJhcmllcyB0aGF0IGludGVyZmFjZSB3aXRoIGl0LiBBcmUgdGhlcmUgYW55IGNvZGluZyBwYXR0ZXJucyB0aGF0IGFyZSBjb25jZXJuaW5nPyBBbnkgaW5jb25zaXN0ZW5jaWVzIGluIGhvdyBpdCdzIGhhbmRsZWQsIHdoaWNoIGNvdWxkIGxlYWQgdG8gc3VidGxlIGJ1Z3MgZG93biB0aGUgbGluZT8gSSBhbHNvIHdhbnQgdG8gbWFrZSBhIG5vdGUgb2Ygd2hlcmUgaXQgaXMgdXNlZC4gSSdtIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucy4gVGhpcyBpcyBpbXBvcnRhbnQ6IGFyZSB0aGVyZSBuZXdlciwgYmV0dGVyIGFsdGVybmF0aXZlcyBlbWVyZ2luZyAoZS5nLiwgYGluX2FkZHJgLCBgaW42X2FkZHJgLCBldGMuKSB0aGF0IGFyZSBtb3JlIG1vZGVybiwgc2FmZXIsIG9yIHNpbXBseSBtb3JlIGVmZmljaWVudCBpbiBjZXJ0YWluIHNjZW5hcmlvcz8gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhpcyBmb3VuZGF0aW9uYWwgc3RydWN0dXJlIGlzIGJlaW5nIHVzZWQgb3B0aW1hbGx5LCBhbmQgSSBuZWVkIHRvIGJlIHByb2FjdGl2ZSBhYm91dCBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gTGV0J3Mgc2VlIHdoYXQgd2UgdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMDksIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDoyMi43NzIyMDMxODZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODk2NTUwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGluZXRfYWRkclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MTQ4PWVudW0gdGFyZ2V0X3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGNvbnNvbGUuYy0xNTMtXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjE1NDpzdHJ1Y3QgaW5ldF9hZGRyIHtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMTU1LVxcdC8qIEFkZHJlc3MgZmFtaWx5OiBBRl9VTlNQRUMgd2hlbiB1bnNldCwgZWxzZSBBRl9JTkVUIG9yIEFGX0lORVQ2ICovXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM9MjE4PXN0cnVjdCBuZXRjb25zb2xlX3RhcmdldCB7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM1LVxcdHN0cnVjdCBuZXRwb2xsXFx0XFx0bnA7XFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jOjIzNjpcXHRzdHJ1Y3QgaW5ldF9hZGRyXFx0bG9jYWxfaXAsIHJlbW90ZV9pcDtcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtMjM3LVxcdHUxNlxcdFxcdFxcdGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0O1xcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jPTcyNT1zdGF0aWMgdm9pZCBuZXRjb25zb2xlX3ByaW50X2Jhbm5lcihzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXQgKm50KVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jLTc1MC0gKi9cXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmM6NzUxOnN0YXRpYyBpbnQgbmV0cG9sbF9wYXJzZV9pcF9hZGRyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IGluZXRfYWRkciAqYWRkcilcXG5kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMtNzUyLXtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jPTU1PWVudW0ge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNTktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmM6NjA6c3RydWN0IGluZXRfYWRkciB7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtNjEtXFx0Y29uc3QgY2hhciAqaXA7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYz02NT1zdHJ1Y3QgdGVzdCB7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYy03MC1cXHRpbnQgc290eXBlO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jOjcxOlxcdHN0cnVjdCBpbmV0X2FkZHIgY29ubmVjdF90bztcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYzo3MjpcXHRzdHJ1Y3QgaW5ldF9hZGRyIGxpc3Rlbl9hdDtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYy03My1cXHRlbnVtIHNlcnZlciBhY2NlcHRfb247XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9za19sb29rdXAuYz0xMTUxPXN0cnVjdCB0ZXN0X211bHRpX3Byb2cge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtMTE1Ny1cXHRpbnQgZXhwZWN0X2Vycm5vO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3NrX2xvb2t1cC5jOjExNTg6XFx0c3RydWN0IGluZXRfYWRkciBsaXN0ZW5fYXQ7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvc2tfbG9va3VwLmMtMTE1OS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDoyNC4zNjE4NjU5MTlaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTgzNzcyNTQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZW1vcnkgU2FmZXR5IGFuZCBTYW5pdGl6ZXIgRXZhbHVhdGlvbjogUGF0Y2ggQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBldmFsdWF0aW5nIHRoaXMgcGF0Y2ggZm9yIG1lbW9yeSBzYWZldHksIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgcG90ZW50aWFsIGxlYWtzIHZpYSBrZXJuZWwtdG8tdXNlciBzcGFjZSBpbnRlcmFjdGlvbnMuIE15IGV4cGVydCBleWUgaW1tZWRpYXRlbHkgZ29lcyB0byBwb3RlbnRpYWwgcmlza3MgYW5kIHRoZSByZWxldmFudCBzYW5pdGl6ZXIgY2hlY2tzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayB0aGUgS01TQU4gY3JpdGVyaWEuXG5cbjEuICAqKktlcm5lbC10by1Vc2VyIFNwYWNlOioqIEknbSBleGFtaW5pbmcgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gbGVhayB0byB1c2Vyc3BhY2UuIFRoZSBgc3lzZnNfZW1pdGAgdXNhZ2UgaW4gYGxvY2FsX2lwX3Nob3dgIGFuZCBgcmVtb3RlX2lwX3Nob3dgIGp1bXBzIG91dCBpbW1lZGlhdGVseS4gU3BlY2lmaWNhbGx5LCB0aGUgYCVwSTZjXFxuYCwgYCVwSTRcXG5gLCBhbmQgYFxcbmAgZm9ybWF0cy4gSG93ZXZlciwgdGhlIHRhcmdldCBzdHJ1Y3R1cmUgYG50YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggaXMgYSBrZXkgb2JzZXJ2YXRpb24sIHplcm9pbmcgdGhlIGVudGlyZSBzdHJ1Y3R1cmUuIFRoZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBgbG9jYWxfaXAuZmFtaWx5YCBsb29rcyBzYWZlLiBXaGVuIGBBRl9VTlNQRUNgLCBub3RoaW5nIGlzIHByaW50ZWQgdG8gdXNlciBzcGFjZS4gV2hlbiBgQUZfSU5FVDZgLCB0aGUgYG50LVx1MDAzZWxvY2FsX2lwLmluNmAgZmllbGQgaXMgZmlsbGVkIGZyb20gYGluNl9wdG9uYCBvciBgaWZwLVx1MDAzZWFkZHJgLiBXaGVuIGBBRl9JTkVUYCwgYG50LVx1MDAzZWxvY2FsX2lwLmlwYCBpcyBmaWxsZWQgZnJvbSBgaW40X3B0b25gIG9yIGBpZmEtXHUwMDNlaWZhX2xvY2FsYC4gQWxsIGxvb2tzIHNhZmUgZnJvbSB0aGlzIHBlcnNwZWN0aXZlLlxuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYzoqKiBUaGUgY29kZSdzIGNvbmRpdGlvbmFsIGJyYW5jaGVzIGFyZSBhbHNvIGltcG9ydGFudC4gVGhlIGBudGAgc3RydWN0dXJlJ3MgYGZhbWlseWAgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gYDBgIGJ5IGBremFsbG9jX29iamAsIGFuZCB0aGUgYWRkcmVzcyBieXRlcyBhcmUgemVyb2VkLiBUaGUgY29kZSBjbGVhbmx5IGNoZWNrcyBmb3IgdGhlIGBBRl9VTlNQRUNgLCBgQUZfSU5FVDZgLCBvciBJUHY0IGNhc2VzLCBlbnN1cmluZyB0aGF0IGl0J3MgaGFuZGxpbmcgYGZhbWlseWAgYXBwcm9wcmlhdGVseSBiZWZvcmUgYW55IHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGFjY2VzcywgYW5kIHRoaXMgYXBwZWFycyBzYWZlLlxuXG4zLiAgKipDb21wbGV4IERhdGEgU3RydWN0dXJlczoqKiBJIHNlZSBubyBpbmRpY2F0aW9uIHRoYXQgdGhlIHBhdGNoIGlzIGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGFueSBwYXJ0aWN1bGFybHkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgYSBmYWN0b3IgaW4gbGF0ZXIgcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG5cbjQuICAqKkJvdW5kcyBDaGVja3MvTG9naWM6KiogVGhlcmUncyBubyBldmlkZW5jZSBvZiBib3VuZHMgY2hlY2sgaXNzdWVzIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgZGF0YSB3aXRoaW4gZXhpc3RpbmcgYnVmZmVycy5cblxuR2l2ZW4gdGhpcyB0aG9yb3VnaCByZXZpZXcgb2YgdGhlIGNvZGUsIEkgY2FuIGNvbmZpZGVudGx5IGNvbmNsdWRlIHRoYXQgdGhpcyBwYXRjaCAqKmRvZXMgbm90KiogaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3Iga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MuIEFsbCBhbGxvY2F0aW9ucyBhcmUgemVyb2VkIHVzaW5nIGBremFsbG9jX29iamAsIGFuZCBpbnB1dHMgYXJlIHZhbGlkYXRlZC4gVGhlIGBpbjRfcHRvbmAgYW5kIGBpbjZfcHRvbmAgZnVuY3Rpb25zIHdyaXRlIHRvIHRoZSBwcmVjaXNlIG1lbW9yeSBsb2NhdGlvbnMgYmVmb3JlIHRoZSBgZmFtaWx5YCBmaWVsZCBpcyBldmVuIGFzc2lnbmVkLiBXaGVuIHVuc2V0LCBgZmFtaWx5YCBpcyAwIChgQUZfVU5TUEVDYCkuXG5cblRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgbmVjZXNzYXJ5IGhlcmUuIEknbGwgZmxhZyB0aGlzIGFzIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgZXhwbGFpbiB0aGUgcmF0aW9uYWxlIGFzIG91dGxpbmVkIGFib3ZlLiBUaGlzIGlzIGEgY2xlYW4gYmlsbCBvZiBoZWFsdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMjA1LCJPdXRwdXRUb2tlbnMiOjM3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwMTo1MDozMC4xOTk1OTM5NTJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxcblxcbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6XFxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cXG4yLiBQYXJzaW5nIGFuZCB1cGRhdGVzOiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBwb3B1bGF0ZXMgYGlwYCAodmlhIGBpbjRfcHRvbmApIG9yIGBpbjZgICh2aWEgYGluNl9wdG9uYCkgYW5kIHNldHMgYGZhbWlseWAgYWNjb3JkaW5nbHkgKGBBRl9JTkVUYCBvciBgQUZfSU5FVDZgKS4gV2hlbiBhdXRvLWRlcml2ZWQsIGBuZXRjb25zX3Rha2VfaXB2NGAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NmAgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYWRkcmVzcyBhbmQgc2V0IGBmYW1pbHlgLlxcbjMuIFVzZXItc3BhY2Ugb3V0cHV0IC8gaW5mbyBsZWFrczogU3lzZnMgYXR0cmlidXRlcyBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AgZW1pdCBmb3JtYXR0ZWQgc3RyaW5ncyBiYXNlZCBvbiB0aGUgdmVyaWZpZWQgYGZhbWlseWAgZGlzY3JpbWluYXRvciBhbmQgcmVhZCBvbmx5IHRoZSBmdWxseSBpbml0aWFsaXplZCBhZGRyZXNzIHVuaW9uIGZpZWxkcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXJzcGFjZS5cXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseWAgYW5kIHJlYWQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYGluNmAgb3IgYGlwYCBmaWVsZHMuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBJUCBhZGRyZXNzIGhhbmRsaW5nIGluIG5ldGNvbnNvbGUgYnkgaW50cm9kdWNpbmcgYHN0cnVjdCBpbmV0X2FkZHJgIHdpdGggYW4gZXhwbGljaXQgYGZhbWlseWAgZmllbGQgaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc2VwYXJhdGUgYm9vbGVhbiBmbGFnIChgaXB2NmApIGFuZCBjaGVja2luZyB3aGV0aGVyIGFuIGFkZHJlc3MgaXMgemVybyB0byBkZXRlcm1pbmUgaWYgaXQgd2FzIHVuc2V0LlxcblxcbkFuYWx5c2lzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s6XFxuMS4gT2JqZWN0IGFsbG9jYXRpb246IGBzdHJ1Y3QgbmV0Y29uc29sZV90YXJnZXRgIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jX29iamAsIGVuc3VyaW5nIGFsbCBmaWVsZHMgKGluY2x1ZGluZyBgbG9jYWxfaXBgIGFuZCBgcmVtb3RlX2lwYCkgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGBmYW1pbHlgIGRlZmF1bHRzIHRvIGAwYCAvIGBBRl9VTlNQRUNgKS5cXG4yLiBQYXJzaW5nIGFuZCB1cGRhdGVzOiBgbmV0cG9sbF9wYXJzZV9pcF9hZGRyYCBwb3B1bGF0ZXMgYGlwYCAodmlhIGBpbjRfcHRvbmApIG9yIGBpbjZgICh2aWEgYGluNl9wdG9uYCkgYW5kIHNldHMgYGZhbWlseWAgYWNjb3JkaW5nbHkgKGBBRl9JTkVUYCBvciBgQUZfSU5FVDZgKS4gV2hlbiBhdXRvLWRlcml2ZWQsIGBuZXRjb25zX3Rha2VfaXB2NGAgYW5kIGBuZXRjb25zX3Rha2VfaXB2NmAgZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYWRkcmVzcyBhbmQgc2V0IGBmYW1pbHlgLlxcbjMuIFVzZXItc3BhY2Ugb3V0cHV0IC8gaW5mbyBsZWFrczogU3lzZnMgYXR0cmlidXRlcyBgbG9jYWxfaXBfc2hvd2AgYW5kIGByZW1vdGVfaXBfc2hvd2AgZW1pdCBmb3JtYXR0ZWQgc3RyaW5ncyBiYXNlZCBvbiB0aGUgdmVyaWZpZWQgYGZhbWlseWAgZGlzY3JpbWluYXRvciBhbmQgcmVhZCBvbmx5IHRoZSBmdWxseSBpbml0aWFsaXplZCBhZGRyZXNzIHVuaW9uIGZpZWxkcy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgbGVha2VkIHRvIHVzZXJzcGFjZS5cXG40LiBOZXR3b3JrIHBhY2tldCBjb25zdHJ1Y3Rpb246IFBhY2tldCBoZWFkZXJzIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgYnJhbmNoIG9uIGBudC1cXHUwMDNlcmVtb3RlX2lwLmZhbWlseWAgYW5kIHJlYWQgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYGluNmAgb3IgYGlwYCBmaWVsZHMuXFxuXFxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWsgcmlza3MgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4gU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[1] Phase: Succeeded StartedAt: 2026-09-05 01:50:41 +0000 UTC FinishedAt: 2026-09-05 01:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 01:50:41 +0000 UTC FinishedAt: 2026-09-05 01:50:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2] Phase: Succeeded StartedAt: 2026-09-05 01:50:41 +0000 UTC FinishedAt: 2026-09-05 05:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 01:50:41 +0000 UTC FinishedAt: 2026-09-05 05:29:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 01:50:41 +0000 UTC FinishedAt: 2026-09-05 01:50:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 01:50:41 +0000 UTC FinishedAt: 2026-09-05 01:50:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowfjcst/series-workflowfjcst-convert-artifact-609500764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 01:50:51 +0000 UTC FinishedAt: 2026-09-05 02:06:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 01:50:51 +0000 UTC FinishedAt: 2026-09-05 02:06:58 +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:*d031e4ae-100b-4868-9e91-f8d57b39f199,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-workflowfjcst/series-workflowfjcst-convert-artifact-609500764/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": "af84b8ad-7a99-4e5c-968f-677650db51f7", "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-workflowfjcst/series-workflowfjcst-build-action-1931899274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 01:50:51 +0000 UTC FinishedAt: 2026-09-05 02:06:48 +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:*d031e4ae-100b-4868-9e91-f8d57b39f199,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-workflowfjcst/series-workflowfjcst-convert-artifact-609500764/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": "af84b8ad-7a99-4e5c-968f-677650db51f7", "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-workflowfjcst/series-workflowfjcst-build-action-1931899274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 02:06:58 +0000 UTC FinishedAt: 2026-09-05 02:06:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 02:06:58 +0000 UTC FinishedAt: 2026-09-05 02:06:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 02:06:58 +0000 UTC FinishedAt: 2026-09-05 02:07:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 02:06:58 +0000 UTC FinishedAt: 2026-09-05 02:07:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowfjcst/series-workflowfjcst-convert-artifact-3946970523/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 02:07:08 +0000 UTC FinishedAt: 2026-09-05 02:09:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 02:07:08 +0000 UTC FinishedAt: 2026-09-05 02:08:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*af84b8ad-7a99-4e5c-968f-677650db51f7,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-workflowfjcst/series-workflowfjcst-build-action-1931899274/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-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 02:09:03 +0000 UTC FinishedAt: 2026-09-05 02:09:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 02:09:03 +0000 UTC FinishedAt: 2026-09-05 02:09:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 02:09:03 +0000 UTC FinishedAt: 2026-09-05 02:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 02:09:03 +0000 UTC FinishedAt: 2026-09-05 02:24: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:*d031e4ae-100b-4868-9e91-f8d57b39f199,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-workflowfjcst/series-workflowfjcst-convert-artifact-3946970523/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": "2fe723db-4f04-44c7-9433-d42f67cca6ad", "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-workflowfjcst/series-workflowfjcst-build-action-1301375295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 02:09:03 +0000 UTC FinishedAt: 2026-09-05 02:24: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:*d031e4ae-100b-4868-9e91-f8d57b39f199,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-workflowfjcst/series-workflowfjcst-convert-artifact-3946970523/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": "2fe723db-4f04-44c7-9433-d42f67cca6ad", "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-workflowfjcst/series-workflowfjcst-build-action-1301375295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 02:24:58 +0000 UTC FinishedAt: 2026-09-05 02:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 02:24:58 +0000 UTC FinishedAt: 2026-09-05 02:24:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 02:24:58 +0000 UTC FinishedAt: 2026-09-05 02:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 02:24:58 +0000 UTC FinishedAt: 2026-09-05 02:26:42 +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:*2fe723db-4f04-44c7-9433-d42f67cca6ad,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-workflowfjcst/series-workflowfjcst-build-action-1301375295/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-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 02:26:52 +0000 UTC FinishedAt: 2026-09-05 05:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 02:26:52 +0000 UTC FinishedAt: 2026-09-05 05:29:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"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:*af84b8ad-7a99-4e5c-968f-677650db51f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2fe723db-4f04-44c7-9433-d42f67cca6ad,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-workflowfjcst/series-workflowfjcst-build-action-1931899274/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-workflowfjcst/series-workflowfjcst-build-action-1301375295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 02:26:52 +0000 UTC FinishedAt: 2026-09-05 02:27:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 02:26:52 +0000 UTC FinishedAt: 2026-09-05 02:26:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"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-workflowfjcst/series-workflowfjcst-convert-artifact-3446941332/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 02:26:52 +0000 UTC FinishedAt: 2026-09-05 02:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 02:26:52 +0000 UTC FinishedAt: 2026-09-05 02:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 02:26:52 +0000 UTC FinishedAt: 2026-09-05 02:26:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 02:27:02 +0000 UTC FinishedAt: 2026-09-05 05:29:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfjcst[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["netcons_netpoll_setup","netpoll_parse_ip_addr","local_ip_store","remote_ip_store","local_ip_show","remote_ip_show","netpoll_send_udp","netcons_take_ipv4","netcons_take_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7042c8c193e5d634198b7c766bb3a01c8e3ee0e2","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETCONSOLE","NETCONSOLE_DYNAMIC","CONFIGFS_FS","IPV6"],"series_id":"c855f1c8-c0b9-4963-a39b-7878e6e5ddb2","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 02:27:02 +0000 UTC FinishedAt: 2026-09-05 05:29:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*af84b8ad-7a99-4e5c-968f-677650db51f7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2fe723db-4f04-44c7-9433-d42f67cca6ad,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-workflowfjcst/series-workflowfjcst-build-action-1931899274/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-workflowfjcst/series-workflowfjcst-build-action-1301375295/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-workflowfjcst/series-workflowfjcst-convert-artifact-3446941332/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,}