Name: series-workflow9skjl Phase: Succeeded StartedAt: 2026-08-12 05:53:50 +0000 UTC FinishedAt: 2026-08-12 10:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[0] Phase: Succeeded StartedAt: 2026-08-12 05:53:50 +0000 UTC FinishedAt: 2026-08-12 06:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 05:53:50 +0000 UTC FinishedAt: 2026-08-12 06:12:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "c1e16512-ce79-401e-a6fa-c2118a0032a3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sys_init_module", "sys_finit_module" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfaW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7c3lzX2Zpbml0X21vZHVsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBleGNlZWQgdGhlIGF2YWlsYWJsZSBwYWdlIGZsYWcgYml0cy4gSXQgaW50cm9kdWNlcyBhIHJldHJ5IG1lY2hhbmlzbSBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYCBieSByZXR1cm5pbmcgYC1FQUdBSU5gIGZyb20gYG1vdmVfbW9kdWxlKClgICh2aWEgYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWApLiBUaGUgc3RhdGUgaXMgc2F2ZWQgaW4gYSBsb2NhbCBzdGFjayBhcnJheSBgZnJvYl9zaXplYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB1c2luZyB0aGUgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgbWFjcm8gKGl0ZXJhdGluZyBvdmVyIGFsbCB2YWxpZCBtb2R1bGUgbWVtb3J5IHR5cGVzKS4gVGhlIHBhdGNoIGFsc28gbW92ZXMgYHJlbGVhc2VfbW9kdWxlX3RhZ3MoKWAgZWFybGllciBpbiB0aGUgZmlsZSB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSBlcnJvciBwYXRoLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vZHVsZSBsb2FkaW5nIGxvZ2ljIHRvIGhhbmRsZSBhIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgY2Fubm90IGZpdCBpbiBwYWdlIGZsYWcgYml0cy4gSXQgYWRkcyBhIHJldHJ5IGxvb3AgaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgIHdoZW4gYG1vdmVfbW9kdWxlYCByZXR1cm5zIGAtRUFHQUlOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1vZHVsZSBsb2FkZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIHN5c2NhbGxzIHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWYyMDQ4NDc5YzVjNWFlMTg0Y2Y0YjE4YzMyOGM4OGYwMjc0OGY1ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA2OjA5OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmNcbmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLmVkMjZmMTY3YmU4NGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbW9kdWxlL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL21vZHVsZS9tYWluLmNcbkBAIC0yOTQ0LDYgJiM0MzsyOTQ0LDcgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBtb2R1bGUgKm1vZDtcbiBcdGludCBlcnI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmcm9iX3NpemVbTU9EX01FTV9OVU1fVFlQRVNdO1xuIFxuIFx0LyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqL1xuIFx0ZXJyID0gbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLFxuQEAgLTI5NjYsMTggJiM0MzsyOTY3LDM4IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiBcdCAqL1xuIFx0bW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLCBpbmZvLVx1MDAzZXNlY3N0cmluZ3MpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogU2F2ZSB0aGUgc2l6ZXMgcmVzZXJ2ZWQgYnkgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucygpIHNvIHRoZXkgY2FuXG4mIzQzO1x0ICogYmUgcmVzdG9yZWQgaWYgd2UgcmV0cnkgYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG4mIzQzO1x0XHRmcm9iX3NpemVbdHlwZV0gPSBpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbiBcdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueVxuIFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXG4gXHQgKi9cbiYjNDM7cmV0cnk6XG4gXHRsYXlvdXRfc2VjdGlvbnMoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuIFx0bGF5b3V0X3N5bXRhYihpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4gXG4gXHQvKiBBbGxvY2F0ZSBhbmQgbW92ZSB0byB0aGUgZmluYWwgcGxhY2UgKi9cbiBcdGVyciA9IG1vdmVfbW9kdWxlKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIC1FQUdBSU4gbWVhbnMgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCBidXQgdGhlIG1vZHVsZVxuJiM0MztcdFx0ICogY2FuIHN0aWxsIGxvYWQgd2l0aG91dCBpdC4gUmVzZXQgc3RhdGUgYW5kIHJldHJ5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvLCBmbGFncyk7XG4mIzQzO1x0XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2Vtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUgPSBmcm9iX3NpemVbdHlwZV07XG4mIzQzO1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5zeW1dLnNoX2ZsYWdzIFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcbiYjNDM7XHRcdGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnN0cl0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi9cbiBcdG1vZCA9ICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgubW9kXS5zaF9hZGRyO1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGIzMzQxMDMxMDQ3NzkuLjExMmEwMTRkNGI4OTAgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC04MzUsNiAmIzQzOzgzNSw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4mIzQzO3tcbiYjNDM7XHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4mIzQzO1x0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcbiYjNDM7XHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4mIzQzO1xuJiM0MztcdG1hc19sb2NrKFx1MDAyNm1hcyk7XG4mIzQzO1x0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbiYjNDM7XHRcdGlmICh2YWwgPT0gbW9kKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXVzZWQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfYXJlYTtcbiYjNDM7XG4mIzQzO1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpO1xuJiM0MztcdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTtcbiYjNDM7XHRpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyBcdTAwM2M9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbiYjNDM7XHRcdFx0cHJfaW5mbyhcJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHR0YWctXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cdTAwM2VjdC5saW5lbm8sIHRhZy1cdTAwM2VjdC5tb2RuYW1lLFxuJiM0MztcdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHVzZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO3JlbGVhc2VfYXJlYTpcbiYjNDM7XHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4mIzQzO1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbiYjNDM7XHRpZiAodmFsID09IFx1MDAyNnByZXBlbmRfbW9kKVxuJiM0MztcdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4mIzQzO291dDpcbiYjNDM7XHRtYXNfdW5sb2NrKFx1MDAyNm1hcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkwNCwxMCAmIzQzOzk1MCwxMiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdFx0aW50IGdyb3dfcmVzO1xuIFxuIFx0XHRtb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICYjNDM7IHNpemU7XG4tXHRcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xuJiM0MztcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuLVx0XHRcdFx0bW9kLVx1MDAzZW5hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTtcbiYjNDM7XHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4mIzQzO1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xuIFx0XHR9XG4gXG4gXHRcdGdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTtcbkBAIC05MjIsNTIgJiM0Mzs5NzAsNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG9mZnNldCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4te1xuLVx0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4tXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4tXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuLVx0c3RydWN0IG1vZHVsZSAqdmFsO1xuLVxuLVx0bWFzX2xvY2soXHUwMDI2bWFzKTtcbi1cdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4tXHRcdGlmICh2YWwgPT0gbW9kKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRpZiAoIXVzZWQpXG4tXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuLVxuLVx0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpO1xuLVx0ZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmxhc3QpO1xuLVx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xuLVx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4tXG4tXHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjPSBlbmRfdGFnOyB0YWcmIzQzOyYjNDM7KSB7XG4tXHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xuLVxuLVx0XHRcdGlmICghdGFnLVx1MDAzZWNvdW50ZXJzKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0Y291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7XG4tXHRcdFx0cHJfaW5mbyhcJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwmIzM0Oyxcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4tXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuLVx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHR1c2VkID0gZmFsc2U7XG4tXHR9XG4tcmVsZWFzZV9hcmVhOlxuLVx0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuLVx0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbi1cdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4tXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuLW91dDpcbi1cdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbi19XG4tXG4gc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApXG4ge1xuIFx0LyogQWxsb2NhdGUgbW9kdWxlIGFsbG9jX3RhZyBwZXJjcHUgY291bnRlcnMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19pbml0X21vZHVsZSYjMzQ7LAogICAgJiMzNDtzeXNfZmluaXRfbW9kdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb2R1bGUgbG9hZGluZyBsb2dpYyB0byBoYW5kbGUgYSBjYXNlIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGNhbm5vdCBmaXQgaW4gcGFnZSBmbGFnIGJpdHMuIEl0IGFkZHMgYSByZXRyeSBsb29wIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCB3aGVuIGBtb3ZlX21vZHVsZWAgcmV0dXJucyBgLUVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtb2R1bGUgbG9hZGVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXNjYWxscyB3aGVuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlmMjA0ODQ3OWM1YzVhZTE4NGNmNGIxOGMzMjhjODhmMDI3NDhmNWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwNjowOTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmMKaW5kZXggNDZkZDhkMjVhNjA1OC4uZWQyNmYxNjdiZTg0ZCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL21vZHVsZS9tYWluLmMKQEAgLTI5NDQsNiAmIzQzOzI5NDQsNyBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWludCBlcnI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZnJvYl9zaXplW01PRF9NRU1fTlVNX1RZUEVTXTsKIAogCS8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi8KIAllcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGluZm8tJmd0O2hkciwgaW5mby0mZ3Q7c2VjaGRycywKQEAgLTI5NjYsMTggJiM0MzsyOTY3LDM4IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncykKIAkgKi8KIAltb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tJmd0O2hkciwgaW5mby0mZ3Q7c2VjaGRycywgaW5mby0mZ3Q7c2Vjc3RyaW5ncyk7CiAKJiM0MzsJLyoKJiM0MzsJICogU2F2ZSB0aGUgc2l6ZXMgcmVzZXJ2ZWQgYnkgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucygpIHNvIHRoZXkgY2FuCiYjNDM7CSAqIGJlIHJlc3RvcmVkIGlmIHdlIHJldHJ5IGJlbG93LgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpCiYjNDM7CQlmcm9iX3NpemVbdHlwZV0gPSBpbmZvLSZndDttb2QtJmd0O21lbVt0eXBlXS5zaXplOwomIzQzOwogCS8qCiAJICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3cKIAkgKiB0aGlzIGlzIGRvbmUgZ2VuZXJpY2FsbHk7IHRoZXJlIGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBhbnkKIAkgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy4KIAkgKi8KJiM0MztyZXRyeToKIAlsYXlvdXRfc2VjdGlvbnMoaW5mby0mZ3Q7bW9kLCBpbmZvKTsKIAlsYXlvdXRfc3ltdGFiKGluZm8tJmd0O21vZCwgaW5mbyk7CiAKIAkvKiBBbGxvY2F0ZSBhbmQgbW92ZSB0byB0aGUgZmluYWwgcGxhY2UgKi8KIAllcnIgPSBtb3ZlX21vZHVsZShpbmZvLSZndDttb2QsIGluZm8pOwotCWlmIChlcnIpCi0JCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWlmIChlcnIgIT0gLUVBR0FJTikKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwkJLyoKJiM0MzsJCSAqIC1FQUdBSU4gbWVhbnMgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCBidXQgdGhlIG1vZHVsZQomIzQzOwkJICogY2FuIHN0aWxsIGxvYWQgd2l0aG91dCBpdC4gUmVzZXQgc3RhdGUgYW5kIHJldHJ5LgomIzQzOwkJICovCiYjNDM7CQlyZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvLCBmbGFncyk7CiYjNDM7CQlmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkKJiM0MzsJCQlpbmZvLSZndDttb2QtJmd0O21lbVt0eXBlXS5zaXplID0gZnJvYl9zaXplW3R5cGVdOwomIzQzOwkJaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5zeW1dLnNoX2ZsYWdzICZhbXA7PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwomIzQzOwkJaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5zdHJdLnNoX2ZsYWdzICZhbXA7PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQogCiAJLyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovCiAJbW9kID0gKHZvaWQgKilpbmZvLSZndDtzZWNoZHJzW2luZm8tJmd0O2luZGV4Lm1vZF0uc2hfYWRkcjsKZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmMKaW5kZXggYjMzNDEwMzEwNDc3OS4uMTEyYTAxNGQ0Yjg5MCAxMDA2NDQKLS0tIGEvbW0vYWxsb2NfdGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmMKQEAgLTgzNSw2ICYjNDM7ODM1LDUyIEBAIHN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpCiYjNDM7ewomIzQzOwlNQV9TVEFURShtYXMsICZhbXA7bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpOwomIzQzOwlzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7CiYjNDM7CXN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7CiYjNDM7CXN0cnVjdCBtb2R1bGUgKnZhbDsKJiM0MzsKJiM0MzsJbWFzX2xvY2soJmFtcDttYXMpOwomIzQzOwltYXNfZm9yX2VhY2hfcmV2KCZhbXA7bWFzLCB2YWwsIDApCiYjNDM7CQlpZiAodmFsID09IG1vZCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJaWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi8KJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIXVzZWQpCiYjNDM7CQlnb3RvIHJlbGVhc2VfYXJlYTsKJiM0MzsKJiM0MzsJc3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpOwomIzQzOwllbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMubGFzdCk7CiYjNDM7CWlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHsKJiM0MzsJCXN0cnVjdCBhbGxvY190YWcgKnRhZzsKJiM0MzsKJiM0MzsJCWZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgJmx0Oz0gZW5kX3RhZzsgdGFnJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjsKJiM0MzsKJiM0MzsJCQlpZiAoIXRhZy0mZ3Q7Y291bnRlcnMpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpOwomIzQzOwkJCXByX2luZm8oJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxuJiMzNDssCiYjNDM7CQkJCXRhZy0mZ3Q7Y3QuZmlsZW5hbWUsIHRhZy0mZ3Q7Y3QubGluZW5vLCB0YWctJmd0O2N0Lm1vZG5hbWUsCiYjNDM7CQkJCXRhZy0mZ3Q7Y3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJdXNlZCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7cmVsZWFzZV9hcmVhOgomIzQzOwltYXNfc3RvcmUoJmFtcDttYXMsIHVzZWQgPyAmYW1wO3VubG9hZGVkX21vZCA6IE5VTEwpOwomIzQzOwl2YWwgPSBtYXNfcHJldl9yYW5nZSgmYW1wO21hcywgMCk7CiYjNDM7CWlmICh2YWwgPT0gJmFtcDtwcmVwZW5kX21vZCkKJiM0MzsJCW1hc19zdG9yZSgmYW1wO21hcywgTlVMTCk7CiYjNDM7b3V0OgomIzQzOwltYXNfdW5sb2NrKCZhbXA7bWFzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7CkBAIC05MDQsMTAgJiM0Mzs5NTAsMTIgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCWludCBncm93X3JlczsKIAogCQltb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICYjNDM7IHNpemU7Ci0JCWlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSAmYW1wOyZhbXA7ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHsKJiM0MzsJCWlmICghdGFnc19hZGRyZXNzYWJsZSgpKSB7CiAJCQlzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpOwotCQkJcHJfd2FybigmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxuJiMzNDssCi0JCQkJbW9kLSZndDtuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7CiYjNDM7CQkJcHJfd2Fybl9vbmNlKCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXG4mIzM0OywKJiM0MzsJCQkJICAgICBtb2QtJmd0O25hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTsKJiM0MzsJCQlyZWxlYXNlX21vZHVsZV90YWdzKG1vZCwgZmFsc2UpOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOwogCQl9CiAKIAkJZ3Jvd19yZXMgPSB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSgpOwpAQCAtOTIyLDUyICYjNDM7OTcwLDYgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJcmV0dXJuIChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0Mzsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZCkKLXsKLQlNQV9TVEFURShtYXMsICZhbXA7bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpOwotCXN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZzsKLQlzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnOwotCXN0cnVjdCBtb2R1bGUgKnZhbDsKLQotCW1hc19sb2NrKCZhbXA7bWFzKTsKLQltYXNfZm9yX2VhY2hfcmV2KCZhbXA7bWFzLCB2YWwsIDApCi0JCWlmICh2YWwgPT0gbW9kKQotCQkJYnJlYWs7Ci0KLQlpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqLwotCQlnb3RvIG91dDsKLQotCWlmICghdXNlZCkKLQkJZ290byByZWxlYXNlX2FyZWE7Ci0KLQlzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5pbmRleCk7Ci0JZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmxhc3QpOwotCWlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHsKLQkJc3RydWN0IGFsbG9jX3RhZyAqdGFnOwotCi0JCWZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgJmx0Oz0gZW5kX3RhZzsgdGFnJiM0MzsmIzQzOykgewotCQkJc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyOwotCi0JCQlpZiAoIXRhZy0mZ3Q7Y291bnRlcnMpCi0JCQkJY29udGludWU7Ci0KLQkJCWNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpOwotCQkJcHJfaW5mbygmIzM0OyVzOiV1IG1vZHVsZSAlcyBmdW5jOiVzIGhhcyAlbGx1IGFsbG9jYXRlZCBhdCBtb2R1bGUgdW5sb2FkXG4mIzM0OywKLQkJCQl0YWctJmd0O2N0LmZpbGVuYW1lLCB0YWctJmd0O2N0LmxpbmVubywgdGFnLSZndDtjdC5tb2RuYW1lLAotCQkJCXRhZy0mZ3Q7Y3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJdXNlZCA9IGZhbHNlOwotCX0KLXJlbGVhc2VfYXJlYToKLQltYXNfc3RvcmUoJmFtcDttYXMsIHVzZWQgPyAmYW1wO3VubG9hZGVkX21vZCA6IE5VTEwpOwotCXZhbCA9IG1hc19wcmV2X3JhbmdlKCZhbXA7bWFzLCAwKTsKLQlpZiAodmFsID09ICZhbXA7cHJlcGVuZF9tb2QpCi0JCW1hc19zdG9yZSgmYW1wO21hcywgTlVMTCk7Ci1vdXQ6Ci0JbWFzX3VubG9jaygmYW1wO21hcyk7Ci19Ci0KIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnICpzdG9wKQogewogCS8qIEFsbG9jYXRlIG1vZHVsZSBhbGxvY190YWcgcGVyY3B1IGNvdW50ZXJzICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1vZHVsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGFuIGAtRUFHQUlOYCBlcnJvciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbW9kdWxlIGxvYWRpbmcgaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGVzIGJlaW5nIHRvdWNoZWQgYXJlIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGBtbS9hbGxvY190YWcuY2AuIFRoZSBjb3JlIGlzc3VlIGFwcGVhcnMgdG8gYmUgd2hlbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgcmV0dXJucyBgLUVBR0FJTmAg4oCTIGFuZCB0aGF0IGhhcHBlbnMgaWYgd2UmIzM5O3JlIHRyeWluZyB0byBsb2FkIGEgbW9kdWxlIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGRpc2FibGVkLCBidXQgd2UmIzM5O3ZlIHNvbWVob3cgaGl0IGEgbGltaXQgb24gdGhlIG51bWJlciBvZiB0YWcgYml0cyBhdmFpbGFibGUgaW4gcGFnZSBmbGFncy4KCk5vdywgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCwgdGhleSYjMzk7dmUgbW9kaWZpZWQgYGxheW91dF9hbmRfYWxsb2NhdGVgIHRvIHJldHJ5IHRoZSBtb2R1bGUgbG9hZCBpZiBgbW92ZV9tb2R1bGVgIGZhaWxzIHdpdGggYC1FQUdBSU5gLiBIYW5nIG9uIGEgc2Vjb25kLi4uIGBtb3ZlX21vZHVsZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgYGFsbG9jX21vZHVsZV90YWdzYCwgaXNuJiMzOTt0IGl0PyBUaGF0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgY29ubmVjdGlvbiBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBieSBncmVwcGluZyBhcm91bmQgZm9yIHRob3NlIGZ1bmN0aW9uIG5hbWVzLiBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aCBjb3JyZWN0bHkgYW5kIHRoYXQgYG1vdmVfbW9kdWxlYCBpcyBhY3R1YWxseSB0aGUgYm90dGxlbmVjayBoZXJlLiBOZWVkIHRvIHZlcmlmeSB0aGF0IHJlbGF0aW9uc2hpcCBleHBsaWNpdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfbW9kdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS9tYWluLmM9MjM2ND1zdGF0aWMgaW50IGVsZl92YWxpZGl0eV9jYWNoZV9zdHJ0YWIoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yNDE1LSAqIEFzIGEgbGFzdCBzdGVwIHdlIHNldCBpbmZvLVx1MDAzZW1vZCB0byB0aGUgdGVtcG9yYXJ5IGNvcHkgb2YgdGhlIG1vZHVsZSBpblxua2VybmVsL21vZHVsZS9tYWluLmM6MjQxNjogKiBpbmZvLVx1MDAzZWhkci4gVGhlIGZpbmFsIG9uZSB3aWxsIGJlIGFsbG9jYXRlZCBpbiBtb3ZlX21vZHVsZSgpLiBBbnlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI0MTctICogbW9kaWZpY2F0aW9ucyB3ZSBtYWtlIHRvIG91ciBjb3B5IG9mIHRoZSBtb2R1bGUgd2lsbCBiZSBjYXJyaWVkIG92ZXJcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNjU5PXN0YXRpYyBpbnQgZmluZF9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI3ODctXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNzg4OnN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxua2VybmVsL21vZHVsZS9tYWluLmMtMjc4OS17XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjk4Ni1cdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6Mjk4NzpcdGVyciA9IG1vdmVfbW9kdWxlKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5ODgtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAmIzM5O21vdmVfbW9kdWxlJiMzOTsqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGBtb3ZlX21vZHVsZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gZG8uIElzIGl0IHJlc3BvbnNpYmxlIGZvciByZWxvY2F0aW5nIGEgbW9kdWxlIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0sIHBlcmhhcHMgcmVvcmdhbml6aW5nIGRlcGVuZGVuY2llcywgb3IgaXMgaXQgbW9yZSByZWxhdGVkIHRvIGRhdGEgdHJhbnNmZXIgb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb24/IE15IGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGl0cyBpbnB1dHMsIG91dHB1dHMsIGFueSBpbnRlcm5hbCBjYWxscyBpdCBtYWtlcyB0byBvdGhlciBmdW5jdGlvbnMsIGFuZCBpdHMgb3ZlcmFsbCBsb2dpYy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGJ5IGV4YW1pbmluZyB0aGVzZSBlbGVtZW50cywgSSBjYW4gcXVpY2tseSBkZXZlbG9wIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBgbW92ZV9tb2R1bGVgIGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlICYjMzk7d2h5JiMzOTsgYmVoaW5kIGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgJiMzOTtob3cmIzM5Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX21vZHVsZV90YWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEtlcm5lbCBNb2R1bGUgVGFnZ2luZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgdGFnZ2luZyBzeXN0ZW0gd29ya3MuIFdoZXJlIHdvdWxkIEkgc3RhcnQ/IFdlbGwsIGBrZXJuZWwvbW9kdWxlL21haW4uY2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciB0aGUgY29yZSBtb2R1bGUgaGFuZGxpbmcgbG9naWMuIE15IGd1dCBzYXlzIHRoYXQgc29tZXRoaW5nIGxpa2UgYGFsbG9jX3RhZ2Agb3IgcGVyaGFwcyBhIGZ1bmN0aW9uIG5hbWVkIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIHdvdWxkIGJlIGludm9sdmVkIGluLCB5b3Uga25vdywgYWN0dWFsbHkgKmRvaW5nKiB0aGUgdGFnZ2luZyBvciBtYW5hZ2luZyB0aG9zZSByZXNlcnZlZCBpZGVudGlmaWVycy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgZmlsZSBhbmQgc3RhcnQgdHJhY2luZyBmcm9tIHRoZXJlLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzZXJ2ZV9tb2R1bGVfdGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgS2VybmVsIE1vZHVsZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZGlnIGludG8gaG93IG1vZHVsZSBhbGxvY2F0aW9uIHRhZ3MgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBmaWxlLCBzaW5jZSB0aGF0JiMzOTtzIGdlbmVyYWxseSB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBtb2R1bGUgbG9hZGluZyBhbmQgaW5pdGlhbGl6YXRpb24gbG9naWMgcmVzaWRlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHNlYXJjaCBmb3IgdGhlIHRlcm0gYGFsbG9jX3RhZ2Agd2l0aGluIHRoYXQgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdGFncyBhcmUgZGVmaW5lZCwgdXNlZCwgYW5kIG1hbmFnZWQgZHVyaW5nIG1vZHVsZSBsaWZlY3ljbGUgZXZlbnRzLiBJIGV4cGVjdCB0aGlzIHNlYXJjaCB3aWxsIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiB0YWdnaW5nLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIG1vZHVsZSBtYW5hZ2VtZW50IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY190YWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgTW9kdWxlIFJlbG9jYXRpb24gUHJvY2VzcyoqCgpIb2xkIG9uIGEgc2Vjb25kLiBJIHRob3VnaHQgYG1vdmVfbW9kdWxlYCB3YXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYC4gQnV0IGxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0IGxvb2tzIGxpa2UgYGxheW91dF9hbmRfYWxsb2NhdGVgIGlzIGFjdHVhbGx5IHRoZSBvbmUgdGhhdCBkb2VzIHRoYXQgcGFydGljdWxhciBqb2IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoaXMgc3RyYWlnaHQuIExldCYjMzk7cyBnbyBiYWNrIGFuZCBjaGVjay4gSSB0aGluayBJJiMzOTtsbCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBtb3ZlX21vZHVsZWAgZnVuY3Rpb24uIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbW9kdWxlIHJlbG9jYXRpb24gcHJvY2VzcyBieSBnb2luZyBvdmVyIHRoZSBjb2RlLiBUaW1lIHRvIGRpdmUgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3ODg6XHRzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbjI3ODk6XHR7XG4yNzkwOlx0XHRpbnQgaSwgcmV0O1xuMjc5MTpcdFx0ZW51bSBtb2RfbWVtX3R5cGUgdCA9IE1PRF9NRU1fTlVNX1RZUEVTO1xuMjc5MjpcdFx0Ym9vbCBjb2RldGFnX3NlY3Rpb25fZm91bmQgPSBmYWxzZTtcbjI3OTM6XHRcbjI3OTQ6XHRcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XG4yNzk1Olx0XHRcdGlmICghbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplKSB7XG4yNzk2Olx0XHRcdFx0bW9kLVx1MDAzZW1lbVt0eXBlXS5iYXNlID0gTlVMTDtcbjI3OTc6XHRcdFx0XHRjb250aW51ZTtcbjI3OTg6XHRcdFx0fVxuMjc5OTpcdFxuMjgwMDpcdFx0XHRyZXQgPSBtb2R1bGVfbWVtb3J5X2FsbG9jKG1vZCwgdHlwZSk7XG4yODAxOlx0XHRcdGlmIChyZXQpIHtcbjI4MDI6XHRcdFx0XHR0ID0gdHlwZTtcbjI4MDM6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4yODA0Olx0XHRcdH1cbjI4MDU6XHRcdH1cbjI4MDY6XHRcbjI4MDc6XHRcdC8qIFRyYW5zZmVyIGVhY2ggc2VjdGlvbiB3aGljaCBzcGVjaWZpZXMgU0hGX0FMTE9DICovXG4yODA4Olx0XHRwcl9kZWJ1ZyhcJiMzNDtGaW5hbCBzZWN0aW9uIGFkZHJlc3NlcyBmb3IgJXM6XFxuXCYjMzQ7LCBtb2QtXHUwMDNlbmFtZSk7XG4yODA5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtOyBpJiM0MzsmIzQzOykge1xuMjgxMDpcdFx0XHR2b2lkICpkZXN0O1xuMjgxMTpcdFx0XHRFbGZfU2hkciAqc2hkciA9IFx1MDAyNmluZm8tXHUwMDNlc2VjaGRyc1tpXTtcbjI4MTI6XHRcdFx0Y29uc3QgY2hhciAqc25hbWU7XG4yODEzOlx0XG4yODE0Olx0XHRcdGlmICghKHNoZHItXHUwMDNlc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykpXG4yODE1Olx0XHRcdFx0Y29udGludWU7XG4yODE2Olx0XG4yODE3Olx0XHRcdHNuYW1lID0gaW5mby1cdTAwM2VzZWNzdHJpbmdzICYjNDM7IHNoZHItXHUwMDNlc2hfbmFtZTtcbjI4MTg6XHRcdFx0LypcbjI4MTk6XHRcdFx0ICogTG9hZCBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkgYXMgdGhleSBtaWdodCBzdGlsbCBiZSB1c2VkXG4yODIwOlx0XHRcdCAqIGFmdGVyIG1vZHVsZSB1bmxvYWQuXG4yODIxOlx0XHRcdCAqL1xuMjgyMjpcdFx0XHRpZiAoY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLVx1MDAzZXNoX3NpemUpKSB7XG4yODIzOlx0XHRcdFx0ZGVzdCA9IGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuMjgyNDpcdFx0XHRcdFx0XHRhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBpKSwgc2hkci1cdTAwM2VzaF9hZGRyYWxpZ24pO1xuMjgyNTpcdFx0XHRcdGlmIChXQVJOX09OKCFkZXN0KSkge1xuMjgyNjpcdFx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjI4Mjc6XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjI4Mjg6XHRcdFx0XHR9XG4yODI5Olx0XHRcdFx0aWYgKElTX0VSUihkZXN0KSkge1xuMjgzMDpcdFx0XHRcdFx0cmV0ID0gUFRSX0VSUihkZXN0KTtcbjI4MzE6XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjI4MzI6XHRcdFx0XHR9XG4yODMzOlx0XHRcdFx0Y29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gdHJ1ZTtcbjI4MzQ6XHRcdFx0fSBlbHNlIHtcbjI4MzU6XHRcdFx0XHRlbnVtIG1vZF9tZW1fdHlwZSB0eXBlID0gc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAzZVx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XG4yODM2Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaGRyLVx1MDAzZXNoX2VudHNpemUgXHUwMDI2IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0s7XG4yODM3Olx0XG4yODM4Olx0XHRcdFx0ZGVzdCA9IG1vZC1cdTAwM2VtZW1bdHlwZV0uYmFzZSAmIzQzOyBvZmZzZXQ7XG4yODM5Olx0XHRcdH1cbjI4NDA6XHRcbjI4NDE6XHRcdFx0aWYgKHNoZHItXHUwMDNlc2hfdHlwZSAhPSBTSFRfTk9CSVRTKSB7XG4yODQyOlx0XHRcdFx0LypcbjI4NDM6XHRcdFx0XHQgKiBPdXIgRUxGIGNoZWNrZXIgYWxyZWFkeSB2YWxpZGF0ZWQgdGhpcywgYnV0IGxldCYjMzk7c1xuMjg0NDpcdFx0XHRcdCAqIGJlIHBlZGFudGljIGFuZCBtYWtlIHRoZSBnb2FsIGNsZWFyZXIuIFdlIGFjdHVhbGx5XG4yODQ1Olx0XHRcdFx0ICogZW5kIHVwIGNvcHlpbmcgb3ZlciBhbGwgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRoZVxuMjg0NjpcdFx0XHRcdCAqIHVzZXJzcGFjZSBjb3B5IG9mIHRoZSBlbnRpcmUgc3RydWN0IG1vZHVsZS5cbjI4NDc6XHRcdFx0XHQgKi9cbjI4NDg6XHRcdFx0XHRpZiAoaSA9PSBpbmZvLVx1MDAzZWluZGV4Lm1vZCBcdTAwMjZcdTAwMjZcbjI4NDk6XHRcdFx0XHQgICAoV0FSTl9PTl9PTkNFKHNoZHItXHUwMDNlc2hfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IG1vZHVsZSkpKSkge1xuMjg1MDpcdFx0XHRcdFx0cmV0ID0gLUVOT0VYRUM7XG4yODUxOlx0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4yODUyOlx0XHRcdFx0fVxuMjg1MzpcdFx0XHRcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXHUwMDNlc2hfYWRkciwgc2hkci1cdTAwM2VzaF9zaXplKTtcbjI4NTQ6XHRcdFx0fVxuMjg1NTpcdFx0XHQvKlxuMjg1NjpcdFx0XHQgKiBVcGRhdGUgdGhlIHVzZXJzcGFjZSBjb3B5JiMzOTtzIEVMRiBzZWN0aW9uIGFkZHJlc3MgdG8gcG9pbnQgdG9cbjI4NTc6XHRcdFx0ICogb3VyIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgYXMgYSBwdXJlIGNvbnZlbmllbmNlIHNvIHRoYXRcbjI4NTg6XHRcdFx0ICogdXNlcnMgb2YgaW5mbyBjYW4ga2VlcCB0YWtpbmcgYWR2YW50YWdlIGFuZCB1c2luZyB0aGUgbmV3bHlcbjI4NTk6XHRcdFx0ICogbWludGVkIG9mZmljaWFsIG1lbW9yeSBhcmVhLlxuMjg2MDpcdFx0XHQgKi9cbjI4NjE6XHRcdFx0c2hkci1cdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcbjI4NjI6XHRcdFx0cHJfZGVidWcoXCYjMzQ7XFx0MHglbHggMHglLjhseCAlc1xcblwmIzM0OywgKGxvbmcpc2hkci1cdTAwM2VzaF9hZGRyLFxuMjg2MzpcdFx0XHRcdCAobG9uZylzaGRyLVx1MDAzZXNoX3NpemUsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyAmIzQzOyBzaGRyLVx1MDAzZXNoX25hbWUpO1xuMjg2NDpcdFx0fVxuMjg2NTpcdFxuMjg2NjpcdFx0cmV0dXJuIDA7XG4yODY3Olx0b3V0X2VycjpcbjI4Njg6XHRcdG1vZHVsZV9tZW1vcnlfcmVzdG9yZV9yb3gobW9kKTtcbjI4Njk6XHRcdHdoaWxlICh0LS0pXG4yODcwOlx0XHRcdG1vZHVsZV9tZW1vcnlfZnJlZShtb2QsIHQpO1xuMjg3MTpcdFx0aWYgKGNvZGV0YWdfc2VjdGlvbl9mb3VuZClcbjI4NzI6XHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhtb2QpO1xuMjg3MzpcdFxuMjg3NDpcdFx0cmV0dXJuIHJldDtcbjI4NzU6XHR9XG4yODc2Olx0XG4yODc3Olx0c3RhdGljIGludCBjaGVja19leHBvcnRfc3ltYm9sX3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZClcbjI4Nzg6XHR7XG4yODc5Olx0XHRpZiAobW9kLVx1MDAzZW51bV9zeW1zIFx1MDAyNlx1MDAyNiAhbW9kLVx1MDAzZWZsYWdzdGFiKSB7XG4yODgwOlx0XHRcdHByX2VycihcJiMzNDslczogbm8gZmxhZ3MgZm9yIGV4cG9ydGVkIHN5bWJvbHNcXG5cJiMzNDssIG1vZC1cdTAwM2VuYW1lKTtcbjI4ODE6XHRcdFx0cmV0dXJuIC1FTk9FWEVDO1xuMjg4MjpcdFx0fVxuMjg4MzpcdCNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlNcbjI4ODQ6XHRcdGlmIChtb2QtXHUwMDNlbnVtX3N5bXMgXHUwMDI2XHUwMDI2ICFtb2QtXHUwMDNlY3Jjcykge1xuMjg4NTpcdFx0XHRyZXR1cm4gdHJ5X3RvX2ZvcmNlX2xvYWQobW9kLFxuMjg4NjpcdFx0XHRcdFx0XHQgXCYjMzQ7bm8gdmVyc2lvbnMgZm9yIGV4cG9ydGVkIHN5bWJvbHNcJiMzNDspO1xuMjg4NzpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTI3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYCoqCgpSaWdodCwgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gIGhhcyBiZWVuIGludm9rZWQuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IG1hbmFnZXMgdGhlIGFsbG9jYXRpb24gb2YgYSBzcGVjaWZpYyBzZWN0aW9uIHdpdGhpbiBhIGNvZGUgdGFnIHN0cnVjdHVyZSwgcmlnaHQ/IFByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoaXMgcGFydGljdWxhciBtb2R1bGUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBpdCYjMzk7cyBoYW5kbGluZyB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uLCBvciBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGFsbG9jYXRpb24gc2NoZW1lIGZvciB0aGUgc2VjdGlvbnMgdGhlbXNlbHZlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBwYXJhbWV0ZXJzIGl0IHJlY2VpdmVzLCBhbmQgdGhlbiB0cmFjZSBpdHMgZXhlY3V0aW9uIHBhdGguIEkmIzM5O20gbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJpbWl0aXZlcywgYW5kIG1heWJlIHNvbWUga2luZCBvZiBzZWN0aW9uIG1ldGFkYXRhIG1hbmFnZW1lbnQuIEhvcGVmdWxseSwgdGhlIG5hbWluZyBjb252ZW50aW9ucyBhcmUgZGVjZW50IGVub3VnaCB0byBwcm92aWRlIHNvbWUgdXNlZnVsIGhpbnRzLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgYXMgc2ltcGxlIGFzIGVuc3VyaW5nIHRoZXJlJiMzOTtzIHNwYWNlIGZvciBhIG5ldyBtb2R1bGUgb3IgYXMgaW50cmljYXRlIGFzIGhhbmRsaW5nIHNoYXJlZCBjb2RlIHNlY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29kZXRhZy5oPTkyPWJvb2wgY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC05My1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk0OnZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTUtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBwcmVwZW5kLFxuLS1cbmluY2x1ZGUvbGludXgvY29kZXRhZy5oPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgKlxuaW5jbHVkZS9saW51eC9jb2RldGFnLmg6MTA4OmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTA5LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgcHJlcGVuZCxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNzg4PXN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4MjItXHRcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSkpIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4MjM6XHRcdFx0ZGVzdCA9IGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxua2VybmVsL21vZHVsZS9tYWluLmMtMjgyNC1cdFx0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbi0tXG5saWIvY29kZXRhZy5jPTI1Mz1ib29sIGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmxpYi9jb2RldGFnLmMtMjgwLVxubGliL2NvZGV0YWcuYzoyODE6dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5saWIvY29kZXRhZy5jLTI4Mi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZXRhZyBBbGxvY2F0aW9uIE1vZHVsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAgZnVuY3Rpb24gd2l0aGluIGBsaWIvY29kZXRhZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGNvZGV0YWcgbW9kdWxlIGlzIGFsbG9jYXRpbmcgaXRzIHJlc291cmNlcy4gVGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsLCBiZWNhdXNlIHByb3BlciBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IGFyZSBmdW5kYW1lbnRhbCB0byBtZW1vcnkgc2FmZXR5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB1c2VkOiBhcmUgd2UgZGVhbGluZyB3aXRoIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJsb2NrcywgZHluYW1pYyBhbGxvY2F0aW9uIHdpdGggYG1hbGxvY2AsIGEgY3VzdG9tIGFsbG9jYXRvciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODE6XHR2b2lkICpjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcbiAyODI6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4gMjgzOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFsaWduKVxuIDI4NDpcdHtcbiAyODU6XHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IG5hbWUgJiM0Mzsgc3RybGVuKENPREVUQUdfU0VDVElPTl9QUkVGSVgpO1xuIDI4NjpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDI4NzpcdFx0dm9pZCAqcmV0ID0gRVJSX1BUUigtRUlOVkFMKTtcbiAyODg6XHRcbiAyODk6XHRcdG11dGV4X2xvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAyOTA6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3R0eXBlLCBcdTAwMjZjb2RldGFnX3R5cGVzLCBsaW5rKSB7XG4gMjkxOlx0XHRcdGlmIChzdHJjbXAodHlwZV9uYW1lLCBjdHR5cGUtXHUwMDNlZGVzYy5zZWN0aW9uKSA9PSAwKSB7XG4gMjkyOlx0XHRcdFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cdTAwM2VkZXNjLmFsbG9jX3NlY3Rpb25fbWVtKSlcbiAyOTM6XHRcdFx0XHRcdGJyZWFrO1xuIDI5NDpcdFxuIDI5NTpcdFx0XHRcdGRvd25fd3JpdGUoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiAyOTY6XHRcdFx0XHRyZXQgPSBjdHR5cGUtXHUwMDNlZGVzYy5hbGxvY19zZWN0aW9uX21lbShtb2QsIHNpemUsIHByZXBlbmQsIGFsaWduKTtcbiAyOTc6XHRcdFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuIDI5ODpcdFx0XHRcdGJyZWFrO1xuIDI5OTpcdFx0XHR9XG4gMzAwOlx0XHR9XG4gMzAxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHJldHVybiByZXQ7XG4gMzA0Olx0fVxuIDMwNTpcdFxuIDMwNjpcdHZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpXG4gMzA3Olx0e1xuIDMwODpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDMwOTpcdFxuIDMxMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb2RldGFnX2xvY2spO1xuIDMxMTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcbiAzMTI6XHRcdFx0aWYgKCFjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuIDMxMzpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxNDpcdFxuIDMxNTpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gMzE2Olx0XHRcdGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0obW9kLCBmYWxzZSk7XG4gMzE3Olx0XHRcdHVwX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gMzE4Olx0XHR9XG4gMzE5Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAzMjA6XHR9XG4gMzIxOlx0XG4gMzIyOlx0dm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpXG4gMzIzOlx0e1xuIDMyNDpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDMyNTpcdFxuIDMyNjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb2RldGFnX2xvY2spO1xuIDMyNzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcbiAzMjg6XHRcdFx0aWYgKCFjdHR5cGUtXHUwMDNlZGVzYy5tb2R1bGVfcmVwbGFjZWQpXG4gMzI5Olx0XHRcdFx0Y29udGludWU7XG4gMzMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIGBhbGxvY19zZWN0aW9uX21lbWAgaGFzIGJlZW4gY2FsbGVkLiBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgY3J1Y2lhbCB0aGluZyBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgdGhpcyBgYWxsb2Nfc2VjdGlvbl9tZW1gIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkZWZpbmVkKiBvciwgbW9yZSBwcmVjaXNlbHksICpzZXQqLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIGtub3cgaXQmIzM5O3MgYmVpbmcgY2FsbGVkOyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byBpdHMgb3JpZ2luLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGFsbG9jYXRpb24gaXMgaGFwcGVuaW5nLiBXaGF0JiMzOTtzIGRyaXZpbmcgdGhpcyBjYWxsPyBXaGVyZSBpcyB0aGUgbWVtb3J5IGFjdHVhbGx5IGJlaW5nIG1hbmFnZWQ/IElzIHRoaXMgZHluYW1pYyBhbGxvY2F0aW9uPyBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIG1lbW9yeSBtYXA/IEtub3dpbmcgdGhlIGxvY2F0aW9uIG9mIGl0cyBzZXR1cCB3aWxsIHVubG9jayBhIGZhciBtb3JlIGNvbXByZWhlbnNpdmUgZ3Jhc3Agb2YgdGhlIHByb2Nlc3MuIEkgd2FudCB0aGUgYnJlYWRjcnVtYnM7IEkgd2FudCB0byBmb2xsb3cgdGhlIGNhbGwgc3RhY2sgdXBzdHJlYW0gdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIHBpY3R1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NlY3Rpb25fbWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29kZXRhZy5oPTM5PXN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyB7XG4tLVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtNDgtXHRib29sICgqbmVlZHNfc2VjdGlvbl9tZW0pKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjQ5Olx0dm9pZCAqKCphbGxvY19zZWN0aW9uX21lbSkoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC01MC1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKTtcbi0tXG5saWIvYWxsb2NfdGFnLmM9OTgzPXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXG4tLVxubGliL2FsbG9jX3RhZy5jLTk4OS1cdFx0Lm5lZWRzX3NlY3Rpb25fbWVtXHQ9IG5lZWRzX3NlY3Rpb25fbWVtLFxubGliL2FsbG9jX3RhZy5jOjk5MDpcdFx0LmFsbG9jX3NlY3Rpb25fbWVtXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXG5saWIvYWxsb2NfdGFnLmMtOTkxLVx0XHQuZnJlZV9zZWN0aW9uX21lbVx0PSByZWxlYXNlX21vZHVsZV90YWdzLFxuLS1cbmxpYi9jb2RldGFnLmM9MjgxPXZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmxpYi9jb2RldGFnLmMtMjkxLVx0XHRpZiAoc3RyY21wKHR5cGVfbmFtZSwgY3R0eXBlLVx1MDAzZWRlc2Muc2VjdGlvbikgPT0gMCkge1xubGliL2NvZGV0YWcuYzoyOTI6XHRcdFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cdTAwM2VkZXNjLmFsbG9jX3NlY3Rpb25fbWVtKSlcbmxpYi9jb2RldGFnLmMtMjkzLVx0XHRcdFx0YnJlYWs7XG4tLVxubGliL2NvZGV0YWcuYy0yOTUtXHRcdFx0ZG93bl93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xubGliL2NvZGV0YWcuYzoyOTY6XHRcdFx0cmV0ID0gY3R0eXBlLVx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW0obW9kLCBzaXplLCBwcmVwZW5kLCBhbGlnbik7XG5saWIvY29kZXRhZy5jLTI5Ny1cdFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTEzMjQ9c3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy0xMzMwLVx0XHQubmVlZHNfc2VjdGlvbl9tZW1cdD0gbmVlZHNfc2VjdGlvbl9tZW0sXG5tbS9hbGxvY190YWcuYzoxMzMxOlx0XHQuYWxsb2Nfc2VjdGlvbl9tZW1cdD0gcmVzZXJ2ZV9tb2R1bGVfdGFncyxcbm1tL2FsbG9jX3RhZy5jLTEzMzItXHRcdC5mcmVlX3NlY3Rpb25fbWVtXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGtleSBjaGFuZ2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgcmVsYXRlZCB0byBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuIFJpZ2h0LCB0aGF0IGZ1bmN0aW9uIG5hbWUgY2xpY2tzLiBBbmQgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgdG8gcmV0dXJuIGBFUlJfUFRSKC1FQUdBSU4pYCB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbi4gTGV0IG1lIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyAtIGlmIGAhdGFnc19hZGRyZXNzYWJsZSgpYCwgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhlIHBhdGNoIGlzIHdvcmtpbmcgd2l0aGluIGBtbS9hbGxvY190YWcuY2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGZpbGUuIE5vdyBsZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBlZmZlY3RzIG9mIHRoZSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcbiA5NDY6XHRcdGlmIChJU19FUlIocmV0KSlcbiA5NDc6XHRcdFx0cmV0dXJuIHJldDtcbiA5NDg6XHRcbiA5NDk6XHRcdGlmIChtb2R1bGVfdGFncy5zaXplIFx1MDAzYyBvZmZzZXQgJiM0Mzsgc2l6ZSkge1xuIDk1MDpcdFx0XHRpbnQgZ3Jvd19yZXM7XG4gOTUxOlx0XG4gOTUyOlx0XHRcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgJiM0Mzsgc2l6ZTtcbiA5NTM6XHRcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiA5NTQ6XHRcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuIDk1NTpcdFx0XHRcdHByX3dhcm5fb25jZShcJiMzNDtXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cJiMzNDssXG4gOTU2Olx0XHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4gOTU3Olx0XHRcdFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcbiA5NTg6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiA5NTk6XHRcdFx0fVxuIDk2MDpcdFxuIDk2MTpcdFx0XHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XG4gOTYyOlx0XHRcdGlmIChncm93X3Jlcykge1xuIDk2MzpcdFx0XHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XG4gOTY0Olx0XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbG9jYXRpb24gdGFncyBpbiB0aGUgbW9kdWxlICVzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuIDk2NTpcdFx0XHRcdCAgICAgICBtb2QtXHUwMDNlbmFtZSk7XG4gOTY2Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xuIDk2NzpcdFx0XHR9XG4gOTY4Olx0XHR9XG4gOTY5Olx0XG4gOTcwOlx0XHRyZXR1cm4gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBvZmZzZXQpO1xuIDk3MTpcdH1cbiA5NzI6XHRcbiA5NzM6XHRzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbiA5NzQ6XHR7XG4gOTc1Olx0XHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xuIDk3NjpcdFx0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xuIDk3NzpcdFx0c3RydWN0IGFsbG9jX3RhZyAqc3RvcF90YWc7XG4gOTc4Olx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4gOTc5Olx0XG4gOTgwOlx0XHQvKiBwZXJjcHUgY291bnRlcnMgZm9yIGNvcmUgYWxsb2NhdGlvbnMgYXJlIGFscmVhZHkgc3RhdGljYWxseSBhbGxvY2F0ZWQgKi9cbiA5ODE6XHRcdGlmICghbW9kKVxuIDk4MjpcdFx0XHRyZXR1cm4gMDtcbiA5ODM6XHRcbiA5ODQ6XHRcdHN0YXJ0X3RhZyA9IGN0X3RvX2FsbG9jX3RhZyhzdGFydCk7XG4gOTg1Olx0XHRzdG9wX3RhZyA9IGN0X3RvX2FsbG9jX3RhZyhzdG9wKTtcbiA5ODY6XHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjIHN0b3BfdGFnOyB0YWcmIzQzOyYjNDM7KSB7XG4gOTg3Olx0XHRcdFdBUk5fT04odGFnLVx1MDAzZWNvdW50ZXJzKTtcbiA5ODg6XHRcdFx0dGFnLVx1MDAzZWNvdW50ZXJzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMpO1xuIDk4OTpcdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycykge1xuIDk5MDpcdFx0XHRcdHdoaWxlICgtLXRhZyBcdTAwM2U9IHN0YXJ0X3RhZykge1xuIDk5MTpcdFx0XHRcdFx0ZnJlZV9wZXJjcHUodGFnLVx1MDAzZWNvdW50ZXJzKTtcbiA5OTI6XHRcdFx0XHRcdHRhZy1cdTAwM2Vjb3VudGVycyA9IE5VTEw7XG4gOTkzOlx0XHRcdFx0fVxuIDk5NDpcdFx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhbGxvY2F0aW9uIHRhZyBwZXJjcHUgY291bnRlcnMgaW4gdGhlIG1vZHVsZSAlc1xcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTW9kdWxlIExvYWRpbmcgQmVoYXZpb3Igd2l0aCBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyB0aGlzIGNoYW5nZSBpbiB0aGUgbW9kdWxlIGxvYWRlci4gSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtIGlzIHNldCB1cCBzbyB0aGF0IGlmIGAhdGFnc19hZGRyZXNzYWJsZSgpYCByZXR1cm5zIHRydWUsIG1lbW9yeSBwcm9maWxpbmcgaXMgZGlzYWJsZWQgYW5kIGFuIGAtRUFHQUlOYCBlcnJvciBpcyByZXR1cm5lZC4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4gVGhpcyBgLUVBR0FJTmAgZ2V0cyBwYXNzZWQgYmFjayB1cCB0aGUgY2FsbCBzdGFjaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYG1vdmVfbW9kdWxlYC4gVGhlbiwgZG93biBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAsIHRoZSBjb2RlIGFjdGl2ZWx5ICpjYXRjaGVzKiB0aGF0IGAtRUFHQUlOYCBlcnJvciwgcmVzZXRzIHNvbWUgaW50ZXJuYWwgc3RhdGUsIGFuZCB0aGVuICpyZXRyaWVzKiB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLiBUaGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBpc24mIzM5O3QgaXQ/IEl0IGVzc2VudGlhbGx5IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gcmVzcG9uc2UgdG8gYSBzcGVjaWZpYyBjb25kaXRpb24uCgpUaGUgbmV4dCBxdWVzdGlvbiBpcywgJiMzNDtXaGVuIGlzIHRoaXMgYWN0dWFsbHkgaGl0PyYjMzQ7IEl0JiMzOTtzIHJlYWNoYWJsZSBpZiBhIG1vZHVsZSBpcyBsb2FkZWQgYW5kIGAhdGFnc19hZGRyZXNzYWJsZSgpYCBpcyB0cnVlIGF0IGFueSBwb2ludC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYHRhZ3NfYWRkcmVzc2FibGUoKWAgaXRzZWxmIGlzIGNoZWNraW5nIGlmIHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBjYW4gZml0IHdpdGhpbiB0aGUgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLiBUaGF0IGltcGxpZXMgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQuIFJpZ2h0LCB0aGUgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBjb25maWcgb3B0aW9uLiBTbywgdGhpcyByZXRyeSBiZWhhdmlvciBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBhY3RpdmUgYW5kIHRoZSB0YWdzIGFyZSB0b28gYmlnIHRvIGZpdCBpbiB0aGUgcGFnZSBmbGFncywgdGhlbiBpdCBzaG91bGQgdHJpZ2dlciBgLUVBR0FJTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIzLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWcuZGVidWctMzQwLVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnLmRlYnVnOjM0MTpcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXG5tbS9LY29uZmlnLmRlYnVnOjM0Mzpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDQtXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDUtXHRkZWZhdWx0IG5cbm1tL0tjb25maWcuZGVidWc6MzQ2Olx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9LY29uZmlnLmRlYnVnOjM0NzpcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDgtXHRoZWxwXG4tLVxubW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICYjNDM7PSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgJiM0Mzs9IGFsbG9jX3RhZy5vXG4tLVxubW0vYWxsb2NfdGFnLmMtMjgtXG5tbS9hbGxvY190YWcuYzoyOTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG5tbS9hbGxvY190YWcuYy0zMC1zdGF0aWMgYm9vbCBtZW1fcHJvZmlsaW5nX3N1cHBvcnQgPSB0cnVlO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTQ4PUVYUE9SVF9TWU1CT0woX3NoYXJlZF9hbGxvY190YWcpO1xuLS1cbm1tL2FsbG9jX3RhZy5jLTUwLVxubW0vYWxsb2NfdGFnLmM6NTE6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxubW0vYWxsb2NfdGFnLmMtNTItXHRcdFx0bWVtX2FsbG9jX3Byb2ZpbGluZ19rZXkpO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTExMTY9c3RhdGljIF9faW5pdCBib29sIG5lZWRfcGFnZV9hbGxvY190YWdnaW5nKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTEyMy1cbm1tL2FsbG9jX3RhZy5jOjExMjQ6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy0xMTI1LS8qXG4tLVxubW0vYWxsb2NfdGFnLmM9MTIwMj1zdGF0aWMgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTI1NS19XG5tbS9hbGxvY190YWcuYzoxMjU2OiNlbHNlIC8qICFDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vYWxsb2NfdGFnLmMtMTI1Ny1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNsZWFyX2Vhcmx5X2FsbG9jX3Bmbl90YWdfcmVmcyh2b2lkKSB7fVxubW0vYWxsb2NfdGFnLmM6MTI1ODojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbm1tL2FsbG9jX3RhZy5jLTEyNTktXG4tLVxubW0vYWxsb2NfdGFnLmM9MTI3Nz1zdGF0aWMgaW50IHByb2NfbWVtX3Byb2ZpbGluZ19oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubW0vYWxsb2NfdGFnLmMtMTI4OC1cbm1tL2FsbG9jX3RhZy5jOjEyODk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy0xMjkwLVx0XHQvKiBVc2VyIGNhbiYjMzk7dCB0b2dnbGUgcHJvZmlsaW5nIHdoaWxlIGRlYnVnZ2luZyAqL1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMjIwPXN0YXRpYyB2b2lkIGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTIzNC1cbm1tL3BhZ2VfYWxsb2MuYzoxMjM1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGFnZV9hbGxvYy5jLTEyMzYtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTEzMDE9c3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTMwNi1cbm1tL3BhZ2VfYWxsb2MuYzoxMzA3OiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9wYWdlX2FsbG9jLmMtMTMwOC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTMxMj1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKSB7fVxubW0vcGFnZV9hbGxvYy5jLTEzMTMtXG5tbS9wYWdlX2FsbG9jLmM6MTMxNDojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3BhZ2VfYWxsb2MuYy0xMzE1LVxuLS1cbm1tL3BhZ2VfZXh0LmM9ODA9c3RhdGljIHN0cnVjdCBwYWdlX2V4dF9vcGVyYXRpb25zICpwYWdlX2V4dF9vcHNbXSBfX2luaXRkYXRhID0ge1xuLS1cbm1tL3BhZ2VfZXh0LmMtODYtI2VuZGlmXG5tbS9wYWdlX2V4dC5jOjg3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGFnZV9leHQuYy04OC1cdFx1MDAyNnBhZ2VfYWxsb2NfdGFnZ2luZ19vcHMsXG4tLVxubW0vcGFnZV9leHQuYz0xMDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXNhZ2U7XG5tbS9wYWdlX2V4dC5jLTEwMS1cbm1tL3BhZ2VfZXh0LmM6MTAyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vcGFnZV9leHQuYy0xMDMtLypcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0zNT1zdHJ1Y3QgcGNwdW9ial9leHQge1xuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTM4LSNlbmRpZlxubW0vcGVyY3B1LWludGVybmFsLmg6Mzk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00MC1cdHVuaW9uIGNvZGV0YWdfcmVmXHR0YWc7XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmgtNDMtXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo0NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIHx8IGRlZmluZWQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00NS0jZGVmaW5lIE5FRURfUENQVU9CSl9FWFRcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD05MD1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wY3B1b2JqX2V4dCh2b2lkKVxubW0vcGVyY3B1LWludGVybmFsLmgtOTEte1xubW0vcGVyY3B1LWludGVybmFsLmg6OTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05My1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vcGVyY3B1LmM9MTY5MD1zdGF0aWMgdm9pZCBwY3B1X21lbWNnX2ZyZWVfaG9vayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIHNpemVfdCBzaXplKVxuLS1cbm1tL3BlcmNwdS5jLTE2OTQtXG5tbS9wZXJjcHUuYzoxNjk1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGVyY3B1LmMtMTY5Ni1zdGF0aWMgdm9pZCBwY3B1X2FsbG9jX3RhZ19hbGxvY19ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcbi0tXG5tbS9zaG93X21lbS5jPTQwOD12b2lkIF9fc2hvd19tZW0odW5zaWduZWQgaW50IGZpbHRlciwgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2ssXG4tLVxubW0vc2hvd19tZW0uYy00MzQtI2VuZGlmXG5tbS9zaG93X21lbS5jOjQzNTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3Nob3dfbWVtLmMtNDM2LVx0c3RhdGljIERFRklORV9TUElOTE9DSyhtZW1fYWxsb2NfcHJvZmlsaW5nX3NwaW5sb2NrKTtcbi0tXG5tbS9zbHViLmM9MjA0Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy0yMDYzLVxubW0vc2x1Yi5jOjIwNjQ6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9zbHViLmMtMjA2NS1cbi0tXG5tbS9zbHViLmM9MjA5Nz1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tLVxubW0vc2x1Yi5jLTIxMTItXG5tbS9zbHViLmM6MjExMzojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vc2x1Yi5jLTIxMTQtXG4tLVxubW0vc2x1Yi5jPTIxMTc9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLS1cbm1tL3NsdWIuYy0yMTE5LVxubW0vc2x1Yi5jOjIxMjA6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG5tbS9zbHViLmMtMjEyMS1cbi0tXG5tbS9zbHViLmM9MjMxND1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjMyMC1cbm1tL3NsdWIuYzoyMzIxOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vc2x1Yi5jLTIzMjItXG4tLVxubW0vc2x1Yi5jPTI0MDk9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuLS1cbm1tL3NsdWIuYy0yNDE1LVxubW0vc2x1Yi5jOjI0MTY6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3NsdWIuYy0yNDE3LVxuLS1cbm1tL3NsdWIuYz0yNDI1PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjQyOS1cbm1tL3NsdWIuYzoyNDMwOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xubW0vc2x1Yi5jLTI0MzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaW4gdGhlIGNvbmZpZyDigJMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBzZXQgdXAgZnV6emluZyBhZ2FpbnN0IGl0PyBJdCBsb29rcyBsaWtlIGl0IGludHJvZHVjZXMgYSByZXRyeSBsb29wIHdpdGhpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAuIFRoZSBjb2RlIG5vdyByZXRyaWVzIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgaWYgYG1vdmVfbW9kdWxlYCByZXR1cm5zIGAtRUFHQUlOYC4gVGhpcyBuZXcgaGFuZGxpbmcgc2VlbXMgdG8gYWRkcmVzcyBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgbWlnaHQgZmFpbCBkdWUgdG8gdGhlIG51bWJlciBvZiB0YWdzIGV4Y2VlZGluZyBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuCgpMZXQgbWUganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5LCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgaXMgbG9jYXRlZCBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLCByaWdodD8gT2theSwganVzdCB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGxheW91dF9hbmRfYWxsb2NhdGVgIGFnYWluLiBOZWVkIHRvIGJlIGNlcnRhaW4gYmVmb3JlIEkgZ28gZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk0NDpcdHtcbjI5NDU6XHRcdHN0cnVjdCBtb2R1bGUgKm1vZDtcbjI5NDY6XHRcdGludCBlcnI7XG4yOTQ3Olx0XHR1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107XG4yOTQ4Olx0XG4yOTQ5Olx0XHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG4yOTUwOlx0XHRlcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsXG4yOTUxOlx0XHRcdFx0XHRcdGluZm8tXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cdTAwM2Vtb2QpO1xuMjk1MjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI5NTM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI5NTQ6XHRcbjI5NTU6XHRcdGVyciA9IG1vZHVsZV9lbmZvcmNlX3J3eF9zZWN0aW9ucyhpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLFxuMjk1NjpcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cdTAwM2Vtb2QpO1xuMjk1NzpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI5NTg6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI5NTk6XHRcbjI5NjA6XHRcdC8qIFdlIHdpbGwgZG8gYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHBlci1jcHUgc2VjdGlvbnMgbGF0ZXIuICovXG4yOTYxOlx0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5wY3B1XS5zaF9mbGFncyBcdTAwMjY9IH4odW5zaWduZWQgbG9uZylTSEZfQUxMT0M7XG4yOTYyOlx0XG4yOTYzOlx0XHQvKlxuMjk2NDpcdFx0ICogTWFyayByZWxldmFudCBzZWN0aW9ucyBhcyBTSEZfUk9fQUZURVJfSU5JVCBzbyBsYXlvdXRfc2VjdGlvbnMoKSBjYW5cbjI5NjU6XHRcdCAqIHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZS5cbjI5NjY6XHRcdCAqIE5vdGU6IHJvX2FmdGVyX2luaXQgc2VjdGlvbnMgYWxzbyBoYXZlIFNIRl97V1JJVEUsQUxMT0N9IHNldC5cbjI5Njc6XHRcdCAqL1xuMjk2ODpcdFx0bW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLCBpbmZvLVx1MDAzZXNlY3N0cmluZ3MpO1xuMjk2OTpcdFxuMjk3MDpcdFx0LypcbjI5NzE6XHRcdCAqIFNhdmUgdGhlIHNpemVzIHJlc2VydmVkIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoKSBzbyB0aGV5IGNhblxuMjk3MjpcdFx0ICogYmUgcmVzdG9yZWQgaWYgd2UgcmV0cnkgYmVsb3cuXG4yOTczOlx0XHQgKi9cbjI5NzQ6XHRcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxuMjk3NTpcdFx0XHRmcm9iX3NpemVbdHlwZV0gPSBpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZTtcbjI5NzY6XHRcbjI5Nzc6XHRcdC8qXG4yOTc4Olx0XHQgKiBEZXRlcm1pbmUgdG90YWwgc2l6ZXMsIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAgRm9yIG5vd1xuMjk3OTpcdFx0ICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW55XG4yOTgwOlx0XHQgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy5cbjI5ODE6XHRcdCAqL1xuMjk4MjpcdHJldHJ5OlxuMjk4MzpcdFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbjI5ODQ6XHRcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuMjk4NTpcdFxuMjk4NjpcdFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4yOTg3Olx0XHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4yOTg4Olx0XHRpZiAoZXJyKSB7XG4yOTg5Olx0XHRcdGlmIChlcnIgIT0gLUVBR0FJTilcbjI5OTA6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjk5MTpcdFx0XHQvKlxuMjk5MjpcdFx0XHQgKiAtRUFHQUlOIG1lYW5zIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQgYnV0IHRoZSBtb2R1bGVcbjI5OTM6XHRcdFx0ICogY2FuIHN0aWxsIGxvYWQgd2l0aG91dCBpdC4gUmVzZXQgc3RhdGUgYW5kIHJldHJ5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBNb2R1bGUgTG9hZGluZyBSZXRyeSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29kZSBzbmlwcGV0LCBzcGVjaWZpY2FsbHkgdGhlIHJldHJ5IGxvZ2ljIGluIG1vZHVsZSBsb2FkaW5nLCB0cmlnZ2VyZWQgd2hlbiBhIGAtRUFHQUlOYCBlcnJvciBpcyBlbmNvdW50ZXJlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBtb2R1bGUgbG9hZGluZyBsb2dpYywgYW5kIGFueSBkZXZpYXRpb24gb3IgdW5leHBlY3RlZCBiZWhhdmlvciBoZXJlIGNvdWxkIGhhdmUgcHJldHR5IHNlcmlvdXMgaW1wbGljYXRpb25zLgoKVGhlIGNvZGUmIzM5O3MgcHVycG9zZSBpcyB0byByZXRyeSBhZnRlciBoYW5kbGluZyBhIGAtRUFHQUlOYCBlcnJvciwgd2hpY2ggc2lnbmlmaWVzIHRoYXQgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgYnV0IHRoZSBtb2R1bGUgY2FuIHN0aWxsIGJlIGxvYWRlZC4gSXQgcmV3cml0ZXMgc2VjdGlvbiBoZWFkZXJzLCBhZGp1c3RzIG1lbW9yeSBzaXplcyBmb3IgZGlmZmVyZW50IHR5cGVzLCBhbmQgY2xlYXJzIHRoZSBgU0hGX0FMTE9DYCBmbGFnIGZvciBzeW1ib2wgYW5kIHN0cmluZyB0YWJsZSBzZWN0aW9ucywgdGhlbiByZXRyaWVzLiBUaGlzIHJlc2V0IGFuZCByZXRyeSBtZWNoYW5pc20gc2NyZWFtcyBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBlc3BlY2lhbGx5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC4KCkdpdmVuIHRoYXQgbW9kdWxlIGxvYWRpbmcgaXMgcmVhY2hlZCB2aWEgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgc3lzY2FsbHMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGguIFRoZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgY29uZmlnIG9wdGlvbiBpcyB0aGUga2V5IHRvIHRyaWdnZXIgaXQuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSB0YXJnZXRzIGhlcmU/IGBsYXlvdXRfYW5kX2FsbG9jYXRlYCwgYG1vdmVfbW9kdWxlYCwgYW5kIGByZXNlcnZlX21vZHVsZV90YWdzYCBhcmUgaW1tZWRpYXRlbHkgb24gbXkgcmFkYXIuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGFsbCB0aHJlZSBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gV2hpbGUgc3RhdGljIGZ1bmN0aW9ucyBjYW4gc3RpbGwgYmUgdmFsdWFibGUgdGFyZ2V0cywgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwdWJsaWMgaW50ZXJmYWNlcyB0aGF0IGNhbGwgdGhlbSwgYmVjYXVzZSB0aGVzZSBhcmUgaGFyZGVyIHRvIHRhcmdldCBkaXJlY3RseS4gVGhlIGBsb2FkX21vZHVsZWAgaXMgc3RhdGljLCB3aGljaCBpcyBjYWxsZWQsIEkgYmVsaWV2ZSwgd2hlbiBjYWxsaW5nIGBpbml0X21vZHVsZWAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGVudHJ5cG9pbnQuIEkgYWxzbyBzaG91bGQgbm90ZSB0aGF0IHRoZSBzeXN0ZW0gY2FsbCB0byB0cmlnZ2VyIHRoaXMgaXMgYHN5c19pbml0X21vZHVsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLippbml0X21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvbWFpbi5jPTM0NDM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzY1NC1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM2NTU6U1lTQ0FMTF9ERUZJTkUzKGluaXRfbW9kdWxlLCB2b2lkIF9fdXNlciAqLCB1bW9kLFxua2VybmVsL21vZHVsZS9tYWluLmMtMzY1Ni1cdFx0dW5zaWduZWQgbG9uZywgbGVuLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1YXJncylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zODAxPXN0YXRpYyBpbnQgaWRlbXBvdGVudF9pbml0X21vZHVsZShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKiB1YXJncywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM4MTktXG5rZXJuZWwvbW9kdWxlL21haW4uYzozODIwOlNZU0NBTExfREVGSU5FMyhmaW5pdF9tb2R1bGUsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHVhcmdzLCBpbnQsIGZsYWdzKVxua2VybmVsL21vZHVsZS9tYWluLmMtMzgyMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTY4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1vZHVsZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIOKAkyB0aG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgcmlnaHQ/IEJ1dCBob2xkIG9uLCB0aGUgY2FsbCBjaGFpbiBpcyBhIGJpdCBtb3JlIGludHJpY2F0ZS4gYGxheW91dF9hbmRfYWxsb2NhdGVgIGdldHMgY2FsbGVkIGJ5IGBsb2FkX21vZHVsZWAuIEFuZCBgbG9hZF9tb2R1bGVgLCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZD8gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYSBmb2N1cy4gQXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IEkgY2FuIGRpZyBpbnRvPyBOb3BlLCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGByZXNlcnZlX21vZHVsZV90YWdzYCBhcmUgYm90aCBzdGF0aWMuIEhtbSwgaGFuZyBvbiwgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGlzIGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgYGFsbG9jX3NlY3Rpb25fbWVtYCB3aXRoaW4gYGFsbG9jX3RhZ19pbml0YC4gVGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKTGV0JiMzOTtzIHJldGhpbmsgdGhpcy4gQmFjayB0byB0aGUgaHVudCBmb3Igc29tZXRoaW5nIG5vbi1zdGF0aWMuIGBsb2FkX21vZHVsZWAgaXMgc3RhdGljLiBUaGF0IGRvZXNuJiMzOTt0IGhlbHAuIFNvLCBpdCBsb29rcyBsaWtlIGl0IHdpbGwgY29tZSBkb3duIHRvIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAuIEkmIzM5O2xsIGdvIGNoZWNrIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgLiptb2R1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYz0yMDc9c3RhdGljIHNzaXplX3QgbW9kdWxlX3pzdGRfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI5My1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI5NDppbnQgbW9kdWxlX2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI5NS17XG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTEyMD1pbnQgbW9kX3ZlcmlmeV9zaWcoY29uc3Qgdm9pZCAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDoxMjE6aW50IHRyeV90b19mb3JjZV9sb2FkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqcmVhc29uKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xMjItYm9vbCBmaW5kX3N5bWJvbChzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnICpmc2EpO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0xMzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGtlcm5lbF9zeW1ib2xfdmFsdWUoY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN5bSlcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMTQ0LSNpZmRlZiBDT05GSUdfTElWRVBBVENIXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTQ1OmludCBjb3B5X21vZHVsZV9lbGYoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xNDYtdm9pZCBmcmVlX21vZHVsZV9lbGYoc3RydWN0IG1vZHVsZSAqbW9kKTtcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg9MjA5PXN0cnVjdCBtb2RfZmFpbF9sb2FkIHtcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjE1LVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjIxNjppbnQgdHJ5X2FkZF9mYWlsZWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gZmFpbF9kdXBfbW9kX3JlYXNvbiByZWFzb24pO1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTIxNy12b2lkIG1vZF9zdGF0X2J1bXBfaW52YWxpZChzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0yNTY9c3RydWN0IG1vZF91bmxvYWRfdGFpbnQge1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0yNjItXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MjYzOmludCB0cnlfYWRkX3RhaW50ZWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCk7XG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjY0LXZvaWQgcHJpbnRfdW5sb2FkZWRfdGFpbnRlZF9tb2R1bGVzKHZvaWQpO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0yNzE9c3RhdGljIGlubGluZSB2b2lkIHByaW50X3VubG9hZGVkX3RhaW50ZWRfbW9kdWxlcyh2b2lkKVxuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0yNzYtI2lmZGVmIENPTkZJR19NT0RVTEVfREVDT01QUkVTU1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjI3NzppbnQgbW9kdWxlX2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7XG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjc4LXZvaWQgbW9kdWxlX2RlY29tcHJlc3NfY2xlYW51cChzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg9MzE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1vZHVsZSAqbW9kX2ZpbmQodW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbW9kX3RyZWVfcm9vdCAqdHJlZSlcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMzI4LVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjMyOTppbnQgbW9kdWxlX2VuYWJsZV9yb2RhdGFfcm8oY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozMzA6aW50IG1vZHVsZV9lbmFibGVfcm9kYXRhX3JvX2FmdGVyX2luaXQoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozMzE6aW50IG1vZHVsZV9lbmFibGVfZGF0YV9ueChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpO1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjMzMjppbnQgbW9kdWxlX2VuYWJsZV90ZXh0X3JveChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpO1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjMzMzppbnQgbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKGNvbnN0IEVsZl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTMzNC1cdFx0XHRcdGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTMzNj12b2lkIG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoY29uc3QgRWxmX0VoZHIgKmhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTMzOS0jaWZkZWYgQ09ORklHX01PRFVMRV9TSUdcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozNDA6aW50IG1vZHVsZV9zaWdfY2hlY2soc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zNDEtI2Vsc2UgLyogIUNPTkZJR19NT0RVTEVfU0lHICovXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTM2Nz1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykgeyB9XG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM3MC0jaWZkZWYgQ09ORklHX1NZU0ZTXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzcxOmludCBtb2Rfc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM3Mi1cdFx0ICAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zOTE9dm9pZCBtb2R1bGVfbGF5b3V0KHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHZlcnNpb25faW5mbyAqdmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zOTItXHRcdCAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHApO1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM5MzppbnQgY2hlY2tfbW9kc3RydWN0X3ZlcnNpb24oY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgc3RydWN0IG1vZHVsZSAqbW9kKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zOTQtaW50IHNhbWVfbWFnaWMoY29uc3QgY2hhciAqYW1hZ2ljLCBjb25zdCBjaGFyICpibWFnaWMsIGJvb2wgaGFzX2NyY3MpO1xuLS1cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz0zMTE9dm9pZCAqIF9fd2VhayBkZXJlZmVyZW5jZV9tb2R1bGVfZnVuY3Rpb25fZGVzY3JpcHRvcihzdHJ1Y3QgbW9kdWxlICptb2QsXG4tLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTMyMC0gKi9cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzozMjE6aW50IG1vZHVsZV9hZGRyZXNzX2xvb2t1cCh1bnNpZ25lZCBsb25nIGFkZHIsXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzIyLVx0XHRcdCAgdW5zaWduZWQgbG9uZyAqc2l6ZSxcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzQ3LVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjM0ODppbnQgbG9va3VwX21vZHVsZV9zeW1ib2xfbmFtZSh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKnN5bW5hbWUpXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzQ5LXtcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzcwLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjM3MTppbnQgbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTM3Mi1cdFx0ICAgICAgIGNoYXIgKm5hbWUsIGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgKmV4cG9ydGVkKVxuLS1cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz00NDc9dW5zaWduZWQgbG9uZyBmaW5kX2thbGxzeW1zX3N5bWJvbF92YWx1ZShzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTQ1Mi1cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzo0NTM6aW50IG1vZHVsZV9rYWxsc3ltc19vbl9lYWNoX3N5bWJvbChjb25zdCBjaGFyICptb2RuYW1lLFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTQ1NC1cdFx0XHRcdCAgIGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyksXG4tLVxua2VybmVsL21vZHVsZS9rbW9kLmM9NzI9c3RhdGljIGludCBjYWxsX21vZHByb2JlKGNoYXIgKm9yaWdfbW9kdWxlX25hbWUsIGludCB3YWl0KVxuLS1cbmtlcm5lbC9tb2R1bGUva21vZC5jLTEzMS0gKi9cbmtlcm5lbC9tb2R1bGUva21vZC5jOjEzMjppbnQgX19yZXF1ZXN0X21vZHVsZShib29sIHdhaXQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxua2VybmVsL21vZHVsZS9rbW9kLmMtMTMzLXtcbi0tXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTE3LSAqL1xua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYzoxODppbnQgY29weV9tb2R1bGVfZWxmKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmMtMTkte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTE2ND1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChtb2R1bGVfbm90aWZ5X2xpc3QpO1xua2VybmVsL21vZHVsZS9tYWluLmMtMTY1LVxua2VybmVsL21vZHVsZS9tYWluLmM6MTY2OmludCByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE2Ny17XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MTcwPUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE3MS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE3MjppbnQgdW5yZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE3My17XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9NzcyPXN0YXRpYyBpbnQgdHJ5X3N0b3BfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgaW50IGZsYWdzLCBpbnQgKmZvcmNlZClcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy03OTQtICovXG5rZXJuZWwvbW9kdWxlL21haW4uYzo3OTU6aW50IG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL21haW4uYy03OTYte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTExMDU9c3RhdGljIGNvbnN0IGNoYXIgdmVybWFnaWNbXSA9IFZFUk1BR0lDX1NUUklORztcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExMDYtXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxMTA3OmludCB0cnlfdG9fZm9yY2VfbG9hZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKnJlYXNvbilcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExMDgte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5MDk9Ym9vbCBfX3dlYWsgbW9kdWxlX2VsZl9jaGVja19hcmNoKEVsZl9FaGRyICpoZHIpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjkxMy1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MTQ6aW50IF9fd2VhayBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTE1LVx0XHRcdFx0ICAgICBFbGZfU2hkciAqc2VjaGRycyxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDEyPXN0YXRpYyB2b2lkIG1vZHVsZV9kZWFsbG9jYXRlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDIwLVxua2VybmVsL21vZHVsZS9tYWluLmM6MzAyMTppbnQgX193ZWFrIG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAyMi1cdFx0XHQgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycyxcbi0tXG5rZXJuZWwvbW9kdWxlL3NpZ25pbmcuYz00Mz1pbnQgbW9kX3ZlcmlmeV9zaWcoY29uc3Qgdm9pZCAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvc2lnbmluZy5jLTY5LVxua2VybmVsL21vZHVsZS9zaWduaW5nLmM6NzA6aW50IG1vZHVsZV9zaWdfY2hlY2soc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxua2VybmVsL21vZHVsZS9zaWduaW5nLmMtNzEte1xuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yMzA9dm9pZCBtb2Rfc3RhdF9idW1wX2JlY29taW5nKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjM5LVxua2VybmVsL21vZHVsZS9zdGF0cy5jOjI0MDppbnQgdHJ5X2FkZF9mYWlsZWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gZmFpbF9kdXBfbW9kX3JlYXNvbiByZWFzb24pXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjQxLXtcbi0tXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYz0xNT1zdGF0aWMgaW50IG1vZHVsZV9zZXRfbWVtb3J5KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy0zMi0gKi9cbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjMzOmludCBtb2R1bGVfZW5hYmxlX3RleHRfcm94KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZClcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTM0LXtcbi0tXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy01MC1cbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjUxOmludCBtb2R1bGVfZW5hYmxlX3JvZGF0YV9ybyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy01Mi17XG4tLVxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNjctXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYzo2ODppbnQgbW9kdWxlX2VuYWJsZV9yb2RhdGFfcm9fYWZ0ZXJfaW5pdChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy02OS17XG4tLVxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNzUtXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYzo3NjppbnQgbW9kdWxlX2VuYWJsZV9kYXRhX254KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZClcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTc3LXtcbi0tXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy04OS1cbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjkwOmludCBtb2R1bGVfZW5mb3JjZV9yd3hfc2VjdGlvbnMoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy05MS1cdFx0XHRcdGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsXG4tLVxua2VybmVsL21vZHVsZS9zeXNmcy5jPTMzMj1zdGF0aWMgaW50IG1vZF9zeXNmc19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMzYzLVxua2VybmVsL21vZHVsZS9zeXNmcy5jOjM2NDppbnQgbW9kX3N5c2ZzX3NldHVwKHN0cnVjdCBtb2R1bGUgKm1vZCxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYy0zNjUtXHRcdCAgICBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxuLS1cbmtlcm5lbC9tb2R1bGUvdHJhY2tpbmcuYz0xOD1leHRlcm4gc3RydWN0IGRlbnRyeSAqbW9kX2RlYnVnZnNfcm9vdDtcbmtlcm5lbC9tb2R1bGUvdHJhY2tpbmcuYy0xOS1cbmtlcm5lbC9tb2R1bGUvdHJhY2tpbmcuYzoyMDppbnQgdHJ5X2FkZF90YWludGVkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL3RyYWNraW5nLmMtMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTW9kdWxlIExvYWRpbmcgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIG1vZHVsZSBsb2FkaW5nIGNoYW5nZXMsIGFuZCB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbnMgc2VlbSB0byBiZSwgd2hpY2ggYXJlIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCwgYHJlc2VydmVfbW9kdWxlX3RhZ3NgLCBhbmQgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgLiBCdXQgdGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIGludGVybmFsIGhlbHBlcnMsIG5vdCB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGZvciwgSSBuZWVkIHRoZSBhY3R1YWwgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwhCgpSaWdodCwgc28gdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQsIHRoZSBzeXNjYWxscyB0aGVtc2VsdmVzLiBUaGUgaW5pdGlhbCBpZGVhIHdhcyB0byBmb2N1cyBvbiBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgLiBUaGF0IG1ha2VzIG1vcmUgc2Vuc2UsIGFuZCB0aGVuIEkgd2FzIGdldHRpbmcgc2xpZ2h0bHkgdGhyb3duIGJ5IHRoZSBpbnRlcm5hbCBgbG9hZF9tb2R1bGVgIGJlaW5nIHN0YXRpYyBhbmQgdGhlIG1haW4gd29yayBoYXBwZW5pbmcgdGhlcmUuIEJ1dCwgd2FpdCwgbm8sIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIGFyZSB0aGUgc3lzY2FsbHMsIGFuZCB0aGV5JiMzOTtyZSB3aGF0IFN5emthbGxlciBzaG91bGQgYmUgdXNpbmcgaW4gdGhlIHRlc3QgaGFybmVzcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIHVzaW5nIHRoZSBjb3JyZWN0IG5hbWVzIGZvciB0aGUgc3lzY2FsbHMuCgpBaCwgeWVzLCBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgLCBvciBzb21ldGltZXMganVzdCBgaW5pdF9tb2R1bGVgIG9yIGBmaW5pdF9tb2R1bGVgLCBhcmUgd2hhdCBTeXprYWxsZXIgd291bGQgYmUgbG9va2luZyBmb3IuIFRoYXQgc2VlbXMgcmlnaHQuIFBlcmZlY3QuIExldCYjMzk7cyBjb25maXJtIHRoYXQgdGhlc2UgYXJlIHRoZSBwcm9wZXIgbmFtZXMuIFllcywgU3l6a2FsbGVyIHVzZXMgYHN5c19pbml0X21vZHVsZWAuIE9rYXksIHRoYXQmIzM5O3MgZ29vZC4gUmVtZW1iZXIgdGhlIHByb21wdDogd2UmIzM5O3JlIGZhdm9yaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgpTbywgYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCBhcmUgZGVmaW5pdGVseSB0aGUgcHJlZmVycmVkIGVudHJ5IHBvaW50cy4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZSB0aGF0IEkmIzM5O20gbWlzc2luZy4gYGFsbG9jX3RhZ19pbml0YCBpcyBgX19pbml0YCBhbmQgc3RhdGljLiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYW5kIGByZWxlYXNlX21vZHVsZV90YWdzYCBhcmUgc3RhdGljIGFzIHdlbGwsIHNvIHRoYXQgY29uZmlybXMgaXQuIFRoZSBvbmx5IGVudHJ5IHBvaW50cyBhcmUgZGVmaW5pdGVseSB0aGUgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMsIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gTm93IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBuZWVkcyBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdG8gYmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIzLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTM0Mi1cbm1tL0tjb25maWcuZGVidWc6MzQzOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9LY29uZmlnLmRlYnVnLTM0NC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGRpZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBtbS9LY29uZmlnLmRlYnVnYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIGRlYnVnZ2luZyBjb25maWd1cmF0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGNvcmUgbWVtb3J5IGFyZWFzLiBJJiMzOTttIHNwZWNpZmljYWxseSBhaW1pbmcgYXJvdW5kIGxpbmUgMzI0OyB0aGF0IGZlZWxzIGxpa2UgYSBsaWtlbHkgcG9pbnQgdG8gc3RhcnQgdW5yYXZlbGluZyB3aGF0JiMzOTtzIGVuYWJsZWQgYW5kIGRpc2FibGVkLiBNeSBob3BlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGljaCBmZWF0dXJlcyBhcmUgYWN0aXZlIGluIHRoZSBjdXJyZW50IGJ1aWxkIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgcmlnaHQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEkgYW50aWNpcGF0ZSB0aGVyZSYjMzk7bGwgYmUgY29uZGl0aW9uYWwgYmxvY2tzIGFuZCBzb21lIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcyBpbiB0aGF0IGFyZWEuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHdoYXQgY2FuIGJlIGFkanVzdGVkLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0XHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1Y2Nlc3MsIHJldHJ5IGFuZCBmYWlsdXJlIGNvdW50ZXJzIG9mIHBhZ2VcbiAzMTY6XHRcdCAgZmF1bHRzIGhhbmRsZWQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZXItdm1hIGxvY2tzLiBXaGVuIGVuYWJsZWQsIHRoZVxuIDMxNzpcdFx0ICBjb3VudGVycyBhcmUgZXhwb3NlZCBpbiAvcHJvYy92bXN0YXQuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvclxuIDMxODpcdFx0ICBrZXJuZWwgZGV2ZWxvcGVycyB0byBldmFsdWF0ZSBlZmZlY3RpdmVuZXNzIG9mIHBlci12bWEgbG9ja3MgYW5kIHRvXG4gMzE5Olx0XHQgIGlkZW50aWZ5IHBhdGhvbG9naWNhbCBjYXNlcy4gQ291bnRpbmcgdGhlc2UgZXZlbnRzIGludHJvZHVjZXMgYSBzbWFsbFxuIDMyMDpcdFx0ICBvdmVyaGVhZCBpbiB0aGUgcGFnZSBmYXVsdCBwYXRoLlxuIDMyMTpcdFxuIDMyMjpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gMzIzOlx0XG4gMzI0Olx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbiAzMjU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1wmIzM0O1xuIDMyNjpcdFx0ZGVmYXVsdCBuXG4gMzI3Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDMyODpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gMzI5Olx0XHRkZXBlbmRzIG9uICFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVcbiAzMzA6XHRcdHNlbGVjdCBDT0RFX1RBR0dJTkdcbiAzMzE6XHRcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuIDMzMjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuIDMzMzpcdFx0aGVscFxuIDMzNDpcdFx0ICBUcmFjayBhbGxvY2F0aW9uIHNvdXJjZSBjb2RlIGFuZCByZWNvcmQgdG90YWwgYWxsb2NhdGlvbiBzaXplXG4gMzM1Olx0XHQgIGluaXRpYXRlZCBhdCB0aGF0IGNvZGUgbG9jYXRpb24uIFRoZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdHJhY2tcbiAzMzY6XHRcdCAgbWVtb3J5IGxlYWtzIHdpdGggYSBsb3cgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBpbXBhY3QuXG4gMzM3Olx0XG4gMzM4Olx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG4gMzM5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuIDM0MDpcdFx0ZGVmYXVsdCB5XG4gMzQxOlx0XHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcbiAzNDI6XHRcbiAzNDM6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xuIDM0NDpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIFN5c2NhbGwgVmVyaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCBlbmFibGluZyBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBjbGVhcjogYE1NVWAsIGBQUk9DX0ZTYCwgYW5kIGltcG9ydGFudGx5LCBpdCBuZWVkcyB0byBiZSAqbm90KiBgREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIHdoZW4gZW5hYmxlZCwgaXQgcHVsbHMgaW4gYENPREVfVEFHR0lOR2AsIGBQQUdFX0VYVEVOU0lPTmAsIGFuZCBgU0xBQl9PQkpfRVhUYC4gU28sIEkgdGhpbmsgd2Ugc2hvdWxkIGVuYWJsZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb3RoZXIgZGlyZWN0IGNvbmZpZ3VyYXRpb24gaXRlbXMuCgpBaCwgZ29vZCEgYE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUYCBpcyBgZGVmYXVsdCB5YCBhcyBsb25nIGFzIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBzZXQuIFNvLCBqdXN0IHNldHRpbmcgYE1FTV9BTExPQ19QUk9GSUxJTkdgIHNob3VsZCBiZSBlbm91Z2guIEdyZWF0LgoKTm93LCBhIHF1aWNrIHZlcmlmaWNhdGlvbiBvbiB0aGUgc3lzY2FsbHMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlIG5hbWVzIGFyZSByaWdodC4gSSBuZWVkIHRvIGNvbmZpcm0gYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCBhcmUgdGhlIGNvcnJlY3QgbmFtZXMuIFRoZXkgYXJlIGRlZmluZWQgd2l0aCBgU1lTQ0FMTF9ERUZJTkUzYCwgYW5kIHRoZXkgYXJlIG5hbWVkIGFjY29yZGluZyB0byB0aGUgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHkgYF9feDY0X3N5c19pbml0X21vZHVsZWAgb3IgYHN5c19pbml0X21vZHVsZWAgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuIFN5emthbGxlciB1c2VzIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgLiBTbywgZm9yIGBGb2N1c1N5bWJvbHNgLCB3ZSYjMzk7bGwgcHJvdmlkZSBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGluZ3MuCgpXYWl0IGEgc2Vjb25kLCBob2xkIG9uLi4uIGBsb2FkX21vZHVsZWAuLi4gSXQmIzM5O3MgdGhlIG1haW4gZnVuY3Rpb24sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gSXQmIzM5O3MgYSBodWdlIGZ1bmN0aW9uLCBhIGtleSBwaWVjZSBvZiB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGNoZWNrIGlmIGBsb2FkX21vZHVsZWAgaXMgaW5saW5lZCBiZWNhdXNlIHRoYXQgd291bGQgaW1wYWN0IHRoZSBzeW1ib2wgdmlzaWJpbGl0eSBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQuIFRoYXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2FkX21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xMS1cbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxMjp2b2lkIGttZW1sZWFrX2xvYWRfbW9kdWxlKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCxcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xMy1cdFx0XHQgIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTYyPXN0cnVjdCBsb2FkX2luZm8ge1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTYzLVx0Y29uc3QgY2hhciAqbmFtZTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDo2NDpcdC8qIHBvaW50ZXIgdG8gbW9kdWxlIGluIHRlbXBvcmFyeSBjb3B5LCBmcmVlZCBhdCBlbmQgb2YgbG9hZF9tb2R1bGUoKSAqL1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTY1LVx0c3RydWN0IG1vZHVsZSAqbW9kO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zNDI9c3RhdGljIGlubGluZSBpbnQgbW9kdWxlX3NpZ19jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM0OC0jaWZkZWYgQ09ORklHX0RFQlVHX0tNRU1MRUFLXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzQ5OnZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zNTAtI2Vsc2UgLyogIUNPTkZJR19ERUJVR19LTUVNTEVBSyAqL1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM1MTpzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM1Mi1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykgeyB9XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MTQxNz1zdGF0aWMgdm9pZCBmcmVlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMTQyMC1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE0MjE6XHRjb2RldGFnX3VubG9hZF9tb2R1bGUobW9kKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE0MjItXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzAwNC1cdG1vZCA9ICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgubW9kXS5zaF9hZGRyO1xua2VybmVsL21vZHVsZS9tYWluLmM6MzAwNTpcdGttZW1sZWFrX2xvYWRfbW9kdWxlKG1vZCwgaW5mbyk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDA2LVx0Y29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoaW5mby1cdTAwM2Vtb2QsIG1vZCk7XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MzQwNz1zdGF0aWMgaW50IGVhcmx5X21vZF9jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzQ0Mi0gKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM0NDM6c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNDQ0LVx0XHQgICAgICAgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1OTEtXG5rZXJuZWwvbW9kdWxlL21haW4uYzozNTkyOlx0aWYgKGNvZGV0YWdfbG9hZF9tb2R1bGUobW9kKSlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1OTMtXHRcdGdvdG8gc3lzZnNfY2xlYW51cDtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zNjU1PVNZU0NBTExfREVGSU5FMyhpbml0X21vZHVsZSwgdm9pZCBfX3VzZXIgKiwgdW1vZCxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjc0LVxua2VybmVsL21vZHVsZS9tYWluLmM6MzY3NTpcdHJldHVybiBsb2FkX21vZHVsZShcdTAwMjZpbmZvLCB1YXJncywgMCk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjc2LX1cbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zNzYyPXN0YXRpYyBpbnQgaW5pdF9tb2R1bGVfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqIHVhcmdzLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzc5Ny1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM3OTg6XHRyZXR1cm4gbG9hZF9tb2R1bGUoXHUwMDI2aW5mbywgdWFyZ3MsIGZsYWdzKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM3OTktfVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0xMDA9c3RhdGljIExJU1RfSEVBRChkdXBfZmFpbGVkX21vZHVsZXMpO1xuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0xODMtICogICAgY2FsbCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIGl0Llxua2VybmVsL21vZHVsZS9zdGF0cy5jOjE4NDogKiAgKiBmYWlsZWRfbG9hZF9tb2R1bGVzOiBob3cgbWFueSBtb2R1bGVzIGZhaWxlZCBvbmNlIHdlJiMzOTt2ZSBhbGxvY2F0ZWQgb3VyXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTg1LSAqICAgIHByaXZhdGUgc3BhY2UgZm9yIG91ciBtb2R1bGUgdXNpbmcgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpLiBUaGVzZSBmYWlsdXJlc1xuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yMDU9c3RhdGljIGF0b21pY190IGZhaWxlZF9iZWNvbWluZztcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzoyMDY6c3RhdGljIGF0b21pY190IGZhaWxlZF9sb2FkX21vZHVsZXM7XG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjA3LVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yMjA9dm9pZCBtb2Rfc3RhdF9idW1wX2ludmFsaWQoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yMjItXHRhdG9taWNfbG9uZ19hZGQoaW5mby1cdTAwM2VsZW4gKiAyLCBcdTAwMjZpbnZhbGlkX21vZF9ieXRlcyk7XG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MjIzOlx0YXRvbWljX2luYyhcdTAwMjZmYWlsZWRfbG9hZF9tb2R1bGVzKTtcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yMjQtI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRV9ERUNPTVBSRVNTKVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yNzM9c3RhdGljIHNzaXplX3QgcmVhZF9maWxlX21vZF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yODctXHRmYmVjb21pbmcgPSBhdG9taWNfcmVhZChcdTAwMjZmYWlsZWRfYmVjb21pbmcpO1xua2VybmVsL21vZHVsZS9zdGF0cy5jOjI4ODpcdGZsb2FkcyA9IGF0b21pY19yZWFkKFx1MDAyNmZhaWxlZF9sb2FkX21vZHVsZXMpO1xua2VybmVsL21vZHVsZS9zdGF0cy5jLTI4OS1cbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM9NDExPXN0YXRpYyBpbnQgX19pbml0IG1vZHVsZV9zdGF0c19pbml0KHZvaWQpXG4tLVxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQyMy1cdG1vZF9kZWJ1Z19hZGRfYXRvbWljKGZhaWxlZF9iZWNvbWluZyk7XG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6NDI0Olx0bW9kX2RlYnVnX2FkZF9hdG9taWMoZmFpbGVkX2xvYWRfbW9kdWxlcyk7XG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtNDI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE4MAoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA0MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1vZHVsZSBMb2FkaW5nIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gVGhlIGNvZGUmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBgbG9hZF9tb2R1bGVgIGlzIHN0YXRpYyBidXQgZW5vcm1vdXMuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBmYXZvcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBTaW5jZSBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIGFyZSB0aGUgdHJ1ZSBlbnRyeSBwb2ludHMsIGFuZCBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24gdGhleSBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQsIEkgc2hvdWxkIGJlIHVzaW5nIHRoZW0uIFdhaXQsIGhvbGQgb24sIGBzeXNfaW5pdF9tb2R1bGVgIGlzIGEgbWFjcm8sIHNvIGl0IGNvdWxkIGJlIGBfX3g2NF9zeXNfaW5pdF9tb2R1bGVgIG9yIGBzeXNfaW5pdF9tb2R1bGVgLiBJdCBzb3VuZHMgbGlrZSBzeXprYWxsZXIgZ2VuZXJhbGx5IHVuZGVyc3RhbmRzIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAsIHNvIHRoYXQgc2hvdWxkIGJlIGZpbmUuIEkmIzM5O2xsIHN0aWNrIHdpdGggYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGByZXNlcnZlX21vZHVsZV90YWdzYCBhbmQgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgLiBUaG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSYjMzk7bSBub3QgZGlyZWN0bHkgdGFyZ2V0aW5nIHRoZW0sIGJ1dCB0aGV5JiMzOTtyZSBpbXBvcnRhbnQuIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBjbGVhcmx5IHJlbGV2YW50IGhlcmUuCgpJcyB0aGVyZSBhbnkgb3RoZXIgY29uZmlnPyBUaGUgb2J2aW91cyByZXF1aXJlbWVudCBpcyBgTU9EVUxFU2AsIGJ1dCB0aGF0JiMzOTtzIHR5cGljYWxseSBlbmFibGVkIGluIG1vc3QgZnV6emluZyBzZXR1cHMsIHNvIEkgd29uJiMzOTt0IHdvcnJ5IGFib3V0IGl0LiBJICp3aWxsKiBiZSBpbmNsdWRpbmcgYE1FTV9BTExPQ19QUk9GSUxJTkdgLCB0aG91Z2guCgpTbywgaGVyZSYjMzk7cyBteSBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUg4oCTIHRoaXMgaXMgYSBjb3JlIG1vZHVsZSBsb2FkZXIgY2hhbmdlLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYHN5c19pbml0X21vZHVsZWAsIGBzeXNfZmluaXRfbW9kdWxlYCDigJMgdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTV9BTExPQ19QUk9GSUxJTkdgIOKAkyB0aGlzIGVuYWJsZXMgdGhlIHJlbGV2YW50IGNvZGUgcGF0aC4KKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW9kdWxlIGxvYWRpbmcgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIHdoZW4gdGhleSBjYW5ub3QgZml0IGluIHBhZ2UgZmxhZyBiaXRzLiBJdCBhZGRzIGEgcmV0cnkgbG9vcCB0byBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgd2hlbiBgbW92ZV9tb2R1bGVgIHJldHVybnMgYC1FQUdBSU5gLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbW9kdWxlIGxvYWRlciwgcmVhY2hhYmxlIHZpYSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXNjYWxscyB3aGVuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfaW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7c3lzX2Zpbml0X21vZHVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW9kdWxlIGxvYWRpbmcgbG9naWMgdG8gaGFuZGxlIGEgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBjYW5ub3QgZml0IGluIHBhZ2UgZmxhZyBiaXRzLiBJdCBhZGRzIGEgcmV0cnkgbG9vcCBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgd2hlbiBgbW92ZV9tb2R1bGVgIHJldHVybnMgYC1FQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbW9kdWxlIGxvYWRlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgc3lzY2FsbHMgd2hlbiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfaW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7c3lzX2Zpbml0X21vZHVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW9kdWxlIGxvYWRpbmcgbG9naWMgdG8gaGFuZGxlIGEgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBjYW5ub3QgZml0IGluIHBhZ2UgZmxhZyBiaXRzLiBJdCBhZGRzIGEgcmV0cnkgbG9vcCBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgd2hlbiBgbW92ZV9tb2R1bGVgIHJldHVybnMgYC1FQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbW9kdWxlIGxvYWRlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgc3lzY2FsbHMgd2hlbiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGV4Y2VlZCB0aGUgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLiBJdCBpbnRyb2R1Y2VzIGEgcmV0cnkgbWVjaGFuaXNtIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlKClgIGJ5IHJldHVybmluZyBgLUVBR0FJTmAgZnJvbSBgbW92ZV9tb2R1bGUoKWAgKHZpYSBgcmVzZXJ2ZV9tb2R1bGVfdGFncygpYCkuIFRoZSBzdGF0ZSBpcyBzYXZlZCBpbiBhIGxvY2FsIHN0YWNrIGFycmF5IGBmcm9iX3NpemVgIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIHRoZSBgZm9yX2VhY2hfbW9kX21lbV90eXBlYCBtYWNybyAoaXRlcmF0aW5nIG92ZXIgYWxsIHZhbGlkIG1vZHVsZSBtZW1vcnkgdHlwZXMpLiBUaGUgcGF0Y2ggYWxzbyBtb3ZlcyBgcmVsZWFzZV9tb2R1bGVfdGFncygpYCBlYXJsaWVyIGluIHRoZSBmaWxlIHRvIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGVycm9yIHBhdGguIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZjIwNDg0NzljNWM1YWUxODRjZjRiMThjMzI4Yzg4ZjAyNzQ4ZjVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDY6MDk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLmVkMjZmMTY3YmU4NGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCkBAIC0yOTQ0LDYgJiM0MzsyOTQ0LDcgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKQogewogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAlpbnQgZXJyOwomIzQzOwl1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107CiAKIAkvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovCiAJZXJyID0gbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhpbmZvLSZndDtoZHIsIGluZm8tJmd0O3NlY2hkcnMsCkBAIC0yOTY2LDE4ICYjNDM7Mjk2NywzOCBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiAJICovCiAJbW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLSZndDtoZHIsIGluZm8tJmd0O3NlY2hkcnMsIGluZm8tJmd0O3NlY3N0cmluZ3MpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFNhdmUgdGhlIHNpemVzIHJlc2VydmVkIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoKSBzbyB0aGV5IGNhbgomIzQzOwkgKiBiZSByZXN0b3JlZCBpZiB3ZSByZXRyeSBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKQomIzQzOwkJZnJvYl9zaXplW3R5cGVdID0gaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZTsKJiM0MzsKIAkvKgogCSAqIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93CiAJICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW55CiAJICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuCiAJICovCiYjNDM7cmV0cnk6CiAJbGF5b3V0X3NlY3Rpb25zKGluZm8tJmd0O21vZCwgaW5mbyk7CiAJbGF5b3V0X3N5bXRhYihpbmZvLSZndDttb2QsIGluZm8pOwogCiAJLyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovCiAJZXJyID0gbW92ZV9tb2R1bGUoaW5mby0mZ3Q7bW9kLCBpbmZvKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpZiAoZXJyICE9IC1FQUdBSU4pCiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiAtRUFHQUlOIG1lYW5zIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQgYnV0IHRoZSBtb2R1bGUKJiM0MzsJCSAqIGNhbiBzdGlsbCBsb2FkIHdpdGhvdXQgaXQuIFJlc2V0IHN0YXRlIGFuZCByZXRyeS4KJiM0MzsJCSAqLwomIzQzOwkJcmV3cml0ZV9zZWN0aW9uX2hlYWRlcnMoaW5mbywgZmxhZ3MpOwomIzQzOwkJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpCiYjNDM7CQkJaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZSA9IGZyb2Jfc2l6ZVt0eXBlXTsKJiM0MzsJCWluZm8tJmd0O3NlY2hkcnNbaW5mby0mZ3Q7aW5kZXguc3ltXS5zaF9mbGFncyAmYW1wOz0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKJiM0MzsJCWluZm8tJmd0O3NlY2hkcnNbaW5mby0mZ3Q7aW5kZXguc3RyXS5zaF9mbGFncyAmYW1wOz0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIAogCS8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqLwogCW1vZCA9ICh2b2lkICopaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5tb2RdLnNoX2FkZHI7CmRpZmYgLS1naXQgYS9tbS9hbGxvY190YWcuYyBiL21tL2FsbG9jX3RhZy5jCmluZGV4IGIzMzQxMDMxMDQ3NzkuLjExMmEwMTRkNGI4OTAgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC04MzUsNiAmIzQzOzgzNSw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKQomIzQzO3sKJiM0MzsJTUFfU1RBVEUobWFzLCAmYW1wO21vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTsKJiM0MzsJc3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnOwomIzQzOwlzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnOwomIzQzOwlzdHJ1Y3QgbW9kdWxlICp2YWw7CiYjNDM7CiYjNDM7CW1hc19sb2NrKCZhbXA7bWFzKTsKJiM0MzsJbWFzX2Zvcl9lYWNoX3JldigmYW1wO21hcywgdmFsLCAwKQomIzQzOwkJaWYgKHZhbCA9PSBtb2QpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CWlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCF1c2VkKQomIzQzOwkJZ290byByZWxlYXNlX2FyZWE7CiYjNDM7CiYjNDM7CXN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmluZGV4KTsKJiM0MzsJZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmxhc3QpOwomIzQzOwlpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7CiYjNDM7CQlzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7CiYjNDM7CiYjNDM7CQlmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnICZsdDs9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7CiYjNDM7CiYjNDM7CQkJaWYgKCF0YWctJmd0O2NvdW50ZXJzKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTsKJiM0MzsJCQlwcl9pbmZvKCYjMzQ7JXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcbiYjMzQ7LAomIzQzOwkJCQl0YWctJmd0O2N0LmZpbGVuYW1lLCB0YWctJmd0O2N0LmxpbmVubywgdGFnLSZndDtjdC5tb2RuYW1lLAomIzQzOwkJCQl0YWctJmd0O2N0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXVzZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzO3JlbGVhc2VfYXJlYToKJiM0MzsJbWFzX3N0b3JlKCZhbXA7bWFzLCB1c2VkID8gJmFtcDt1bmxvYWRlZF9tb2QgOiBOVUxMKTsKJiM0MzsJdmFsID0gbWFzX3ByZXZfcmFuZ2UoJmFtcDttYXMsIDApOwomIzQzOwlpZiAodmFsID09ICZhbXA7cHJlcGVuZF9tb2QpCiYjNDM7CQltYXNfc3RvcmUoJmFtcDttYXMsIE5VTEwpOwomIzQzO291dDoKJiM0MzsJbWFzX3VubG9jaygmYW1wO21hcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJIHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKQogewpAQCAtOTA0LDEwICYjNDM7OTUwLDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQlpbnQgZ3Jvd19yZXM7CiAKIAkJbW9kdWxlX3RhZ3Muc2l6ZSA9IG9mZnNldCAmIzQzOyBzaXplOwotCQlpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgJmFtcDsmYW1wOyAhdGFnc19hZGRyZXNzYWJsZSgpKSB7CiYjNDM7CQlpZiAoIXRhZ3NfYWRkcmVzc2FibGUoKSkgewogCQkJc2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTsKLQkJCXByX3dhcm4oJiMzNDtXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcbiYjMzQ7LAotCQkJCW1vZC0mZ3Q7bmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpOwomIzQzOwkJCXByX3dhcm5fb25jZSgmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxuJiMzNDssCiYjNDM7CQkJCSAgICAgbW9kLSZndDtuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7CiYjNDM7CQkJcmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKIAkJfQogCiAJCWdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTsKQEAgLTkyMiw1MiAmIzQzOzk3MCw2IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCXJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpCi17Ci0JTUFfU1RBVEUobWFzLCAmYW1wO21vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTsKLQlzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7Ci0Jc3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZzsKLQlzdHJ1Y3QgbW9kdWxlICp2YWw7Ci0KLQltYXNfbG9jaygmYW1wO21hcyk7Ci0JbWFzX2Zvcl9lYWNoX3JldigmYW1wO21hcywgdmFsLCAwKQotCQlpZiAodmFsID09IG1vZCkKLQkJCWJyZWFrOwotCi0JaWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi8KLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXVzZWQpCi0JCWdvdG8gcmVsZWFzZV9hcmVhOwotCi0Jc3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpOwotCWVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTsKLQlpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7Ci0JCXN0cnVjdCBhbGxvY190YWcgKnRhZzsKLQotCQlmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnICZsdDs9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHsKLQkJCXN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjsKLQotCQkJaWYgKCF0YWctJmd0O2NvdW50ZXJzKQotCQkJCWNvbnRpbnVlOwotCi0JCQljb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTsKLQkJCXByX2luZm8oJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxuJiMzNDssCi0JCQkJdGFnLSZndDtjdC5maWxlbmFtZSwgdGFnLSZndDtjdC5saW5lbm8sIHRhZy0mZ3Q7Y3QubW9kbmFtZSwKLQkJCQl0YWctJmd0O2N0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXVzZWQgPSBmYWxzZTsKLQl9Ci1yZWxlYXNlX2FyZWE6Ci0JbWFzX3N0b3JlKCZhbXA7bWFzLCB1c2VkID8gJmFtcDt1bmxvYWRlZF9tb2QgOiBOVUxMKTsKLQl2YWwgPSBtYXNfcHJldl9yYW5nZSgmYW1wO21hcywgMCk7Ci0JaWYgKHZhbCA9PSAmYW1wO3ByZXBlbmRfbW9kKQotCQltYXNfc3RvcmUoJmFtcDttYXMsIE5VTEwpOwotb3V0OgotCW1hc191bmxvY2soJmFtcDttYXMpOwotfQotCiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcCkKIHsKIAkvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNb2R1bGUgTG9hZGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgbW9kdWxlcyBhcmUgbG9hZGVkLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGAtRUFHQUlOYCBlcnJvcnMgdGhhdCBjYW4gcG9wIHVwIGR1cmluZyB0YWcgYWxsb2NhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IGByZXNlcnZlX21vZHVsZV90YWdzKClgIGNhbiBmYWlsIGJlY2F1c2Ugd2UmIzM5O3JlIHRyeWluZyB0byBjcmFtIHRvbyBtYW55IHRhZ3MgaW50byB0aGUgcGFnZSBmbGFnIGJpdHMuIFdoZW4gdGhhdCBoYXBwZW5zLCB0aGUgcGF0Y2ggZGlzYWJsZXMgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nLCByZWxlYXNlcyB0aGUgdGFncywgYW5kIGJhaWxzIG91dCB3aXRoIGAtRUFHQUlOYC4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCB0aGVuIGNhdGNoZXMgdGhlIGVycm9yLCByZXNldHMgdGhpbmdzLCBhbmQgdHJpZXMgYWdhaW4gd2l0aG91dCB1c2luZyB0YWdzLiBUaGF0JiMzOTtzIHRoZSBiYXNpYyBmbG93LgoKQnV0IG5vdywgSSBzZWUgc29tZXRoaW5nIG5ldzogdGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBgZnJvYl9zaXplYCBhcnJheSB3aXRoaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAuIEl0JiMzOTtzIGFuIGB1bnNpZ25lZCBsb25nYCBhcnJheSBvZiBgTU9EX01FTV9OVU1fVFlQRVNgICh3aGljaCBJIGtub3cgaXMgNyBmcm9tIHBhc3QgZXhwZXJpZW5jZSkgZWxlbWVudHMuIFRoZSBjb2RlIGlzIHNhdmluZyBgaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZWAgaW50byBgZnJvYl9zaXplYCAqYmVmb3JlKiBgbGF5b3V0X3NlY3Rpb25zKClgIGlzIGNhbGxlZC4gVGhlbiwgaWYgYG1vdmVfbW9kdWxlKClgIHJldHVybnMgYC1FQUdBSU5gLCBpdCByZXN0b3JlcyBgaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZWAgZnJvbSBgZnJvYl9zaXplW3R5cGVdYCwgY2xlYXJzIGBTSEZfQUxMT0NgIGZyb20gc29tZSBzZWN0aW9ucywgYW5kIGp1bXBzIHRvIGByZXRyeWAuIE1ha2VzIHNlbnNlLCB0aGUgc2l6ZSBvZiBtZW1vcnkgcmVnaW9ucyBhcmUgc2F2ZWQgcHJpb3IgdG8gcG90ZW50aWFsIGZhaWx1cmUsIHRoZW4gcmVzdG9yZWQgYWZ0ZXIgZmFpbHVyZSB0byByZXN0YXJ0IGxheW91dC4KClRoZSByZWQgZmxhZyBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIElzIHRoaXMgYGZyb2Jfc2l6ZWAgaW5pdGlhbGl6ZWQgY29ycmVjdGx5PyBJdCBpcyBmaWxsZWQgaW4gYSBsb29wOgoKYGBgYwoJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpCgkJZnJvYl9zaXplW3R5cGVdID0gaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZTsKYGBgCgpJIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLi4uIFRoZSBsb29wIGl0ZXJhdGVzIG92ZXIgYWxsICYjMzQ7dmFsaWQmIzM0OyBtb2R1bGUgbWVtb3J5IHR5cGVzLiBXaGF0IGNvbnN0aXR1dGVzICYjMzQ7dmFsaWQmIzM0OyBpbiB0aGlzIGNvbnRleHQ/IElmIHNvbWUgb2YgdGhvc2UgNyBlbGVtZW50cyBhcmVuJiMzOTt0IGluaXRpYWxpemVkLCB3ZSBjb3VsZCBiZSByZWFkaW5nIGdhcmJhZ2Ugd2hlbiByZXN0b3JpbmcgdGhlIHNpemVzISBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgbWFjcm8gZGVmaW5pdGlvbiB0byBtYWtlIGFic29sdXRlbHkgc3VyZS4gQW55IHZ1bG5lcmFiaWxpdHkgaGVyZSB3b3VsZCBjcmVhdGUgYSBzZXJpb3VzIHNlY3VyaXR5IHJpc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgZm9yX2VhY2hfbW9kX21lbV90eXBlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW9kdWxlLmg9MzE4PWVudW0gbW9kX21lbV90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM0Ny1cbmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MzQ4OiNkZWZpbmUgZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmgtMzQ5LVx0Zm9yIChlbnVtIG1vZF9tZW1fdHlwZSAodHlwZSkgPSAwO1x0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9uIHRoaXMgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgZnVuY3Rpb24gb3IgbWFjcm8gb3Igd2hhdGV2ZXIgaXQgaXMuIEkgY2FuJiMzOTt0IHJlYWxseSBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSBvciBob3cgSSBtaWdodCBsZXZlcmFnZSBpdCBlZmZlY3RpdmVseSB3aXRob3V0IGEgcHJvcGVyIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwYXJhbWV0ZXJzLCBpdHMgcmV0dXJuIHR5cGUgKGlmIGFueSksIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGl0ICpkb2VzKiB1bmRlciB0aGUgaG9vZC4gV2hhdCBpcyBpdCBpdGVyYXRpbmcgb3Zlcj8gV2hhdCBraW5kIG9mIG1lbW9yeSB0eXBlcyBpcyBpdCBoYW5kbGluZz8gSXMgaXQgcmVsYXRlZCB0byBtb2R1bGVzIG9yIHNvbWUgc29ydCBvZiB1bmRlcmx5aW5nIG1lbW9yeSBtb2RlbD8gVGhpcyBpcyBwcm9iYWJseSBhIGxvdy1sZXZlbCByb3V0aW5lLCBzbyB0aGUgZGV0YWlscyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIGEgcHJvcGVyIHVuZGVyc3RhbmRpbmcuIEkgbmVlZCB0aGUgZnVsbCBjb250ZXh0IHRvIG1ha2UgYW55IHVzZWZ1bCBqdWRnbWVudHMgYWJvdXQgaXRzIHVzZWZ1bG5lc3MgYW5kIGFwcGxpY2F0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aGF0IGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zvcl9lYWNoX21vZF9tZW1fdHlwZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDsuY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0zMzYtICAtICYjMzk7Zm9yX2VhY2hfbWxlX3N1YmVsZW1lbnQmIzM5O1xuLmNsYW5nLWZvcm1hdDozMzc6ICAtICYjMzk7Zm9yX2VhY2hfbW9kX21lbV90eXBlJiMzOTtcbi5jbGFuZy1mb3JtYXQtMzM4LSAgLSAmIzM5O2Zvcl9lYWNoX21vbl9jYXBhYmxlX3JkdF9yZXNvdXJjZSYjMzk7XG4tLVxuaW5jbHVkZS9saW51eC9tb2R1bGUuaD0zMTg9ZW51bSBtb2RfbWVtX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvbW9kdWxlLmgtMzQ3LVxuaW5jbHVkZS9saW51eC9tb2R1bGUuaDozNDg6I2RlZmluZSBmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tb2R1bGUuaC0zNDktXHRmb3IgKGVudW0gbW9kX21lbV90eXBlICh0eXBlKSA9IDA7XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9tb2R1bGUuaC0zNTItI2RlZmluZSBmb3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGNsYXNzKVx0XHRcXFxuaW5jbHVkZS9saW51eC9tb2R1bGUuaDozNTM6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tb2R1bGUuaC0zNTQtXHRcdGlmIChtb2RfbWVtX3R5cGVfaXNfIyNjbGFzcyh0eXBlKSlcbi0tXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmM9MTI9dm9pZCBrbWVtbGVha19sb2FkX21vZHVsZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QsXG4tLVxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jLTE1LVx0Lyogb25seSBzY2FuIHdyaXRhYmxlLCBub24tZXhlY3V0YWJsZSBzZWN0aW9ucyAqL1xua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjE2Olx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xNy1cdFx0aWYgKHR5cGUgIT0gTU9EX0RBVEEgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTU9EX0lOSVRfREFUQSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xMTk9c3RhdGljIHZvaWQgbW9kX3VwZGF0ZV9ib3VuZHMoc3RydWN0IG1vZHVsZSAqbW9kKVxua2VybmVsL21vZHVsZS9tYWluLmMtMTIwLXtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjEyMTpcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0xMjItXHRcdHN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtID0gXHUwMDI2bW9kLVx1MDAzZW1lbVt0eXBlXTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xMzk3PXN0YXRpYyB2b2lkIGZyZWVfbW9kX21lbShzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xMzk4LXtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjEzOTk6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS9tYWluLmMtMTQwMC1cdFx0c3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBcdTAwMjZtb2QtXHUwMDNlbWVtW3R5cGVdO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI3ODg9c3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjc5My1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI3OTQ6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS9tYWluLmMtMjc5NS1cdFx0aWYgKCFtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUpIHtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yODkyPXN0YXRpYyB2b2lkIGZsdXNoX21vZHVsZV9pY2FjaGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4OTgtXHQgKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4OTk6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS9tYWluLmMtMjkwMC1cdFx0Y29uc3Qgc3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBcdTAwMjZtb2QtXHUwMDNlbWVtW3R5cGVdO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5NDM9c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NzMtXHQgKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5NzQ6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NzUtXHRcdGZyb2Jfc2l6ZVt0eXBlXSA9IGluZm8tXHUwMDNlbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5OTUtXHRcdHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKGluZm8sIGZsYWdzKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5OTY6XHRcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxua2VybmVsL21vZHVsZS9tYWluLmMtMjk5Ny1cdFx0XHRpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IGZyb2Jfc2l6ZVt0eXBlXTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDk4PXN0YXRpYyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMxMDQtXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMTA1Olx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMxMDYtXHRcdGNvbnN0IHN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtID0gXHUwMDI2bW9kLVx1MDAzZW1lbVt0eXBlXTtcbi0tXG5rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jPTY1PXN0YXRpYyB1bnNpZ25lZCBpbnQgbW9kdWxlX3RvdGFsX3NpemUoc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvcHJvY2ZzLmMtNjgtXG5rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jOjY5Olx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG5rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jLTcwLVx0XHRzaXplICYjNDM7PSBtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemU7XG4tLVxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jPTc4PXZvaWQgbW9kX3RyZWVfaW5zZXJ0KHN0cnVjdCBtb2R1bGUgKm1vZClcbmtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYy03OS17XG5rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmM6ODA6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jLTgxLVx0XHRtb2QtXHUwMDNlbWVtW3R5cGVdLm10bi5tb2QgPSBtb2Q7XG4tLVxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jPTk1PXZvaWQgbW9kX3RyZWVfcmVtb3ZlKHN0cnVjdCBtb2R1bGUgKm1vZClcbmtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYy05Ni17XG5rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmM6OTc6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jLTk4LVx0XHRpZiAobW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTgxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgbW9kdWxlLmhgIGluIHRoZSBMaW51eCBrZXJuZWwgaGVhZGVycy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnb2luZyB0byBsaW5lcyAzNDggdGhyb3VnaCAzNTEsIHdoaWNoIHNob3VsZCBnZXQgbWUgc3RhcnRlZCBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbW9kdWxlIGxvYWQgYW5kIHVubG9hZCByb3V0aW5lcy4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRob3NlIGxpbmVzLCBiZWNhdXNlIEkga25vdyB0aGV5JiMzOTtyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIG1vZHVsZSBsaWZlY3ljbGUgZnJvbSB0aGUgZGV2ZWxvcGVyJiMzOTtzIHBlcnNwZWN0aXZlLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgaW52b2x2ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW9kdWxlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0NTpcdFx0KG1vZF9tZW1fdHlwZV9pc19jb3JlKHR5cGUpIFx1MDAyNlx1MDAyNlx0XFxcbiAzNDY6XHRcdCBtb2RfbWVtX3R5cGVfaXNfZGF0YSh0eXBlKSlcbiAzNDc6XHRcbiAzNDg6XHQjZGVmaW5lIGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVx0XHRcdFxcXG4gMzQ5Olx0XHRmb3IgKGVudW0gbW9kX21lbV90eXBlICh0eXBlKSA9IDA7XHRcdFxcXG4gMzUwOlx0XHQgICAgICh0eXBlKSBcdTAwM2MgTU9EX01FTV9OVU1fVFlQRVM7ICh0eXBlKSYjNDM7JiM0MzspXG4gMzUxOlx0XG4gMzUyOlx0I2RlZmluZSBmb3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGNsYXNzKVx0XHRcXFxuIDM1MzpcdFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXHRcdFx0XFxcbiAzNTQ6XHRcdFx0aWYgKG1vZF9tZW1fdHlwZV9pc18jI2NsYXNzKHR5cGUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA5CgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDg3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHJlZ2FyZGluZyB0aGUgaW5pdGlhbCBjb25jZXJuIGFib3V0IGBmcm9iX3NpemVgLCBpdCYjMzk7cyBjbGVhciBhZnRlciBleGFtaW5pbmcgdGhlIGNvZGUgdGhhdCBpdCYjMzk7cyBhIGxvY2FsLCBzdGFjay1hbGxvY2F0ZWQgYXJyYXkuIFRoZSBsb29wIHVzaW5nIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgICpkb2VzKiBpbml0aWFsaXplIGFsbCBlbGVtZW50cyBvZiBgZnJvYl9zaXplYCBiZWZvcmUgaXQmIzM5O3MgdXNlZC4gVGhlcmVmb3JlLCB0aGUgcmVzdG9yYXRpb24gb2YgYGluZm8tJmd0O21vZC0mZ3Q7bWVtW3R5cGVdLnNpemVgIHVzaW5nIGBmcm9iX3NpemVgIGlzIHBlcmZlY3RseSBzYWZlIOKAkyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhlcmUuIFdlJiMzOTtyZSBnb29kLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGBtbS9hbGxvY190YWcuY2AgcGF0Y2guIFRoZSBwcmltYXJ5IGZvY3VzIGhlcmUgc2VlbXMgdG8gYmUgb24gYHJlbGVhc2VfbW9kdWxlX3RhZ3NgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYG1vZHVsZV90YWdzYCBzdHJ1Y3R1cmUuIFRoZSBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIG1vZHVsZSB0YWdzIHRvIGNsZWFuIHVwIHVudXNlZCBjb3VudGVycywgYW5kIGl0IHJlYWRzIGB0YWctJmd0O2NvdW50ZXJzYCBpbiB0aGUgcHJvY2VzcywgcHJpbnRpbmcgaW5mb3JtYXRpb24gaWYgdGhvc2UgY291bnRlcnMgaGF2ZW4mIzM5O3QgYmVlbiBjbGVhbmVkIHVwLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRvIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgcmV2ZWFscyB0aGF0IGByZWxlYXNlX21vZHVsZV90YWdzYCB3YXMgbW92ZWQgdXAgaW4gdGhlIGZpbGUuIFRoaXMgbW92ZSBtYWtlcyBpdCBlYXNpZXIgdG8gY2FsbCBpdCBmcm9tIGByZXNlcnZlX21vZHVsZV90YWdzYC4gSW4gYHJlc2VydmVfbW9kdWxlX3RhZ3NgLCB0aGUgcGF0Y2ggaW5jbHVkZXMgZXJyb3IgaGFuZGxpbmcuIElmIHRoZSBudW1iZXIgb2YgdGFncyBuZWVkZWQgZXhjZWVkcyB0aGUgYXZhaWxhYmxlIGJpdHMsIHRoZSBjb2RlIG5vdyBjYWxscyBgcmVsZWFzZV9tb2R1bGVfdGFnc2AgKmJlZm9yZSogcmV0dXJuaW5nIGAtRUFHQUlOYC4gVGhpcyBlZmZlY3RpdmVseSByZXRyaWVzIG1vZHVsZSBsb2FkaW5nIHdpdGhvdXQgYWxsb2NhdGlvbiBvZiBwcm9maWxpbmcgdGFncy4KCkNyaXRpY2FsbHksIHRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgYWJvdXQgKmZhaWxpbmcqIGdyYWNlZnVsbHkgd2hlbiByZXNvdXJjZXMgYXJlIGNvbnN0cmFpbmVkLiBUaGlzIHBhdGNoIHByaW1hcmlseSByZXN0b3JlcyBtb2R1bGUgc2l6ZXMgYW5kIHJldHJpZXMgd2l0aG91dCBhbGxvY2F0aW5nIHRhZ3MsIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBnaXZlbiB0aGUgbG9naWMuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgbW9kdWxlIGxvYWRpbmcgcmV0cnkgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBleGNlZWQgbGltaXRzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVzZXItc3BhY2UgY29waWVzIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBJIGNvbmNsdWRlIHRoYXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgZXhjZWVkIHRoZSBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIEl0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgYnkgcmV0dXJuaW5nIGAtRUFHQUlOYCBmcm9tIGBtb3ZlX21vZHVsZSgpYCAodmlhIGByZXNlcnZlX21vZHVsZV90YWdzKClgKS4gVGhlIHN0YXRlIGlzIHNhdmVkIGluIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGZyb2Jfc2l6ZWAgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIG1hY3JvIChpdGVyYXRpbmcgb3ZlciBhbGwgdmFsaWQgbW9kdWxlIG1lbW9yeSB0eXBlcykuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIGByZWxlYXNlX21vZHVsZV90YWdzKClgIGVhcmxpZXIgaW4gdGhlIGZpbGUgdG8gYmUgY2FsbGVkIGR1cmluZyB0aGUgZXJyb3IgcGF0aC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgZXhjZWVkIHRoZSBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIEl0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgYnkgcmV0dXJuaW5nIGAtRUFHQUlOYCBmcm9tIGBtb3ZlX21vZHVsZSgpYCAodmlhIGByZXNlcnZlX21vZHVsZV90YWdzKClgKS4gVGhlIHN0YXRlIGlzIHNhdmVkIGluIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGZyb2Jfc2l6ZWAgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIG1hY3JvIChpdGVyYXRpbmcgb3ZlciBhbGwgdmFsaWQgbW9kdWxlIG1lbW9yeSB0eXBlcykuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIGByZWxlYXNlX21vZHVsZV90YWdzKClgIGVhcmxpZXIgaW4gdGhlIGZpbGUgdG8gYmUgY2FsbGVkIGR1cmluZyB0aGUgZXJyb3IgcGF0aC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjA5OjU3LjQ3NzgyOTg2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjU1MTgwMjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX2luaXRfbW9kdWxlXCIsXG4gICAgXCJzeXNfZmluaXRfbW9kdWxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgZXhjZWVkIHRoZSBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIEl0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgYnkgcmV0dXJuaW5nIGAtRUFHQUlOYCBmcm9tIGBtb3ZlX21vZHVsZSgpYCAodmlhIGByZXNlcnZlX21vZHVsZV90YWdzKClgKS4gVGhlIHN0YXRlIGlzIHNhdmVkIGluIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGZyb2Jfc2l6ZWAgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIG1hY3JvIChpdGVyYXRpbmcgb3ZlciBhbGwgdmFsaWQgbW9kdWxlIG1lbW9yeSB0eXBlcykuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIGByZWxlYXNlX21vZHVsZV90YWdzKClgIGVhcmxpZXIgaW4gdGhlIGZpbGUgdG8gYmUgY2FsbGVkIGR1cmluZyB0aGUgZXJyb3IgcGF0aC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vZHVsZSBsb2FkaW5nIGxvZ2ljIHRvIGhhbmRsZSBhIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgY2Fubm90IGZpdCBpbiBwYWdlIGZsYWcgYml0cy4gSXQgYWRkcyBhIHJldHJ5IGxvb3AgaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgIHdoZW4gYG1vdmVfbW9kdWxlYCByZXR1cm5zIGAtRUFHQUlOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1vZHVsZSBsb2FkZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIHN5c2NhbGxzIHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjowOTo1Ny40Nzc4MzQ0NzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTc3NDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlmMjA0ODQ3OWM1YzVhZTE4NGNmNGIxOGMzMjhjODhmMDI3NDhmNWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDY6MDk6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9tYWluLmMgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xcbmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLmVkMjZmMTY3YmU4NGQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcXG4rKysgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xcbkBAIC0yOTQ0LDYgKzI5NDQsNyBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IG1vZHVsZSAqbW9kO1xcbiBcXHRpbnQgZXJyO1xcbitcXHR1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107XFxuIFxcbiBcXHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXFxuIFxcdGVyciA9IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLFxcbkBAIC0yOTY2LDE4ICsyOTY3LDM4IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcXG4gXFx0ICovXFxuIFxcdG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLCBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNhdmUgdGhlIHNpemVzIHJlc2VydmVkIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoKSBzbyB0aGV5IGNhblxcbitcXHQgKiBiZSByZXN0b3JlZCBpZiB3ZSByZXRyeSBiZWxvdy5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxcbitcXHRcXHRmcm9iX3NpemVbdHlwZV0gPSBpbmZvLVxcdTAwM2Vtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcXG4gXFx0ICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnlcXG4gXFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXFxuIFxcdCAqL1xcbityZXRyeTpcXG4gXFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuIFxcdGxheW91dF9zeW10YWIoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xcbiBcXHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVxcdTAwM2Vtb2QsIGluZm8pO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChlcnIgIT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogLUVBR0FJTiBtZWFucyBwcm9maWxpbmcgd2FzIGRpc2FibGVkIGJ1dCB0aGUgbW9kdWxlXFxuK1xcdFxcdCAqIGNhbiBzdGlsbCBsb2FkIHdpdGhvdXQgaXQuIFJlc2V0IHN0YXRlIGFuZCByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKGluZm8sIGZsYWdzKTtcXG4rXFx0XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXFxuK1xcdFxcdFxcdGluZm8tXFx1MDAzZW1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemUgPSBmcm9iX3NpemVbdHlwZV07XFxuK1xcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXguc3ltXS5zaF9mbGFncyBcXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4LnN0cl0uc2hfZmxhZ3MgXFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovXFxuIFxcdG1vZCA9ICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XFxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcXG5pbmRleCBiMzM0MTAzMTA0Nzc5Li4xMTJhMDE0ZDRiODkwIDEwMDY0NFxcbi0tLSBhL21tL2FsbG9jX3RhZy5jXFxuKysrIGIvbW0vYWxsb2NfdGFnLmNcXG5AQCAtODM1LDYgKzgzNSw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxcbit7XFxuK1xcdE1BX1NUQVRFKG1hcywgXFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcXG4rXFx0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xcbitcXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xcbitcXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XFxuK1xcbitcXHRtYXNfbG9jayhcXHUwMDI2bWFzKTtcXG4rXFx0bWFzX2Zvcl9lYWNoX3JldihcXHUwMDI2bWFzLCB2YWwsIDApXFxuK1xcdFxcdGlmICh2YWwgPT0gbW9kKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdGlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKCF1c2VkKVxcbitcXHRcXHRnb3RvIHJlbGVhc2VfYXJlYTtcXG4rXFxuK1xcdHN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMuaW5kZXgpO1xcbitcXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcXG4rXFx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xcbitcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XFxuK1xcbitcXHRcXHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFxcdTAwM2M9IGVuZF90YWc7IHRhZysrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcXG4rXFxuK1xcdFxcdFxcdGlmICghdGFnLVxcdTAwM2Vjb3VudGVycylcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcXG4rXFx0XFx0XFx0cHJfaW5mbyhcXFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHRhZy1cXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cXHUwMDNlY3QubGluZW5vLCB0YWctXFx1MDAzZWN0Lm1vZG5hbWUsXFxuK1xcdFxcdFxcdFxcdHRhZy1cXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHVzZWQgPSBmYWxzZTtcXG4rXFx0fVxcbityZWxlYXNlX2FyZWE6XFxuK1xcdG1hc19zdG9yZShcXHUwMDI2bWFzLCB1c2VkID8gXFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xcbitcXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcXHUwMDI2bWFzLCAwKTtcXG4rXFx0aWYgKHZhbCA9PSBcXHUwMDI2cHJlcGVuZF9tb2QpXFxuK1xcdFxcdG1hc19zdG9yZShcXHUwMDI2bWFzLCBOVUxMKTtcXG4rb3V0OlxcbitcXHRtYXNfdW5sb2NrKFxcdTAwMjZtYXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKVxcbiB7XFxuQEAgLTkwNCwxMCArOTUwLDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbiBcXHRcXHRpbnQgZ3Jvd19yZXM7XFxuIFxcbiBcXHRcXHRtb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICsgc2l6ZTtcXG4tXFx0XFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcXG4rXFx0XFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcXG4gXFx0XFx0XFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRtb2QtXFx1MDAzZW5hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTtcXG4rXFx0XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgbW9kLVxcdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XFxuK1xcdFxcdFxcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XFxuQEAgLTkyMiw1MiArOTcwLDYgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuIFxcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgb2Zmc2V0KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcXG4te1xcbi1cXHRNQV9TVEFURShtYXMsIFxcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XFxuLVxcdHN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZztcXG4tXFx0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcXG4tXFx0c3RydWN0IG1vZHVsZSAqdmFsO1xcbi1cXG4tXFx0bWFzX2xvY2soXFx1MDAyNm1hcyk7XFxuLVxcdG1hc19mb3JfZWFjaF9yZXYoXFx1MDAyNm1hcywgdmFsLCAwKVxcbi1cXHRcXHRpZiAodmFsID09IG1vZClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqL1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGlmICghdXNlZClcXG4tXFx0XFx0Z290byByZWxlYXNlX2FyZWE7XFxuLVxcbi1cXHRzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmluZGV4KTtcXG4tXFx0ZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMubGFzdCk7XFxuLVxcdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcXG4tXFx0XFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xcbi1cXG4tXFx0XFx0Zm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyBcXHUwMDNjPSBlbmRfdGFnOyB0YWcrKykge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XFxuLVxcbi1cXHRcXHRcXHRpZiAoIXRhZy1cXHUwMDNlY291bnRlcnMpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0Y291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7XFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIiVzOiV1IG1vZHVsZSAlcyBmdW5jOiVzIGhhcyAlbGx1IGFsbG9jYXRlZCBhdCBtb2R1bGUgdW5sb2FkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHR0YWctXFx1MDAzZWN0LmZpbGVuYW1lLCB0YWctXFx1MDAzZWN0LmxpbmVubywgdGFnLVxcdTAwM2VjdC5tb2RuYW1lLFxcbi1cXHRcXHRcXHRcXHR0YWctXFx1MDAzZWN0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHR1c2VkID0gZmFsc2U7XFxuLVxcdH1cXG4tcmVsZWFzZV9hcmVhOlxcbi1cXHRtYXNfc3RvcmUoXFx1MDAyNm1hcywgdXNlZCA/IFxcdTAwMjZ1bmxvYWRlZF9tb2QgOiBOVUxMKTtcXG4tXFx0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXFx1MDAyNm1hcywgMCk7XFxuLVxcdGlmICh2YWwgPT0gXFx1MDAyNnByZXBlbmRfbW9kKVxcbi1cXHRcXHRtYXNfc3RvcmUoXFx1MDAyNm1hcywgTlVMTCk7XFxuLW91dDpcXG4tXFx0bWFzX3VubG9jayhcXHUwMDI2bWFzKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApXFxuIHtcXG4gXFx0LyogQWxsb2NhdGUgbW9kdWxlIGFsbG9jX3RhZyBwZXJjcHUgY291bnRlcnMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDk6NTcuOTk4NjU1MDYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTM3NjQzNDMyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19pbml0X21vZHVsZVwiLFxuICAgIFwic3lzX2Zpbml0X21vZHVsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb2R1bGUgbG9hZGluZyBsb2dpYyB0byBoYW5kbGUgYSBjYXNlIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGNhbm5vdCBmaXQgaW4gcGFnZSBmbGFnIGJpdHMuIEl0IGFkZHMgYSByZXRyeSBsb29wIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCB3aGVuIGBtb3ZlX21vZHVsZWAgcmV0dXJucyBgLUVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtb2R1bGUgbG9hZGVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXNjYWxscyB3aGVuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWYyMDQ4NDc5YzVjNWFlMTg0Y2Y0YjE4YzMyOGM4OGYwMjc0OGY1ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA2OjA5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9tYWluLmMgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xuaW5kZXggNDZkZDhkMjVhNjA1OC4uZWQyNmYxNjdiZTg0ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG4rKysgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xuQEAgLTI5NDQsNiArMjk0NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XG4gXHRpbnQgZXJyO1xuK1x0dW5zaWduZWQgbG9uZyBmcm9iX3NpemVbTU9EX01FTV9OVU1fVFlQRVNdO1xuIFxuIFx0LyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqL1xuIFx0ZXJyID0gbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLFxuQEAgLTI5NjYsMTggKzI5NjcsMzggQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyk7XG4gXG4rXHQvKlxuK1x0ICogU2F2ZSB0aGUgc2l6ZXMgcmVzZXJ2ZWQgYnkgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucygpIHNvIHRoZXkgY2FuXG4rXHQgKiBiZSByZXN0b3JlZCBpZiB3ZSByZXRyeSBiZWxvdy5cbitcdCAqL1xuK1x0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG4rXHRcdGZyb2Jfc2l6ZVt0eXBlXSA9IGluZm8tXHUwMDNlbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplO1xuK1xuIFx0LypcbiBcdCAqIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93XG4gXHQgKiB0aGlzIGlzIGRvbmUgZ2VuZXJpY2FsbHk7IHRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGFueVxuIFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXG4gXHQgKi9cbityZXRyeTpcbiBcdGxheW91dF9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4gXHRsYXlvdXRfc3ltdGFiKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcbiBcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xuIFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdGlmIChlcnIpIHtcbitcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4rXHRcdC8qXG4rXHRcdCAqIC1FQUdBSU4gbWVhbnMgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCBidXQgdGhlIG1vZHVsZVxuK1x0XHQgKiBjYW4gc3RpbGwgbG9hZCB3aXRob3V0IGl0LiBSZXNldCBzdGF0ZSBhbmQgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRyZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvLCBmbGFncyk7XG4rXHRcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxuK1x0XHRcdGluZm8tXHUwMDNlbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplID0gZnJvYl9zaXplW3R5cGVdO1xuK1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5zeW1dLnNoX2ZsYWdzIFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcbitcdFx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXguc3RyXS5zaF9mbGFncyBcdTAwMjY9IH4odW5zaWduZWQgbG9uZylTSEZfQUxMT0M7XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4gXG4gXHQvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi9cbiBcdG1vZCA9ICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgubW9kXS5zaF9hZGRyO1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGIzMzQxMDMxMDQ3NzkuLjExMmEwMTRkNGI4OTAgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuKysrIGIvbW0vYWxsb2NfdGFnLmNcbkBAIC04MzUsNiArODM1LDUyIEBAIHN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxuK3tcbitcdE1BX1NUQVRFKG1hcywgXHUwMDI2bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpO1xuK1x0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xuK1x0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcbitcdHN0cnVjdCBtb2R1bGUgKnZhbDtcbitcbitcdG1hc19sb2NrKFx1MDAyNm1hcyk7XG4rXHRtYXNfZm9yX2VhY2hfcmV2KFx1MDAyNm1hcywgdmFsLCAwKVxuK1x0XHRpZiAodmFsID09IG1vZClcbitcdFx0XHRicmVhaztcbitcbitcdGlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCF1c2VkKVxuK1x0XHRnb3RvIHJlbGVhc2VfYXJlYTtcbitcbitcdHN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMuaW5kZXgpO1xuK1x0ZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMubGFzdCk7XG4rXHRpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7XG4rXHRcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcbitcbitcdFx0Zm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyBcdTAwM2M9IGVuZF90YWc7IHRhZysrKSB7XG4rXHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xuK1xuK1x0XHRcdGlmICghdGFnLVx1MDAzZWNvdW50ZXJzKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0Y291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7XG4rXHRcdFx0cHJfaW5mbyhcIiVzOiV1IG1vZHVsZSAlcyBmdW5jOiVzIGhhcyAlbGx1IGFsbG9jYXRlZCBhdCBtb2R1bGUgdW5sb2FkXFxuXCIsXG4rXHRcdFx0XHR0YWctXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cdTAwM2VjdC5saW5lbm8sIHRhZy1cdTAwM2VjdC5tb2RuYW1lLFxuK1x0XHRcdFx0dGFnLVx1MDAzZWN0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0dXNlZCA9IGZhbHNlO1xuK1x0fVxuK3JlbGVhc2VfYXJlYTpcbitcdG1hc19zdG9yZShcdTAwMjZtYXMsIHVzZWQgPyBcdTAwMjZ1bmxvYWRlZF9tb2QgOiBOVUxMKTtcbitcdHZhbCA9IG1hc19wcmV2X3JhbmdlKFx1MDAyNm1hcywgMCk7XG4rXHRpZiAodmFsID09IFx1MDAyNnByZXBlbmRfbW9kKVxuK1x0XHRtYXNfc3RvcmUoXHUwMDI2bWFzLCBOVUxMKTtcbitvdXQ6XG4rXHRtYXNfdW5sb2NrKFx1MDAyNm1hcyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKVxuIHtcbkBAIC05MDQsMTAgKzk1MCwxMiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdFx0aW50IGdyb3dfcmVzO1xuIFxuIFx0XHRtb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICsgc2l6ZTtcbi1cdFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhdGFnc19hZGRyZXNzYWJsZSgpKSB7XG4rXHRcdGlmICghdGFnc19hZGRyZXNzYWJsZSgpKSB7XG4gXHRcdFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcbi1cdFx0XHRwcl93YXJuKFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCIsXG4tXHRcdFx0XHRtb2QtXHUwMDNlbmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpO1xuK1x0XHRcdHByX3dhcm5fb25jZShcIldpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcblwiLFxuK1x0XHRcdFx0ICAgICBtb2QtXHUwMDNlbmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpO1xuK1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XG4gXHRcdH1cbiBcbiBcdFx0Z3Jvd19yZXMgPSB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSgpO1xuQEAgLTkyMiw1MiArOTcwLDYgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRyZXR1cm4gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG9mZnNldCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4te1xuLVx0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4tXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4tXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuLVx0c3RydWN0IG1vZHVsZSAqdmFsO1xuLVxuLVx0bWFzX2xvY2soXHUwMDI2bWFzKTtcbi1cdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4tXHRcdGlmICh2YWwgPT0gbW9kKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRpZiAoIXVzZWQpXG4tXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuLVxuLVx0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XG4tXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcbi1cdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbi1cdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuLVxuLVx0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcbi1cdFx0XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XG4tXG4tXHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbi1cdFx0XHRwcl9pbmZvKFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cIixcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4tXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuLVx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHR1c2VkID0gZmFsc2U7XG4tXHR9XG4tcmVsZWFzZV9hcmVhOlxuLVx0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuLVx0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbi1cdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4tXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuLW91dDpcbi1cdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbi19XG4tXG4gc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApXG4ge1xuIFx0LyogQWxsb2NhdGUgbW9kdWxlIGFsbG9jX3RhZyBwZXJjcHUgY291bnRlcnMgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjA5OjU3Ljk5ODY1NzQ5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzkwNjAzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1vZHVsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIGFuIGAtRUFHQUlOYCBlcnJvciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbW9kdWxlIGxvYWRpbmcgaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGVzIGJlaW5nIHRvdWNoZWQgYXJlIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGBtbS9hbGxvY190YWcuY2AuIFRoZSBjb3JlIGlzc3VlIGFwcGVhcnMgdG8gYmUgd2hlbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgcmV0dXJucyBgLUVBR0FJTmAg4oCTIGFuZCB0aGF0IGhhcHBlbnMgaWYgd2UncmUgdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgZGlzYWJsZWQsIGJ1dCB3ZSd2ZSBzb21laG93IGhpdCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGFnIGJpdHMgYXZhaWxhYmxlIGluIHBhZ2UgZmxhZ3MuXG5cbk5vdywgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCwgdGhleSd2ZSBtb2RpZmllZCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgdG8gcmV0cnkgdGhlIG1vZHVsZSBsb2FkIGlmIGBtb3ZlX21vZHVsZWAgZmFpbHMgd2l0aCBgLUVBR0FJTmAuIEhhbmcgb24gYSBzZWNvbmQuLi4gYG1vdmVfbW9kdWxlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgYWxsb2NfbW9kdWxlX3RhZ3NgLCBpc24ndCBpdD8gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGNvbm5lY3Rpb24gaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYnkgZ3JlcHBpbmcgYXJvdW5kIGZvciB0aG9zZSBmdW5jdGlvbiBuYW1lcy4gSSB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aCBjb3JyZWN0bHkgYW5kIHRoYXQgYG1vdmVfbW9kdWxlYCBpcyBhY3R1YWxseSB0aGUgYm90dGxlbmVjayBoZXJlLiBOZWVkIHRvIHZlcmlmeSB0aGF0IHJlbGF0aW9uc2hpcCBleHBsaWNpdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MDIuNzM3NzIwODY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTQ2ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfbW9kdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9tb2R1bGUvbWFpbi5jPTIzNjQ9c3RhdGljIGludCBlbGZfdmFsaWRpdHlfY2FjaGVfc3RydGFiKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yNDE1LSAqIEFzIGEgbGFzdCBzdGVwIHdlIHNldCBpbmZvLVxcdTAwM2Vtb2QgdG8gdGhlIHRlbXBvcmFyeSBjb3B5IG9mIHRoZSBtb2R1bGUgaW5cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNDE2OiAqIGluZm8tXFx1MDAzZWhkci4gVGhlIGZpbmFsIG9uZSB3aWxsIGJlIGFsbG9jYXRlZCBpbiBtb3ZlX21vZHVsZSgpLiBBbnlcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yNDE3LSAqIG1vZGlmaWNhdGlvbnMgd2UgbWFrZSB0byBvdXIgY29weSBvZiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FycmllZCBvdmVyXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNjU5PXN0YXRpYyBpbnQgZmluZF9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjc4Ny1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNzg4OnN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI3ODkte1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTg2LVxcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5ODc6XFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTg4LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MDIuNzk2ODc2MjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAxNzc4NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJ21vdmVfbW9kdWxlJyoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBgbW92ZV9tb2R1bGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gZG8uIElzIGl0IHJlc3BvbnNpYmxlIGZvciByZWxvY2F0aW5nIGEgbW9kdWxlIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0sIHBlcmhhcHMgcmVvcmdhbml6aW5nIGRlcGVuZGVuY2llcywgb3IgaXMgaXQgbW9yZSByZWxhdGVkIHRvIGRhdGEgdHJhbnNmZXIgb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb24/IE15IGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGlucHV0cywgb3V0cHV0cywgYW55IGludGVybmFsIGNhbGxzIGl0IG1ha2VzIHRvIG90aGVyIGZ1bmN0aW9ucywgYW5kIGl0cyBvdmVyYWxsIGxvZ2ljLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYnkgZXhhbWluaW5nIHRoZXNlIGVsZW1lbnRzLCBJIGNhbiBxdWlja2x5IGRldmVsb3AgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IGBtb3ZlX21vZHVsZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgJ3doeScgYmVoaW5kIGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgJ2hvdycuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDowNS44OTg2ODc4MTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5NzY0ODIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX21vZHVsZV90YWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDowNS45Njk2NzE3MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA1NjM3MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIEtlcm5lbCBNb2R1bGUgVGFnZ2luZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsJ3MgbW9kdWxlIHRhZ2dpbmcgc3lzdGVtIHdvcmtzLiBXaGVyZSB3b3VsZCBJIHN0YXJ0PyBXZWxsLCBga2VybmVsL21vZHVsZS9tYWluLmNgIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgdGhlIGNvcmUgbW9kdWxlIGhhbmRsaW5nIGxvZ2ljLiBNeSBndXQgc2F5cyB0aGF0IHNvbWV0aGluZyBsaWtlIGBhbGxvY190YWdgIG9yIHBlcmhhcHMgYSBmdW5jdGlvbiBuYW1lZCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGByZXNlcnZlX21vZHVsZV90YWdzYCB3b3VsZCBiZSBpbnZvbHZlZCBpbiwgeW91IGtub3csIGFjdHVhbGx5ICpkb2luZyogdGhlIHRhZ2dpbmcgb3IgbWFuYWdpbmcgdGhvc2UgcmVzZXJ2ZWQgaWRlbnRpZmllcnMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhhdCBmaWxlIGFuZCBzdGFydCB0cmFjaW5nIGZyb20gdGhlcmUuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDowOS40NzUzMTE5NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MDE5NDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlc2VydmVfbW9kdWxlX3RhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL21vZHVsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjA5LjU3MDgyMTkzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTA5NDk0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZGlnIGludG8gaG93IG1vZHVsZSBhbGxvY2F0aW9uIHRhZ3MgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBmaWxlLCBzaW5jZSB0aGF0J3MgZ2VuZXJhbGx5IHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIG1vZHVsZSBsb2FkaW5nIGFuZCBpbml0aWFsaXphdGlvbiBsb2dpYyByZXNpZGVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzZWFyY2ggZm9yIHRoZSB0ZXJtIGBhbGxvY190YWdgIHdpdGhpbiB0aGF0IGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRhZ3MgYXJlIGRlZmluZWQsIHVzZWQsIGFuZCBtYW5hZ2VkIGR1cmluZyBtb2R1bGUgbGlmZWN5Y2xlIGV2ZW50cy4gSSBleHBlY3QgdGhpcyBzZWFyY2ggd2lsbCBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGFsbG9jYXRpb24gdGFnZ2luZy4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBtb2R1bGUgbWFuYWdlbWVudCBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDoxMi42NjE3NzM3ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTIxMDQwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY190YWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL21vZHVsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjEyLjc1MTcwMzg5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg1MzAwODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipEZWNvbnN0cnVjdGluZyB0aGUgTW9kdWxlIFJlbG9jYXRpb24gUHJvY2VzcyoqXG5cbkhvbGQgb24gYSBzZWNvbmQuIEkgdGhvdWdodCBgbW92ZV9tb2R1bGVgIHdhcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgLiBCdXQgbG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQgbG9va3MgbGlrZSBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgaXMgYWN0dWFsbHkgdGhlIG9uZSB0aGF0IGRvZXMgdGhhdCBwYXJ0aWN1bGFyIGpvYi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhpcyBzdHJhaWdodC4gTGV0J3MgZ28gYmFjayBhbmQgY2hlY2suIEkgdGhpbmsgSSdsbCBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AsIHNwZWNpZmljYWxseSBpbiB0aGUgYG1vdmVfbW9kdWxlYCBmdW5jdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBtb2R1bGUgcmVsb2NhdGlvbiBwcm9jZXNzIGJ5IGdvaW5nIG92ZXIgdGhlIGNvZGUuIFRpbWUgdG8gZGl2ZSBpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzYxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MTYuMzM3MDA3NzY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbW9kdWxlL21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzg4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc4ODpcXHRzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4yNzg5OlxcdHtcXG4yNzkwOlxcdFxcdGludCBpLCByZXQ7XFxuMjc5MTpcXHRcXHRlbnVtIG1vZF9tZW1fdHlwZSB0ID0gTU9EX01FTV9OVU1fVFlQRVM7XFxuMjc5MjpcXHRcXHRib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlO1xcbjI3OTM6XFx0XFxuMjc5NDpcXHRcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xcbjI3OTU6XFx0XFx0XFx0aWYgKCFtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplKSB7XFxuMjc5NjpcXHRcXHRcXHRcXHRtb2QtXFx1MDAzZW1lbVt0eXBlXS5iYXNlID0gTlVMTDtcXG4yNzk3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3OTg6XFx0XFx0XFx0fVxcbjI3OTk6XFx0XFxuMjgwMDpcXHRcXHRcXHRyZXQgPSBtb2R1bGVfbWVtb3J5X2FsbG9jKG1vZCwgdHlwZSk7XFxuMjgwMTpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMjgwMjpcXHRcXHRcXHRcXHR0ID0gdHlwZTtcXG4yODAzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4yODA0OlxcdFxcdFxcdH1cXG4yODA1OlxcdFxcdH1cXG4yODA2OlxcdFxcbjI4MDc6XFx0XFx0LyogVHJhbnNmZXIgZWFjaCBzZWN0aW9uIHdoaWNoIHNwZWNpZmllcyBTSEZfQUxMT0MgKi9cXG4yODA4OlxcdFxcdHByX2RlYnVnKFxcXCJGaW5hbCBzZWN0aW9uIGFkZHJlc3NlcyBmb3IgJXM6XFxcXG5cXFwiLCBtb2QtXFx1MDAzZW5hbWUpO1xcbjI4MDk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluZm8tXFx1MDAzZWhkci1cXHUwMDNlZV9zaG51bTsgaSsrKSB7XFxuMjgxMDpcXHRcXHRcXHR2b2lkICpkZXN0O1xcbjI4MTE6XFx0XFx0XFx0RWxmX1NoZHIgKnNoZHIgPSBcXHUwMDI2aW5mby1cXHUwMDNlc2VjaGRyc1tpXTtcXG4yODEyOlxcdFxcdFxcdGNvbnN0IGNoYXIgKnNuYW1lO1xcbjI4MTM6XFx0XFxuMjgxNDpcXHRcXHRcXHRpZiAoIShzaGRyLVxcdTAwM2VzaF9mbGFncyBcXHUwMDI2IFNIRl9BTExPQykpXFxuMjgxNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODE2OlxcdFxcbjI4MTc6XFx0XFx0XFx0c25hbWUgPSBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzICsgc2hkci1cXHUwMDNlc2hfbmFtZTtcXG4yODE4OlxcdFxcdFxcdC8qXFxuMjgxOTpcXHRcXHRcXHQgKiBMb2FkIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseSBhcyB0aGV5IG1pZ2h0IHN0aWxsIGJlIHVzZWRcXG4yODIwOlxcdFxcdFxcdCAqIGFmdGVyIG1vZHVsZSB1bmxvYWQuXFxuMjgyMTpcXHRcXHRcXHQgKi9cXG4yODIyOlxcdFxcdFxcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXFx1MDAzZXNoX3NpemUpKSB7XFxuMjgyMzpcXHRcXHRcXHRcXHRkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplLFxcbjI4MjQ6XFx0XFx0XFx0XFx0XFx0XFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXFx1MDAzZXNoX2FkZHJhbGlnbik7XFxuMjgyNTpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTighZGVzdCkpIHtcXG4yODI2OlxcdFxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMjgyNzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMjgyODpcXHRcXHRcXHRcXHR9XFxuMjgyOTpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGRlc3QpKSB7XFxuMjgzMDpcXHRcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGRlc3QpO1xcbjI4MzE6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjI4MzI6XFx0XFx0XFx0XFx0fVxcbjI4MzM6XFx0XFx0XFx0XFx0Y29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gdHJ1ZTtcXG4yODM0OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjgzNTpcXHRcXHRcXHRcXHRlbnVtIG1vZF9tZW1fdHlwZSB0eXBlID0gc2hkci1cXHUwMDNlc2hfZW50c2l6ZSBcXHUwMDNlXFx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XFxuMjgzNjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHNoZHItXFx1MDAzZXNoX2VudHNpemUgXFx1MDAyNiBTSF9FTlRTSVpFX09GRlNFVF9NQVNLO1xcbjI4Mzc6XFx0XFxuMjgzODpcXHRcXHRcXHRcXHRkZXN0ID0gbW9kLVxcdTAwM2VtZW1bdHlwZV0uYmFzZSArIG9mZnNldDtcXG4yODM5OlxcdFxcdFxcdH1cXG4yODQwOlxcdFxcbjI4NDE6XFx0XFx0XFx0aWYgKHNoZHItXFx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xcbjI4NDI6XFx0XFx0XFx0XFx0LypcXG4yODQzOlxcdFxcdFxcdFxcdCAqIE91ciBFTEYgY2hlY2tlciBhbHJlYWR5IHZhbGlkYXRlZCB0aGlzLCBidXQgbGV0J3NcXG4yODQ0OlxcdFxcdFxcdFxcdCAqIGJlIHBlZGFudGljIGFuZCBtYWtlIHRoZSBnb2FsIGNsZWFyZXIuIFdlIGFjdHVhbGx5XFxuMjg0NTpcXHRcXHRcXHRcXHQgKiBlbmQgdXAgY29weWluZyBvdmVyIGFsbCBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlXFxuMjg0NjpcXHRcXHRcXHRcXHQgKiB1c2Vyc3BhY2UgY29weSBvZiB0aGUgZW50aXJlIHN0cnVjdCBtb2R1bGUuXFxuMjg0NzpcXHRcXHRcXHRcXHQgKi9cXG4yODQ4OlxcdFxcdFxcdFxcdGlmIChpID09IGluZm8tXFx1MDAzZWluZGV4Lm1vZCBcXHUwMDI2XFx1MDAyNlxcbjI4NDk6XFx0XFx0XFx0XFx0ICAgKFdBUk5fT05fT05DRShzaGRyLVxcdTAwM2VzaF9zaXplICE9IHNpemVvZihzdHJ1Y3QgbW9kdWxlKSkpKSB7XFxuMjg1MDpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtRU5PRVhFQztcXG4yODUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4yODUyOlxcdFxcdFxcdFxcdH1cXG4yODUzOlxcdFxcdFxcdFxcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXFx1MDAzZXNoX2FkZHIsIHNoZHItXFx1MDAzZXNoX3NpemUpO1xcbjI4NTQ6XFx0XFx0XFx0fVxcbjI4NTU6XFx0XFx0XFx0LypcXG4yODU2OlxcdFxcdFxcdCAqIFVwZGF0ZSB0aGUgdXNlcnNwYWNlIGNvcHkncyBFTEYgc2VjdGlvbiBhZGRyZXNzIHRvIHBvaW50IHRvXFxuMjg1NzpcXHRcXHRcXHQgKiBvdXIgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcyBhIHB1cmUgY29udmVuaWVuY2Ugc28gdGhhdFxcbjI4NTg6XFx0XFx0XFx0ICogdXNlcnMgb2YgaW5mbyBjYW4ga2VlcCB0YWtpbmcgYWR2YW50YWdlIGFuZCB1c2luZyB0aGUgbmV3bHlcXG4yODU5OlxcdFxcdFxcdCAqIG1pbnRlZCBvZmZpY2lhbCBtZW1vcnkgYXJlYS5cXG4yODYwOlxcdFxcdFxcdCAqL1xcbjI4NjE6XFx0XFx0XFx0c2hkci1cXHUwMDNlc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7XFxuMjg2MjpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiXFxcXHQweCVseCAweCUuOGx4ICVzXFxcXG5cXFwiLCAobG9uZylzaGRyLVxcdTAwM2VzaF9hZGRyLFxcbjI4NjM6XFx0XFx0XFx0XFx0IChsb25nKXNoZHItXFx1MDAzZXNoX3NpemUsIGluZm8tXFx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVxcdTAwM2VzaF9uYW1lKTtcXG4yODY0OlxcdFxcdH1cXG4yODY1OlxcdFxcbjI4NjY6XFx0XFx0cmV0dXJuIDA7XFxuMjg2NzpcXHRvdXRfZXJyOlxcbjI4Njg6XFx0XFx0bW9kdWxlX21lbW9yeV9yZXN0b3JlX3JveChtb2QpO1xcbjI4Njk6XFx0XFx0d2hpbGUgKHQtLSlcXG4yODcwOlxcdFxcdFxcdG1vZHVsZV9tZW1vcnlfZnJlZShtb2QsIHQpO1xcbjI4NzE6XFx0XFx0aWYgKGNvZGV0YWdfc2VjdGlvbl9mb3VuZClcXG4yODcyOlxcdFxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcXG4yODczOlxcdFxcbjI4NzQ6XFx0XFx0cmV0dXJuIHJldDtcXG4yODc1OlxcdH1cXG4yODc2OlxcdFxcbjI4Nzc6XFx0c3RhdGljIGludCBjaGVja19leHBvcnRfc3ltYm9sX3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4yODc4OlxcdHtcXG4yODc5OlxcdFxcdGlmIChtb2QtXFx1MDAzZW51bV9zeW1zIFxcdTAwMjZcXHUwMDI2ICFtb2QtXFx1MDAzZWZsYWdzdGFiKSB7XFxuMjg4MDpcXHRcXHRcXHRwcl9lcnIoXFxcIiVzOiBubyBmbGFncyBmb3IgZXhwb3J0ZWQgc3ltYm9sc1xcXFxuXFxcIiwgbW9kLVxcdTAwM2VuYW1lKTtcXG4yODgxOlxcdFxcdFxcdHJldHVybiAtRU5PRVhFQztcXG4yODgyOlxcdFxcdH1cXG4yODgzOlxcdCNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlNcXG4yODg0OlxcdFxcdGlmIChtb2QtXFx1MDAzZW51bV9zeW1zIFxcdTAwMjZcXHUwMDI2ICFtb2QtXFx1MDAzZWNyY3MpIHtcXG4yODg1OlxcdFxcdFxcdHJldHVybiB0cnlfdG9fZm9yY2VfbG9hZChtb2QsXFxuMjg4NjpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcIm5vIHZlcnNpb25zIGZvciBleHBvcnRlZCBzeW1ib2xzXFxcIik7XFxuMjg4NzpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjE2LjMzNzI5ODQwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc2MTI2MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gKipcblxuUmlnaHQsIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYCBoYXMgYmVlbiBpbnZva2VkLiBMZXQncyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcy4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgbWFuYWdlcyB0aGUgYWxsb2NhdGlvbiBvZiBhIHNwZWNpZmljIHNlY3Rpb24gd2l0aGluIGEgY29kZSB0YWcgc3RydWN0dXJlLCByaWdodD8gUHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0J3MgaGFuZGxpbmcgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiwgb3IgaXMgcGFydCBvZiBhIGxhcmdlciBhbGxvY2F0aW9uIHNjaGVtZSBmb3IgdGhlIHNlY3Rpb25zIHRoZW1zZWx2ZXMuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBwYXJhbWV0ZXJzIGl0IHJlY2VpdmVzLCBhbmQgdGhlbiB0cmFjZSBpdHMgZXhlY3V0aW9uIHBhdGguIEknbSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcmltaXRpdmVzLCBhbmQgbWF5YmUgc29tZSBraW5kIG9mIHNlY3Rpb24gbWV0YWRhdGEgbWFuYWdlbWVudC4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBkZWNlbnQgZW5vdWdoIHRvIHByb3ZpZGUgc29tZSB1c2VmdWwgaGludHMuIEl0IGNvdWxkIGJlIHNvbWV0aGluZyBhcyBzaW1wbGUgYXMgZW5zdXJpbmcgdGhlcmUncyBzcGFjZSBmb3IgYSBuZXcgbW9kdWxlIG9yIGFzIGludHJpY2F0ZSBhcyBoYW5kbGluZyBzaGFyZWQgY29kZSBzZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEyNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MTkuOTEzNDI3MjQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ4Njk3NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY29kZXRhZy5oPTkyPWJvb2wgY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTMtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNpemUpO1xcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk0OnZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTk1LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD0xMDc9c3RhdGljIGlubGluZSB2b2lkICpcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMDg6Y29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTA5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgcHJlcGVuZCxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI3ODg9c3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODIyLVxcdFxcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXFx1MDAzZXNoX3NpemUpKSB7XFxua2VybmVsL21vZHVsZS9tYWluLmM6MjgyMzpcXHRcXHRcXHRkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4MjQtXFx0XFx0XFx0XFx0XFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXFx1MDAzZXNoX2FkZHJhbGlnbik7XFxuLS1cXG5saWIvY29kZXRhZy5jPTI1Mz1ib29sIGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubGliL2NvZGV0YWcuYy0yODAtXFxubGliL2NvZGV0YWcuYzoyODE6dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxubGliL2NvZGV0YWcuYy0yODItXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgcHJlcGVuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MjIuNTYyMTI5NDg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzI0NDcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RldGFnIEFsbG9jYXRpb24gTW9kdWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAgZnVuY3Rpb24gd2l0aGluIGBsaWIvY29kZXRhZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGNvZGV0YWcgbW9kdWxlIGlzIGFsbG9jYXRpbmcgaXRzIHJlc291cmNlcy4gVGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsLCBiZWNhdXNlIHByb3BlciBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IGFyZSBmdW5kYW1lbnRhbCB0byBtZW1vcnkgc2FmZXR5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB1c2VkOiBhcmUgd2UgZGVhbGluZyB3aXRoIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJsb2NrcywgZHluYW1pYyBhbGxvY2F0aW9uIHdpdGggYG1hbGxvY2AsIGEgY3VzdG9tIGFsbG9jYXRvciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjI1LjU5NDU4MDkzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL2NvZGV0YWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODE6XFx0dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIDI4MjpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBwcmVwZW5kLFxcbiAyODM6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhbGlnbilcXG4gMjg0OlxcdHtcXG4gMjg1OlxcdFxcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IG5hbWUgKyBzdHJsZW4oQ09ERVRBR19TRUNUSU9OX1BSRUZJWCk7XFxuIDI4NjpcXHRcXHRzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGU7XFxuIDI4NzpcXHRcXHR2b2lkICpyZXQgPSBFUlJfUFRSKC1FSU5WQUwpO1xcbiAyODg6XFx0XFxuIDI4OTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjb2RldGFnX2xvY2spO1xcbiAyOTA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFxcdTAwMjZjb2RldGFnX3R5cGVzLCBsaW5rKSB7XFxuIDI5MTpcXHRcXHRcXHRpZiAoc3RyY21wKHR5cGVfbmFtZSwgY3R0eXBlLVxcdTAwM2VkZXNjLnNlY3Rpb24pID09IDApIHtcXG4gMjkyOlxcdFxcdFxcdFxcdGlmIChXQVJOX09OKCFjdHR5cGUtXFx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW0pKVxcbiAyOTM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbiAyOTY6XFx0XFx0XFx0XFx0cmV0ID0gY3R0eXBlLVxcdTAwM2VkZXNjLmFsbG9jX3NlY3Rpb25fbWVtKG1vZCwgc2l6ZSwgcHJlcGVuZCwgYWxpZ24pO1xcbiAyOTc6XFx0XFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbiAyOTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI5OTpcXHRcXHRcXHR9XFxuIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvZGV0YWdfbG9jayk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHJldHVybiByZXQ7XFxuIDMwNDpcXHR9XFxuIDMwNTpcXHRcXG4gMzA2OlxcdHZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpXFxuIDMwNzpcXHR7XFxuIDMwODpcXHRcXHRzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGU7XFxuIDMwOTpcXHRcXG4gMzEwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvZGV0YWdfbG9jayk7XFxuIDMxMTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0dHlwZSwgXFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcXG4gMzEyOlxcdFxcdFxcdGlmICghY3R0eXBlLVxcdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXFxuIDMxMzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzE0OlxcdFxcbiAzMTU6XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIDMxNjpcXHRcXHRcXHRjdHR5cGUtXFx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbShtb2QsIGZhbHNlKTtcXG4gMzE3OlxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9sb2NrKTtcXG4gMzE4OlxcdFxcdH1cXG4gMzE5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29kZXRhZ19sb2NrKTtcXG4gMzIwOlxcdH1cXG4gMzIxOlxcdFxcbiAzMjI6XFx0dm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpXFxuIDMyMzpcXHR7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGU7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvZGV0YWdfbG9jayk7XFxuIDMyNzpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0dHlwZSwgXFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcXG4gMzI4OlxcdFxcdFxcdGlmICghY3R0eXBlLVxcdTAwM2VkZXNjLm1vZHVsZV9yZXBsYWNlZClcXG4gMzI5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjI1LjU5NDczMTcyN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTc0MTUzODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gYGFsbG9jX3NlY3Rpb25fbWVtYCBoYXMgYmVlbiBjYWxsZWQuIFRoYXQncyBvdXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGNydWNpYWwgdGhpbmcgaXMgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoaXMgYGFsbG9jX3NlY3Rpb25fbWVtYCBmdW5jdGlvbiBpcyBhY3R1YWxseSAqZGVmaW5lZCogb3IsIG1vcmUgcHJlY2lzZWx5LCAqc2V0Ki4gSXQncyBub3QgZW5vdWdoIHRvIGtub3cgaXQncyBiZWluZyBjYWxsZWQ7IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIGl0cyBvcmlnaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgYWxsb2NhdGlvbiBpcyBoYXBwZW5pbmcuIFdoYXQncyBkcml2aW5nIHRoaXMgY2FsbD8gV2hlcmUgaXMgdGhlIG1lbW9yeSBhY3R1YWxseSBiZWluZyBtYW5hZ2VkPyBJcyB0aGlzIGR5bmFtaWMgYWxsb2NhdGlvbj8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBtZW1vcnkgbWFwPyBLbm93aW5nIHRoZSBsb2NhdGlvbiBvZiBpdHMgc2V0dXAgd2lsbCB1bmxvY2sgYSBmYXIgbW9yZSBjb21wcmVoZW5zaXZlIGdyYXNwIG9mIHRoZSBwcm9jZXNzLiBJIHdhbnQgdGhlIGJyZWFkY3J1bWJzOyBJIHdhbnQgdG8gZm9sbG93IHRoZSBjYWxsIHN0YWNrIHVwc3RyZWFtIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBwaWN0dXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDozMC4xNjg4ODc2ODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjQ3MjA4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2VjdGlvbl9tZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY29kZXRhZy5oPTM5PXN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC00OC1cXHRib29sICgqbmVlZHNfc2VjdGlvbl9tZW0pKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDo0OTpcXHR2b2lkICooKmFsbG9jX3NlY3Rpb25fbWVtKShzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC01MC1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcHJlcGVuZCwgdW5zaWduZWQgbG9uZyBhbGlnbik7XFxuLS1cXG5saWIvYWxsb2NfdGFnLmM9OTgzPXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXFxuLS1cXG5saWIvYWxsb2NfdGFnLmMtOTg5LVxcdFxcdC5uZWVkc19zZWN0aW9uX21lbVxcdD0gbmVlZHNfc2VjdGlvbl9tZW0sXFxubGliL2FsbG9jX3RhZy5jOjk5MDpcXHRcXHQuYWxsb2Nfc2VjdGlvbl9tZW1cXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXFxubGliL2FsbG9jX3RhZy5jLTk5MS1cXHRcXHQuZnJlZV9zZWN0aW9uX21lbVxcdD0gcmVsZWFzZV9tb2R1bGVfdGFncyxcXG4tLVxcbmxpYi9jb2RldGFnLmM9MjgxPXZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubGliL2NvZGV0YWcuYy0yOTEtXFx0XFx0aWYgKHN0cmNtcCh0eXBlX25hbWUsIGN0dHlwZS1cXHUwMDNlZGVzYy5zZWN0aW9uKSA9PSAwKSB7XFxubGliL2NvZGV0YWcuYzoyOTI6XFx0XFx0XFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cXHUwMDNlZGVzYy5hbGxvY19zZWN0aW9uX21lbSkpXFxubGliL2NvZGV0YWcuYy0yOTMtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5saWIvY29kZXRhZy5jLTI5NS1cXHRcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9sb2NrKTtcXG5saWIvY29kZXRhZy5jOjI5NjpcXHRcXHRcXHRyZXQgPSBjdHR5cGUtXFx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW0obW9kLCBzaXplLCBwcmVwZW5kLCBhbGlnbik7XFxubGliL2NvZGV0YWcuYy0yOTctXFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9MTMyND1zdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMTMzMC1cXHRcXHQubmVlZHNfc2VjdGlvbl9tZW1cXHQ9IG5lZWRzX3NlY3Rpb25fbWVtLFxcbm1tL2FsbG9jX3RhZy5jOjEzMzE6XFx0XFx0LmFsbG9jX3NlY3Rpb25fbWVtXFx0PSByZXNlcnZlX21vZHVsZV90YWdzLFxcbm1tL2FsbG9jX3RhZy5jLTEzMzItXFx0XFx0LmZyZWVfc2VjdGlvbl9tZW1cXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjMyLjc5MzYxNTI4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUxODQxNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBrZXkgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHJlbGF0ZWQgdG8gYHJlc2VydmVfbW9kdWxlX3RhZ3NgLiBSaWdodCwgdGhhdCBmdW5jdGlvbiBuYW1lIGNsaWNrcy4gQW5kIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIHRvIHJldHVybiBgRVJSX1BUUigtRUFHQUlOKWAgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb24uIExldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgLSBpZiBgIXRhZ3NfYWRkcmVzc2FibGUoKWAsIGl0IHJldHVybnMgYW4gZXJyb3IuIFRoZSBwYXRjaCBpcyB3b3JraW5nIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBmaWxlLiBOb3cgbGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24gYHJlc2VydmVfbW9kdWxlX3RhZ3NgIHRvIHByb3Blcmx5IGFzc2VzcyB0aGUgZWZmZWN0cyBvZiB0aGUgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjM2LjI0NTQ1OTcyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vYWxsb2NfdGFnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQ1OlxcdFxcbiA5NDY6XFx0XFx0aWYgKElTX0VSUihyZXQpKVxcbiA5NDc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTQ4OlxcdFxcbiA5NDk6XFx0XFx0aWYgKG1vZHVsZV90YWdzLnNpemUgXFx1MDAzYyBvZmZzZXQgKyBzaXplKSB7XFxuIDk1MDpcXHRcXHRcXHRpbnQgZ3Jvd19yZXM7XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdFxcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xcbiA5NTM6XFx0XFx0XFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcXG4gOTU0OlxcdFxcdFxcdFxcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XFxuIDk1NTpcXHRcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcIldpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcXFxuXFxcIixcXG4gOTU2OlxcdFxcdFxcdFxcdFxcdCAgICAgbW9kLVxcdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XFxuIDk1NzpcXHRcXHRcXHRcXHRyZWxlYXNlX21vZHVsZV90YWdzKG1vZCwgZmFsc2UpO1xcbiA5NTg6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XFxuIDk1OTpcXHRcXHRcXHR9XFxuIDk2MDpcXHRcXG4gOTYxOlxcdFxcdFxcdGdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTtcXG4gOTYyOlxcdFxcdFxcdGlmIChncm93X3Jlcykge1xcbiA5NjM6XFx0XFx0XFx0XFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcXG4gOTY0OlxcdFxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuIDk2NTpcXHRcXHRcXHRcXHQgICAgICAgbW9kLVxcdTAwM2VuYW1lKTtcXG4gOTY2OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGdyb3dfcmVzKTtcXG4gOTY3OlxcdFxcdFxcdH1cXG4gOTY4OlxcdFxcdH1cXG4gOTY5OlxcdFxcbiA5NzA6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBvZmZzZXQpO1xcbiA5NzE6XFx0fVxcbiA5NzI6XFx0XFxuIDk3MzpcXHRzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcXG4gOTc0OlxcdHtcXG4gOTc1OlxcdFxcdC8qIEFsbG9jYXRlIG1vZHVsZSBhbGxvY190YWcgcGVyY3B1IGNvdW50ZXJzICovXFxuIDk3NjpcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XFxuIDk3NzpcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdG9wX3RhZztcXG4gOTc4OlxcdFxcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcXG4gOTc5OlxcdFxcbiA5ODA6XFx0XFx0LyogcGVyY3B1IGNvdW50ZXJzIGZvciBjb3JlIGFsbG9jYXRpb25zIGFyZSBhbHJlYWR5IHN0YXRpY2FsbHkgYWxsb2NhdGVkICovXFxuIDk4MTpcXHRcXHRpZiAoIW1vZClcXG4gOTgyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA5ODM6XFx0XFxuIDk4NDpcXHRcXHRzdGFydF90YWcgPSBjdF90b19hbGxvY190YWcoc3RhcnQpO1xcbiA5ODU6XFx0XFx0c3RvcF90YWcgPSBjdF90b19hbGxvY190YWcoc3RvcCk7XFxuIDk4NjpcXHRcXHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFxcdTAwM2Mgc3RvcF90YWc7IHRhZysrKSB7XFxuIDk4NzpcXHRcXHRcXHRXQVJOX09OKHRhZy1cXHUwMDNlY291bnRlcnMpO1xcbiA5ODg6XFx0XFx0XFx0dGFnLVxcdTAwM2Vjb3VudGVycyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzKTtcXG4gOTg5OlxcdFxcdFxcdGlmICghdGFnLVxcdTAwM2Vjb3VudGVycykge1xcbiA5OTA6XFx0XFx0XFx0XFx0d2hpbGUgKC0tdGFnIFxcdTAwM2U9IHN0YXJ0X3RhZykge1xcbiA5OTE6XFx0XFx0XFx0XFx0XFx0ZnJlZV9wZXJjcHUodGFnLVxcdTAwM2Vjb3VudGVycyk7XFxuIDk5MjpcXHRcXHRcXHRcXHRcXHR0YWctXFx1MDAzZWNvdW50ZXJzID0gTlVMTDtcXG4gOTkzOlxcdFxcdFxcdFxcdH1cXG4gOTk0OlxcdFxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWcgcGVyY3B1IGNvdW50ZXJzIGluIHRoZSBtb2R1bGUgJXNcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjM2LjI0NTcwMDE4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTAyNDAyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1vZHVsZSBMb2FkaW5nIEJlaGF2aW9yIHdpdGggTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoaXMgY2hhbmdlIGluIHRoZSBtb2R1bGUgbG9hZGVyLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gaXMgc2V0IHVwIHNvIHRoYXQgaWYgYCF0YWdzX2FkZHJlc3NhYmxlKClgIHJldHVybnMgdHJ1ZSwgbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZCBhbmQgYW4gYC1FQUdBSU5gIGVycm9yIGlzIHJldHVybmVkLiBUaGF0J3MgYSBrZXkgcG9pbnQuIFRoaXMgYC1FQUdBSU5gIGdldHMgcGFzc2VkIGJhY2sgdXAgdGhlIGNhbGwgc3RhY2ssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBtb3ZlX21vZHVsZWAuIFRoZW4sIGRvd24gaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgLCB0aGUgY29kZSBhY3RpdmVseSAqY2F0Y2hlcyogdGhhdCBgLUVBR0FJTmAgZXJyb3IsIHJlc2V0cyBzb21lIGludGVybmFsIHN0YXRlLCBhbmQgdGhlbiAqcmV0cmllcyogdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBpc24ndCBpdD8gSXQgZXNzZW50aWFsbHkgaW50cm9kdWNlcyBhIHJldHJ5IG1lY2hhbmlzbSBpbiByZXNwb25zZSB0byBhIHNwZWNpZmljIGNvbmRpdGlvbi5cblxuVGhlIG5leHQgcXVlc3Rpb24gaXMsIFwiV2hlbiBpcyB0aGlzIGFjdHVhbGx5IGhpdD9cIiBJdCdzIHJlYWNoYWJsZSBpZiBhIG1vZHVsZSBpcyBsb2FkZWQgYW5kIGAhdGFnc19hZGRyZXNzYWJsZSgpYCBpcyB0cnVlIGF0IGFueSBwb2ludC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYHRhZ3NfYWRkcmVzc2FibGUoKWAgaXRzZWxmIGlzIGNoZWNraW5nIGlmIHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBjYW4gZml0IHdpdGhpbiB0aGUgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLiBUaGF0IGltcGxpZXMgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQuIFJpZ2h0LCB0aGUgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBjb25maWcgb3B0aW9uLiBTbywgdGhpcyByZXRyeSBiZWhhdmlvciBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBhY3RpdmUgYW5kIHRoZSB0YWdzIGFyZSB0b28gYmlnIHRvIGZpdCBpbiB0aGUgcGFnZSBmbGFncywgdGhlbiBpdCBzaG91bGQgdHJpZ2dlciBgLUVBR0FJTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQ0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6NDEuMzQ4MTA1NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDAyODU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMxMT1jb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMyMy1cXG5tbS9LY29uZmlnLmRlYnVnOjMyNDpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL0tjb25maWcuZGVidWctMzI1LVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMzNy1cXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG5tbS9LY29uZmlnLmRlYnVnLTMzOS1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDAtXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZy5kZWJ1ZzozNDE6XFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDM6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTM0NC1cXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDUtXFx0ZGVmYXVsdCBuXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDY6XFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDc6XFx0c2VsZWN0IE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDgtXFx0aGVscFxcbi0tXFxubW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xcbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgKz0gYWxsb2NfdGFnLm9cXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTI4LVxcbm1tL2FsbG9jX3RhZy5jOjI5OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG5tbS9hbGxvY190YWcuYy0zMC1zdGF0aWMgYm9vbCBtZW1fcHJvZmlsaW5nX3N1cHBvcnQgPSB0cnVlO1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9NDg9RVhQT1JUX1NZTUJPTChfc2hhcmVkX2FsbG9jX3RhZyk7XFxuLS1cXG5tbS9hbGxvY190YWcuYy01MC1cXG5tbS9hbGxvY190YWcuYzo1MTpERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXFxubW0vYWxsb2NfdGFnLmMtNTItXFx0XFx0XFx0bWVtX2FsbG9jX3Byb2ZpbGluZ19rZXkpO1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9MTExNj1zdGF0aWMgX19pbml0IGJvb2wgbmVlZF9wYWdlX2FsbG9jX3RhZ2dpbmcodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTExMjMtXFxubW0vYWxsb2NfdGFnLmM6MTEyNDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9hbGxvY190YWcuYy0xMTI1LS8qXFxuLS1cXG5tbS9hbGxvY190YWcuYz0xMjAyPXN0YXRpYyB2b2lkIF9faW5pdCBjbGVhcl9lYXJseV9hbGxvY19wZm5fdGFnX3JlZnModm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEyNTUtfVxcbm1tL2FsbG9jX3RhZy5jOjEyNTY6I2Vsc2UgLyogIUNPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxubW0vYWxsb2NfdGFnLmMtMTI1Ny1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNsZWFyX2Vhcmx5X2FsbG9jX3Bmbl90YWdfcmVmcyh2b2lkKSB7fVxcbm1tL2FsbG9jX3RhZy5jOjEyNTg6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxubW0vYWxsb2NfdGFnLmMtMTI1OS1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEyNzc9c3RhdGljIGludCBwcm9jX21lbV9wcm9maWxpbmdfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMTI4OC1cXG5tbS9hbGxvY190YWcuYzoxMjg5OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbm1tL2FsbG9jX3RhZy5jLTEyOTAtXFx0XFx0LyogVXNlciBjYW4ndCB0b2dnbGUgcHJvZmlsaW5nIHdoaWxlIGRlYnVnZ2luZyAqL1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEyMjA9c3RhdGljIHZvaWQgY2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTEyMzQtXFxubW0vcGFnZV9hbGxvYy5jOjEyMzU6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vcGFnZV9hbGxvYy5jLTEyMzYtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTMwMT1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTEzMDYtXFxubW0vcGFnZV9hbGxvYy5jOjEzMDc6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG5tbS9wYWdlX2FsbG9jLmMtMTMwOC1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMzEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpIHt9XFxubW0vcGFnZV9hbGxvYy5jLTEzMTMtXFxubW0vcGFnZV9hbGxvYy5jOjEzMTQ6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vcGFnZV9hbGxvYy5jLTEzMTUtXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTgwPXN0YXRpYyBzdHJ1Y3QgcGFnZV9leHRfb3BlcmF0aW9ucyAqcGFnZV9leHRfb3BzW10gX19pbml0ZGF0YSA9IHtcXG4tLVxcbm1tL3BhZ2VfZXh0LmMtODYtI2VuZGlmXFxubW0vcGFnZV9leHQuYzo4NzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9wYWdlX2V4dC5jLTg4LVxcdFxcdTAwMjZwYWdlX2FsbG9jX3RhZ2dpbmdfb3BzLFxcbi0tXFxubW0vcGFnZV9leHQuYz0xMDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXNhZ2U7XFxubW0vcGFnZV9leHQuYy0xMDEtXFxubW0vcGFnZV9leHQuYzoxMDI6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vcGFnZV9leHQuYy0xMDMtLypcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTM1PXN0cnVjdCBwY3B1b2JqX2V4dCB7XFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0zOC0jZW5kaWZcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDozOTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00MC1cXHR1bmlvbiBjb2RldGFnX3JlZlxcdHRhZztcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQzLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjQ0OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgfHwgZGVmaW5lZChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORylcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00NS0jZGVmaW5lIE5FRURfUENQVU9CSl9FWFRcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTkwPXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3BjcHVvYmpfZXh0KHZvaWQpXFxubW0vcGVyY3B1LWludGVybmFsLmgtOTEte1xcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjkyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSlcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3BlcmNwdS5jPTE2OTA9c3RhdGljIHZvaWQgcGNwdV9tZW1jZ19mcmVlX2hvb2soc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL3BlcmNwdS5jLTE2OTQtXFxubW0vcGVyY3B1LmM6MTY5NTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9wZXJjcHUuYy0xNjk2LXN0YXRpYyB2b2lkIHBjcHVfYWxsb2NfdGFnX2FsbG9jX2hvb2soc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLFxcbi0tXFxubW0vc2hvd19tZW0uYz00MDg9dm9pZCBfX3Nob3dfbWVtKHVuc2lnbmVkIGludCBmaWx0ZXIsIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxcbi0tXFxubW0vc2hvd19tZW0uYy00MzQtI2VuZGlmXFxubW0vc2hvd19tZW0uYzo0MzU6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2hvd19tZW0uYy00MzYtXFx0c3RhdGljIERFRklORV9TUElOTE9DSyhtZW1fYWxsb2NfcHJvZmlsaW5nX3NwaW5sb2NrKTtcXG4tLVxcbm1tL3NsdWIuYz0yMDQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtMjA2My1cXG5tbS9zbHViLmM6MjA2NDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9zbHViLmMtMjA2NS1cXG4tLVxcbm1tL3NsdWIuYz0yMDk3PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tLVxcbm1tL3NsdWIuYy0yMTEyLVxcbm1tL3NsdWIuYzoyMTEzOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxubW0vc2x1Yi5jLTIxMTQtXFxuLS1cXG5tbS9zbHViLmM9MjExNz1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuLS1cXG5tbS9zbHViLmMtMjExOS1cXG5tbS9zbHViLmM6MjEyMDojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG5tbS9zbHViLmMtMjEyMS1cXG4tLVxcbm1tL3NsdWIuYz0yMzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIzMjAtXFxubW0vc2x1Yi5jOjIzMjE6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2x1Yi5jLTIzMjItXFxuLS1cXG5tbS9zbHViLmM9MjQwOT1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQxNS1cXG5tbS9zbHViLmM6MjQxNjojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3NsdWIuYy0yNDE3LVxcbi0tXFxubW0vc2x1Yi5jPTI0MjU9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbi0tXFxubW0vc2x1Yi5jLTI0MjktXFxubW0vc2x1Yi5jOjI0MzA6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vc2x1Yi5jLTI0MzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjQxLjQ2MjE0MDYzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYxOTQ3MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEkndmUgc3BvdHRlZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGluIHRoZSBjb25maWcg4oCTIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgdG8gc2V0IHVwIGZ1enppbmcgYWdhaW5zdCBpdD8gSXQgbG9va3MgbGlrZSBpdCBpbnRyb2R1Y2VzIGEgcmV0cnkgbG9vcCB3aXRoaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgLiBUaGUgY29kZSBub3cgcmV0cmllcyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGlmIGBtb3ZlX21vZHVsZWAgcmV0dXJucyBgLUVBR0FJTmAuIFRoaXMgbmV3IGhhbmRsaW5nIHNlZW1zIHRvIGFkZHJlc3MgYSBzcGVjaWZpYyBlZGdlIGNhc2Ugd2hlcmUgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIG1pZ2h0IGZhaWwgZHVlIHRvIHRoZSBudW1iZXIgb2YgdGFncyBleGNlZWRpbmcgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5LCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgaXMgbG9jYXRlZCBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLCByaWdodD8gT2theSwganVzdCB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGxheW91dF9hbmRfYWxsb2NhdGVgIGFnYWluLiBOZWVkIHRvIGJlIGNlcnRhaW4gYmVmb3JlIEkgZ28gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6NDkuMDI0MDkxMjQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbW9kdWxlL21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTQ0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTQ0OlxcdHtcXG4yOTQ1OlxcdFxcdHN0cnVjdCBtb2R1bGUgKm1vZDtcXG4yOTQ2OlxcdFxcdGludCBlcnI7XFxuMjk0NzpcXHRcXHR1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107XFxuMjk0ODpcXHRcXG4yOTQ5OlxcdFxcdC8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi9cXG4yOTUwOlxcdFxcdGVyciA9IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLFxcbjI5NTE6XFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cXHUwMDNlbW9kKTtcXG4yOTUyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI5NTM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTU0OlxcdFxcbjI5NTU6XFx0XFx0ZXJyID0gbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKGluZm8tXFx1MDAzZWhkciwgaW5mby1cXHUwMDNlc2VjaGRycyxcXG4yOTU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cXHUwMDNlbW9kKTtcXG4yOTU3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI5NTg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTU5OlxcdFxcbjI5NjA6XFx0XFx0LyogV2Ugd2lsbCBkbyBhIHNwZWNpYWwgYWxsb2NhdGlvbiBmb3IgcGVyLWNwdSBzZWN0aW9ucyBsYXRlci4gKi9cXG4yOTYxOlxcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcXG4yOTYyOlxcdFxcbjI5NjM6XFx0XFx0LypcXG4yOTY0OlxcdFxcdCAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuXFxuMjk2NTpcXHRcXHQgKiBwdXQgdGhlbSBpbiB0aGUgcmlnaHQgcGxhY2UuXFxuMjk2NjpcXHRcXHQgKiBOb3RlOiByb19hZnRlcl9pbml0IHNlY3Rpb25zIGFsc28gaGF2ZSBTSEZfe1dSSVRFLEFMTE9DfSBzZXQuXFxuMjk2NzpcXHRcXHQgKi9cXG4yOTY4OlxcdFxcdG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLCBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzKTtcXG4yOTY5OlxcdFxcbjI5NzA6XFx0XFx0LypcXG4yOTcxOlxcdFxcdCAqIFNhdmUgdGhlIHNpemVzIHJlc2VydmVkIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoKSBzbyB0aGV5IGNhblxcbjI5NzI6XFx0XFx0ICogYmUgcmVzdG9yZWQgaWYgd2UgcmV0cnkgYmVsb3cuXFxuMjk3MzpcXHRcXHQgKi9cXG4yOTc0OlxcdFxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxcbjI5NzU6XFx0XFx0XFx0ZnJvYl9zaXplW3R5cGVdID0gaW5mby1cXHUwMDNlbW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZTtcXG4yOTc2OlxcdFxcbjI5Nzc6XFx0XFx0LypcXG4yOTc4OlxcdFxcdCAqIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93XFxuMjk3OTpcXHRcXHQgKiB0aGlzIGlzIGRvbmUgZ2VuZXJpY2FsbHk7IHRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGFueVxcbjI5ODA6XFx0XFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXFxuMjk4MTpcXHRcXHQgKi9cXG4yOTgyOlxcdHJldHJ5OlxcbjI5ODM6XFx0XFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuMjk4NDpcXHRcXHRsYXlvdXRfc3ltdGFiKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuMjk4NTpcXHRcXG4yOTg2OlxcdFxcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xcbjI5ODc6XFx0XFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG4yOTg4OlxcdFxcdGlmIChlcnIpIHtcXG4yOTg5OlxcdFxcdFxcdGlmIChlcnIgIT0gLUVBR0FJTilcXG4yOTkwOlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMjk5MTpcXHRcXHRcXHQvKlxcbjI5OTI6XFx0XFx0XFx0ICogLUVBR0FJTiBtZWFucyBwcm9maWxpbmcgd2FzIGRpc2FibGVkIGJ1dCB0aGUgbW9kdWxlXFxuMjk5MzpcXHRcXHRcXHQgKiBjYW4gc3RpbGwgbG9hZCB3aXRob3V0IGl0LiBSZXNldCBzdGF0ZSBhbmQgcmV0cnkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjQ5LjAyNDQ0MDMzOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjM4NzEzOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE1vZHVsZSBMb2FkaW5nIFJldHJ5IExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29kZSBzbmlwcGV0LCBzcGVjaWZpY2FsbHkgdGhlIHJldHJ5IGxvZ2ljIGluIG1vZHVsZSBsb2FkaW5nLCB0cmlnZ2VyZWQgd2hlbiBhIGAtRUFHQUlOYCBlcnJvciBpcyBlbmNvdW50ZXJlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQncyB0b3VjaGluZyBjb3JlIG1vZHVsZSBsb2FkaW5nIGxvZ2ljLCBhbmQgYW55IGRldmlhdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGhlcmUgY291bGQgaGF2ZSBwcmV0dHkgc2VyaW91cyBpbXBsaWNhdGlvbnMuXG5cblRoZSBjb2RlJ3MgcHVycG9zZSBpcyB0byByZXRyeSBhZnRlciBoYW5kbGluZyBhIGAtRUFHQUlOYCBlcnJvciwgd2hpY2ggc2lnbmlmaWVzIHRoYXQgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgYnV0IHRoZSBtb2R1bGUgY2FuIHN0aWxsIGJlIGxvYWRlZC4gSXQgcmV3cml0ZXMgc2VjdGlvbiBoZWFkZXJzLCBhZGp1c3RzIG1lbW9yeSBzaXplcyBmb3IgZGlmZmVyZW50IHR5cGVzLCBhbmQgY2xlYXJzIHRoZSBgU0hGX0FMTE9DYCBmbGFnIGZvciBzeW1ib2wgYW5kIHN0cmluZyB0YWJsZSBzZWN0aW9ucywgdGhlbiByZXRyaWVzLiBUaGlzIHJlc2V0IGFuZCByZXRyeSBtZWNoYW5pc20gc2NyZWFtcyBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBlc3BlY2lhbGx5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhhdCBtb2R1bGUgbG9hZGluZyBpcyByZWFjaGVkIHZpYSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXNjYWxscywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4gVGhlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBjb25maWcgb3B0aW9uIGlzIHRoZSBrZXkgdG8gdHJpZ2dlciBpdC5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgdGFyZ2V0cyBoZXJlPyBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAsIGBtb3ZlX21vZHVsZWAsIGFuZCBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYXJlIGltbWVkaWF0ZWx5IG9uIG15IHJhZGFyLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBhbGwgdGhyZWUgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIFdoaWxlIHN0YXRpYyBmdW5jdGlvbnMgY2FuIHN0aWxsIGJlIHZhbHVhYmxlIHRhcmdldHMsIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcHVibGljIGludGVyZmFjZXMgdGhhdCBjYWxsIHRoZW0sIGJlY2F1c2UgdGhlc2UgYXJlIGhhcmRlciB0byB0YXJnZXQgZGlyZWN0bHkuIFRoZSBgbG9hZF9tb2R1bGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgY2FsbGVkLCBJIGJlbGlldmUsIHdoZW4gY2FsbGluZyBgaW5pdF9tb2R1bGVgLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeXBvaW50LiBJIGFsc28gc2hvdWxkIG5vdGUgdGhhdCB0aGUgc3lzdGVtIGNhbGwgdG8gdHJpZ2dlciB0aGlzIGlzIGBzeXNfaW5pdF9tb2R1bGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYwNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjU3LjI2MzE1NzA4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NjIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKmluaXRfbW9kdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9tb2R1bGUvbWFpbi5jPTM0NDM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjU0LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM2NTU6U1lTQ0FMTF9ERUZJTkUzKGluaXRfbW9kdWxlLCB2b2lkIF9fdXNlciAqLCB1bW9kLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM2NTYtXFx0XFx0dW5zaWduZWQgbG9uZywgbGVuLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1YXJncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM4MDE9c3RhdGljIGludCBpZGVtcG90ZW50X2luaXRfbW9kdWxlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqIHVhcmdzLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zODE5LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM4MjA6U1lTQ0FMTF9ERUZJTkUzKGZpbml0X21vZHVsZSwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgdWFyZ3MsIGludCwgZmxhZ3MpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzgyMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjU3LjM1NTAyOTg5N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM3NDU3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCDigJMgdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMsIHJpZ2h0PyBCdXQgaG9sZCBvbiwgdGhlIGNhbGwgY2hhaW4gaXMgYSBiaXQgbW9yZSBpbnRyaWNhdGUuIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCBnZXRzIGNhbGxlZCBieSBgbG9hZF9tb2R1bGVgLiBBbmQgYGxvYWRfbW9kdWxlYCwgaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpczogd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZD8gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYSBmb2N1cy4gQXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IEkgY2FuIGRpZyBpbnRvPyBOb3BlLCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGByZXNlcnZlX21vZHVsZV90YWdzYCBhcmUgYm90aCBzdGF0aWMuIEhtbSwgaGFuZyBvbiwgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGlzIGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgYGFsbG9jX3NlY3Rpb25fbWVtYCB3aXRoaW4gYGFsbG9jX3RhZ19pbml0YC4gVGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuXG5cbkxldCdzIHJldGhpbmsgdGhpcy4gQmFjayB0byB0aGUgaHVudCBmb3Igc29tZXRoaW5nIG5vbi1zdGF0aWMuIGBsb2FkX21vZHVsZWAgaXMgc3RhdGljLiBUaGF0IGRvZXNuJ3QgaGVscC4gU28sIGl0IGxvb2tzIGxpa2UgaXQgd2lsbCBjb21lIGRvd24gdG8gYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYC4gSSdsbCBnbyBjaGVjayBga2VybmVsL21vZHVsZS9tYWluLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIGludGVyZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU2OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTowMi45OTI0OTA3NjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzk5NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgLiptb2R1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL21vZHVsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9MjA3PXN0YXRpYyBzc2l6ZV90IG1vZHVsZV96c3RkX2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI5My1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyOTQ6aW50IG1vZHVsZV9kZWNvbXByZXNzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjk1LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0xMjA9aW50IG1vZF92ZXJpZnlfc2lnKGNvbnN0IHZvaWQgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjEyMTppbnQgdHJ5X3RvX2ZvcmNlX2xvYWQoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xMjItYm9vbCBmaW5kX3N5bWJvbChzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnICpmc2EpO1xcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTEzNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga2VybmVsX3N5bWJvbF92YWx1ZShjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltKVxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTE0NC0jaWZkZWYgQ09ORklHX0xJVkVQQVRDSFxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDoxNDU6aW50IGNvcHlfbW9kdWxlX2VsZihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pO1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xNDYtdm9pZCBmcmVlX21vZHVsZV9lbGYoc3RydWN0IG1vZHVsZSAqbW9kKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0yMDk9c3RydWN0IG1vZF9mYWlsX2xvYWQge1xcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTIxNS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MjE2OmludCB0cnlfYWRkX2ZhaWxlZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgZW51bSBmYWlsX2R1cF9tb2RfcmVhc29uIHJlYXNvbik7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTIxNy12b2lkIG1vZF9zdGF0X2J1bXBfaW52YWxpZChzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpO1xcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTI1Nj1zdHJ1Y3QgbW9kX3VubG9hZF90YWludCB7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjYyLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDoyNjM6aW50IHRyeV9hZGRfdGFpbnRlZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjY0LXZvaWQgcHJpbnRfdW5sb2FkZWRfdGFpbnRlZF9tb2R1bGVzKHZvaWQpO1xcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTI3MT1zdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfdW5sb2FkZWRfdGFpbnRlZF9tb2R1bGVzKHZvaWQpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjc2LSNpZmRlZiBDT05GSUdfTU9EVUxFX0RFQ09NUFJFU1NcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6Mjc3OmludCBtb2R1bGVfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKTtcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjc4LXZvaWQgbW9kdWxlX2RlY29tcHJlc3NfY2xlYW51cChzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zMTU9c3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICptb2RfZmluZCh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBtb2RfdHJlZV9yb290ICp0cmVlKVxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTMyOC1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzI5OmludCBtb2R1bGVfZW5hYmxlX3JvZGF0YV9ybyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpO1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozMzA6aW50IG1vZHVsZV9lbmFibGVfcm9kYXRhX3JvX2FmdGVyX2luaXQoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTtcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzMxOmludCBtb2R1bGVfZW5hYmxlX2RhdGFfbngoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTtcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzMyOmludCBtb2R1bGVfZW5hYmxlX3RleHRfcm94KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjMzMzppbnQgbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKGNvbnN0IEVsZl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLFxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zMzQtXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqc2Vjc3RyaW5ncyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zMzY9dm9pZCBtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGNvbnN0IEVsZl9FaGRyICpoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTMzOS0jaWZkZWYgQ09ORklHX01PRFVMRV9TSUdcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzQwOmludCBtb2R1bGVfc2lnX2NoZWNrKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncyk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM0MS0jZWxzZSAvKiAhQ09ORklHX01PRFVMRV9TSUcgKi9cXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zNjc9c3RhdGljIGlubGluZSB2b2lkIGFkZF9rYWxsc3ltcyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pIHsgfVxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM3MC0jaWZkZWYgQ09ORklHX1NZU0ZTXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM3MTppbnQgbW9kX3N5c2ZzX3NldHVwKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMzcyLVxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcGFyYW0sIHVuc2lnbmVkIGludCBudW1fcGFyYW1zKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zOTE9dm9pZCBtb2R1bGVfbGF5b3V0KHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHZlcnNpb25faW5mbyAqdmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCxcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMzkyLVxcdFxcdCAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHApO1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozOTM6aW50IGNoZWNrX21vZHN0cnVjdF92ZXJzaW9uKGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIHN0cnVjdCBtb2R1bGUgKm1vZCk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM5NC1pbnQgc2FtZV9tYWdpYyhjb25zdCBjaGFyICphbWFnaWMsIGNvbnN0IGNoYXIgKmJtYWdpYywgYm9vbCBoYXNfY3Jjcyk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM9MzExPXZvaWQgKiBfX3dlYWsgZGVyZWZlcmVuY2VfbW9kdWxlX2Z1bmN0aW9uX2Rlc2NyaXB0b3Ioc3RydWN0IG1vZHVsZSAqbW9kLFxcbi0tXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTMyMC0gKi9cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MzIxOmludCBtb2R1bGVfYWRkcmVzc19sb29rdXAodW5zaWduZWQgbG9uZyBhZGRyLFxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0zMjItXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICpzaXplLFxcbi0tXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTM0Ny1cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MzQ4OmludCBsb29rdXBfbW9kdWxlX3N5bWJvbF9uYW1lKHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc3ltbmFtZSlcXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzQ5LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0zNzAtXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjM3MTppbnQgbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLFxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0zNzItXFx0XFx0ICAgICAgIGNoYXIgKm5hbWUsIGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgKmV4cG9ydGVkKVxcbi0tXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jPTQ0Nz11bnNpZ25lZCBsb25nIGZpbmRfa2FsbHN5bXNfc3ltYm9sX3ZhbHVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy00NTItXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjQ1MzppbnQgbW9kdWxlX2thbGxzeW1zX29uX2VhY2hfc3ltYm9sKGNvbnN0IGNoYXIgKm1vZG5hbWUsXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTQ1NC1cXHRcXHRcXHRcXHQgICBpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcpLFxcbi0tXFxua2VybmVsL21vZHVsZS9rbW9kLmM9NzI9c3RhdGljIGludCBjYWxsX21vZHByb2JlKGNoYXIgKm9yaWdfbW9kdWxlX25hbWUsIGludCB3YWl0KVxcbi0tXFxua2VybmVsL21vZHVsZS9rbW9kLmMtMTMxLSAqL1xcbmtlcm5lbC9tb2R1bGUva21vZC5jOjEzMjppbnQgX19yZXF1ZXN0X21vZHVsZShib29sIHdhaXQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbmtlcm5lbC9tb2R1bGUva21vZC5jLTEzMy17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTE3LSAqL1xcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmM6MTg6aW50IGNvcHlfbW9kdWxlX2VsZihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYy0xOS17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xNjQ9c3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQobW9kdWxlX25vdGlmeV9saXN0KTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNjUtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTY2OmludCByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNjcte1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MTcwPUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNzEtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTcyOmludCB1bnJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE3My17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz03NzI9c3RhdGljIGludCB0cnlfc3RvcF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBpbnQgZmxhZ3MsIGludCAqZm9yY2VkKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtNzk0LSAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjc5NTppbnQgbW9kdWxlX3JlZmNvdW50KHN0cnVjdCBtb2R1bGUgKm1vZClcXG5rZXJuZWwvbW9kdWxlL21haW4uYy03OTYte1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MTEwNT1zdGF0aWMgY29uc3QgY2hhciB2ZXJtYWdpY1tdID0gVkVSTUFHSUNfU1RSSU5HO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExMDYtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTEwNzppbnQgdHJ5X3RvX2ZvcmNlX2xvYWQoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpyZWFzb24pXFxua2VybmVsL21vZHVsZS9tYWluLmMtMTEwOC17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTA5PWJvb2wgX193ZWFrIG1vZHVsZV9lbGZfY2hlY2tfYXJjaChFbGZfRWhkciAqaGRyKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkxMy1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTE0OmludCBfX3dlYWsgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MTUtXFx0XFx0XFx0XFx0ICAgICBFbGZfU2hkciAqc2VjaGRycyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTMwMTI9c3RhdGljIHZvaWQgbW9kdWxlX2RlYWxsb2NhdGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAyMC1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMDIxOmludCBfX3dlYWsgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAyMi1cXHRcXHRcXHQgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc2lnbmluZy5jPTQzPWludCBtb2RfdmVyaWZ5X3NpZyhjb25zdCB2b2lkICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3NpZ25pbmcuYy02OS1cXG5rZXJuZWwvbW9kdWxlL3NpZ25pbmcuYzo3MDppbnQgbW9kdWxlX3NpZ19jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxua2VybmVsL21vZHVsZS9zaWduaW5nLmMtNzEte1xcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jPTIzMD12b2lkIG1vZF9zdGF0X2J1bXBfYmVjb21pbmcoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTIzOS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MjQwOmludCB0cnlfYWRkX2ZhaWxlZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgZW51bSBmYWlsX2R1cF9tb2RfcmVhc29uIHJlYXNvbilcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjQxLXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jPTE1PXN0YXRpYyBpbnQgbW9kdWxlX3NldF9tZW1vcnkoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtMzItICovXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmM6MzM6aW50IG1vZHVsZV9lbmFibGVfdGV4dF9yb3goY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTM0LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTUwLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjUxOmludCBtb2R1bGVfZW5hYmxlX3JvZGF0YV9ybyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNTIte1xcbi0tXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNjctXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmM6Njg6aW50IG1vZHVsZV9lbmFibGVfcm9kYXRhX3JvX2FmdGVyX2luaXQoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTY5LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTc1LVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjc2OmludCBtb2R1bGVfZW5hYmxlX2RhdGFfbngoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTc3LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTg5LVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjkwOmludCBtb2R1bGVfZW5mb3JjZV9yd3hfc2VjdGlvbnMoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtOTEtXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqc2Vjc3RyaW5ncyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYz0zMzI9c3RhdGljIGludCBtb2Rfc3lzZnNfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMzYzLVxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYzozNjQ6aW50IG1vZF9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsXFxua2VybmVsL21vZHVsZS9zeXNmcy5jLTM2NS1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvdHJhY2tpbmcuYz0xOD1leHRlcm4gc3RydWN0IGRlbnRyeSAqbW9kX2RlYnVnZnNfcm9vdDtcXG5rZXJuZWwvbW9kdWxlL3RyYWNraW5nLmMtMTktXFxua2VybmVsL21vZHVsZS90cmFja2luZy5jOjIwOmludCB0cnlfYWRkX3RhaW50ZWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcXG5rZXJuZWwvbW9kdWxlL3RyYWNraW5nLmMtMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTowMy4wNzU4OTUwMTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg0NzQyNjMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTW9kdWxlIExvYWRpbmcgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBtb2R1bGUgbG9hZGluZyBjaGFuZ2VzLCBhbmQgdGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBmdW5jdGlvbnMgd2hlcmUgdGhlIGFjdHVhbCBtb2RpZmljYXRpb25zIHNlZW0gdG8gYmUsIHdoaWNoIGFyZSBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAsIGByZXNlcnZlX21vZHVsZV90YWdzYCwgYW5kIGByZWxlYXNlX21vZHVsZV90YWdzYC4gQnV0IHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBpbnRlcm5hbCBoZWxwZXJzLCBub3Qgd2hhdCB3ZSdyZSBsb29raW5nIGZvciwgSSBuZWVkIHRoZSBhY3R1YWwgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCdzIGEga2V5IGRldGFpbCFcblxuUmlnaHQsIHNvIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LCB0aGUgc3lzY2FsbHMgdGhlbXNlbHZlcy4gVGhlIGluaXRpYWwgaWRlYSB3YXMgdG8gZm9jdXMgb24gYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLCBhbmQgdGhlbiBJIHdhcyBnZXR0aW5nIHNsaWdodGx5IHRocm93biBieSB0aGUgaW50ZXJuYWwgYGxvYWRfbW9kdWxlYCBiZWluZyBzdGF0aWMgYW5kIHRoZSBtYWluIHdvcmsgaGFwcGVuaW5nIHRoZXJlLiBCdXQsIHdhaXQsIG5vLCBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBhcmUgdGhlIHN5c2NhbGxzLCBhbmQgdGhleSdyZSB3aGF0IFN5emthbGxlciBzaG91bGQgYmUgdXNpbmcgaW4gdGhlIHRlc3QgaGFybmVzcy4gTGV0J3MgbWFrZSBzdXJlIEknbSB1c2luZyB0aGUgY29ycmVjdCBuYW1lcyBmb3IgdGhlIHN5c2NhbGxzLlxuXG5BaCwgeWVzLCBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgLCBvciBzb21ldGltZXMganVzdCBgaW5pdF9tb2R1bGVgIG9yIGBmaW5pdF9tb2R1bGVgLCBhcmUgd2hhdCBTeXprYWxsZXIgd291bGQgYmUgbG9va2luZyBmb3IuIFRoYXQgc2VlbXMgcmlnaHQuIFBlcmZlY3QuIExldCdzIGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgdGhlIHByb3BlciBuYW1lcy4gWWVzLCBTeXprYWxsZXIgdXNlcyBgc3lzX2luaXRfbW9kdWxlYC4gT2theSwgdGhhdCdzIGdvb2QuIFJlbWVtYmVyIHRoZSBwcm9tcHQ6IHdlJ3JlIGZhdm9yaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuXG5cblNvLCBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIGFyZSBkZWZpbml0ZWx5IHRoZSBwcmVmZXJyZWQgZW50cnkgcG9pbnRzLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZSB0aGF0IEknbSBtaXNzaW5nLiBgYWxsb2NfdGFnX2luaXRgIGlzIGBfX2luaXRgIGFuZCBzdGF0aWMuIGByZXNlcnZlX21vZHVsZV90YWdzYCBhbmQgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgIGFyZSBzdGF0aWMgYXMgd2VsbCwgc28gdGhhdCBjb25maXJtcyBpdC4gVGhlIG9ubHkgZW50cnkgcG9pbnRzIGFyZSBkZWZpbml0ZWx5IHRoZSBtb2R1bGUgbG9hZGluZyBzeXNjYWxscywgYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgTUVNX0FMTE9DX1BST0ZJTElOR2AgbmVlZHMgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjExOjExLjkyMzMyNDkyNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAzNDMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MzExPWNvbmZpZyBQRVJfVk1BX0xPQ0tfU1RBVFNcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzIzLVxcbm1tL0tjb25maWcuZGVidWc6MzI0OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjUtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzM3LVxcbm1tL0tjb25maWcuZGVidWc6MzM4OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbm1tL0tjb25maWcuZGVidWctMzM5LVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzQyLVxcbm1tL0tjb25maWcuZGVidWc6MzQzOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDQtXFx0Ym9vbCBcXFwiTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMToxMi4wMTM2ODMwMDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzNTY4MTg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIGRpZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBtbS9LY29uZmlnLmRlYnVnYC4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIHNwb3QgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgY29yZSBtZW1vcnkgYXJlYXMuIEknbSBzcGVjaWZpY2FsbHkgYWltaW5nIGFyb3VuZCBsaW5lIDMyNDsgdGhhdCBmZWVscyBsaWtlIGEgbGlrZWx5IHBvaW50IHRvIHN0YXJ0IHVucmF2ZWxpbmcgd2hhdCdzIGVuYWJsZWQgYW5kIGRpc2FibGVkLiBNeSBob3BlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGljaCBmZWF0dXJlcyBhcmUgYWN0aXZlIGluIHRoZSBjdXJyZW50IGJ1aWxkIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgcmlnaHQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEkgYW50aWNpcGF0ZSB0aGVyZSdsbCBiZSBjb25kaXRpb25hbCBibG9ja3MgYW5kIHNvbWUgaW50ZXJlc3RpbmcgZGVwZW5kZW5jaWVzIGluIHRoYXQgYXJlYS4gSXQncyB0aW1lIHRvIGdldCBhIGJldHRlciBncmFzcCBvbiB3aGF0IGNhbiBiZSBhZGp1c3RlZCwgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjExOjE2LjU0OTM2ODM0MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdWNjZXNzLCByZXRyeSBhbmQgZmFpbHVyZSBjb3VudGVycyBvZiBwYWdlXFxuIDMxNjpcXHRcXHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcXG4gMzE3OlxcdFxcdCAgY291bnRlcnMgYXJlIGV4cG9zZWQgaW4gL3Byb2Mvdm1zdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3JcXG4gMzE4OlxcdFxcdCAga2VybmVsIGRldmVsb3BlcnMgdG8gZXZhbHVhdGUgZWZmZWN0aXZlbmVzcyBvZiBwZXItdm1hIGxvY2tzIGFuZCB0b1xcbiAzMTk6XFx0XFx0ICBpZGVudGlmeSBwYXRob2xvZ2ljYWwgY2FzZXMuIENvdW50aW5nIHRoZXNlIGV2ZW50cyBpbnRyb2R1Y2VzIGEgc21hbGxcXG4gMzIwOlxcdFxcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuIDMyMzpcXHRcXG4gMzI0OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDMyNTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbiAzMjY6XFx0XFx0ZGVmYXVsdCBuXFxuIDMyNzpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAzMjg6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDMyOTpcXHRcXHRkZXBlbmRzIG9uICFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVcXG4gMzMwOlxcdFxcdHNlbGVjdCBDT0RFX1RBR0dJTkdcXG4gMzMxOlxcdFxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbiAzMzI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbiAzMzM6XFx0XFx0aGVscFxcbiAzMzQ6XFx0XFx0ICBUcmFjayBhbGxvY2F0aW9uIHNvdXJjZSBjb2RlIGFuZCByZWNvcmQgdG90YWwgYWxsb2NhdGlvbiBzaXplXFxuIDMzNTpcXHRcXHQgIGluaXRpYXRlZCBhdCB0aGF0IGNvZGUgbG9jYXRpb24uIFRoZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdHJhY2tcXG4gMzM2OlxcdFxcdCAgbWVtb3J5IGxlYWtzIHdpdGggYSBsb3cgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBpbXBhY3QuXFxuIDMzNzpcXHRcXG4gMzM4OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbiAzMzk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4gMzQyOlxcdFxcbiAzNDM6XFx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG4gMzQ0OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MTYuNTQ5NTAzMzExWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzg0MzczNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIFN5c2NhbGwgVmVyaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBJJ20gbG9va2luZyBhdCBlbmFibGluZyBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBjbGVhcjogYE1NVWAsIGBQUk9DX0ZTYCwgYW5kIGltcG9ydGFudGx5LCBpdCBuZWVkcyB0byBiZSAqbm90KiBgREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIHdoZW4gZW5hYmxlZCwgaXQgcHVsbHMgaW4gYENPREVfVEFHR0lOR2AsIGBQQUdFX0VYVEVOU0lPTmAsIGFuZCBgU0xBQl9PQkpfRVhUYC4gU28sIEkgdGhpbmsgd2Ugc2hvdWxkIGVuYWJsZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBkaXJlY3QgY29uZmlndXJhdGlvbiBpdGVtcy5cblxuQWgsIGdvb2QhIGBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVGAgaXMgYGRlZmF1bHQgeWAgYXMgbG9uZyBhcyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgc2V0LiBTbywganVzdCBzZXR0aW5nIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBzaG91bGQgYmUgZW5vdWdoLiBHcmVhdC5cblxuTm93LCBhIHF1aWNrIHZlcmlmaWNhdGlvbiBvbiB0aGUgc3lzY2FsbHMuIExldCdzIG1ha2Ugc3VyZSB0aGUgbmFtZXMgYXJlIHJpZ2h0LiBJIG5lZWQgdG8gY29uZmlybSBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIGFyZSB0aGUgY29ycmVjdCBuYW1lcy4gVGhleSBhcmUgZGVmaW5lZCB3aXRoIGBTWVNDQUxMX0RFRklORTNgLCBhbmQgdGhleSBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSBgX194NjRfc3lzX2luaXRfbW9kdWxlYCBvciBgc3lzX2luaXRfbW9kdWxlYCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gU3l6a2FsbGVyIHVzZXMgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAuIFNvLCBmb3IgYEZvY3VzU3ltYm9sc2AsIHdlJ2xsIHByb3ZpZGUgYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5XYWl0IGEgc2Vjb25kLCBob2xkIG9uLi4uIGBsb2FkX21vZHVsZWAuLi4gSXQncyB0aGUgbWFpbiBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMuIEl0J3MgYSBodWdlIGZ1bmN0aW9uLCBhIGtleSBwaWVjZSBvZiB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGNoZWNrIGlmIGBsb2FkX21vZHVsZWAgaXMgaW5saW5lZCBiZWNhdXNlIHRoYXQgd291bGQgaW1wYWN0IHRoZSBzeW1ib2wgdmlzaWJpbGl0eSBhbmQgaG93IGl0J3MgaGFuZGxlZC4gVGhhdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDIxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MjIuODg3OTQ0MDU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc4NDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2FkX21vZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvbW9kdWxlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMTEtXFxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjEyOnZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLFxcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xMy1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg9NjI9c3RydWN0IGxvYWRfaW5mbyB7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTYzLVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjY0OlxcdC8qIHBvaW50ZXIgdG8gbW9kdWxlIGluIHRlbXBvcmFyeSBjb3B5LCBmcmVlZCBhdCBlbmQgb2YgbG9hZF9tb2R1bGUoKSAqL1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC02NS1cXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg9MzQyPXN0YXRpYyBpbmxpbmUgaW50IG1vZHVsZV9zaWdfY2hlY2soc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM0OC0jaWZkZWYgQ09ORklHX0RFQlVHX0tNRU1MRUFLXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM0OTp2b2lkIGttZW1sZWFrX2xvYWRfbW9kdWxlKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM1MC0jZWxzZSAvKiAhQ09ORklHX0RFQlVHX0tNRU1MRUFLICovXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM1MTpzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLFxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zNTItXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykgeyB9XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xNDE3PXN0YXRpYyB2b2lkIGZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE0MjAtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTQyMTpcXHRjb2RldGFnX3VubG9hZF9tb2R1bGUobW9kKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNDIyLVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDA0LVxcdG1vZCA9ICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9tYWluLmM6MzAwNTpcXHRrbWVtbGVha19sb2FkX21vZHVsZShtb2QsIGluZm8pO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMwMDYtXFx0Y29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoaW5mby1cXHUwMDNlbW9kLCBtb2QpO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MzQwNz1zdGF0aWMgaW50IGVhcmx5X21vZF9jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNDQyLSAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM0NDM6c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzQ0NC1cXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzU5MS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzozNTkyOlxcdGlmIChjb2RldGFnX2xvYWRfbW9kdWxlKG1vZCkpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzU5My1cXHRcXHRnb3RvIHN5c2ZzX2NsZWFudXA7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zNjU1PVNZU0NBTExfREVGSU5FMyhpbml0X21vZHVsZSwgdm9pZCBfX3VzZXIgKiwgdW1vZCxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM2NzQtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MzY3NTpcXHRyZXR1cm4gbG9hZF9tb2R1bGUoXFx1MDAyNmluZm8sIHVhcmdzLCAwKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjc2LX1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM3NjI9c3RhdGljIGludCBpbml0X21vZHVsZV9mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICogdWFyZ3MsIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM3OTctXFxua2VybmVsL21vZHVsZS9tYWluLmM6Mzc5ODpcXHRyZXR1cm4gbG9hZF9tb2R1bGUoXFx1MDAyNmluZm8sIHVhcmdzLCBmbGFncyk7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMzc5OS19XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM9MTAwPXN0YXRpYyBMSVNUX0hFQUQoZHVwX2ZhaWxlZF9tb2R1bGVzKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0xODMtICogICAgY2FsbCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIGl0Llxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzoxODQ6ICogICogZmFpbGVkX2xvYWRfbW9kdWxlczogaG93IG1hbnkgbW9kdWxlcyBmYWlsZWQgb25jZSB3ZSd2ZSBhbGxvY2F0ZWQgb3VyXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4NS0gKiAgICBwcml2YXRlIHNwYWNlIGZvciBvdXIgbW9kdWxlIHVzaW5nIGxheW91dF9hbmRfYWxsb2NhdGUoKS4gVGhlc2UgZmFpbHVyZXNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yMDU9c3RhdGljIGF0b21pY190IGZhaWxlZF9iZWNvbWluZztcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MjA2OnN0YXRpYyBhdG9taWNfdCBmYWlsZWRfbG9hZF9tb2R1bGVzO1xcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yMDctXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM9MjIwPXZvaWQgbW9kX3N0YXRfYnVtcF9pbnZhbGlkKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yMjItXFx0YXRvbWljX2xvbmdfYWRkKGluZm8tXFx1MDAzZWxlbiAqIDIsIFxcdTAwMjZpbnZhbGlkX21vZF9ieXRlcyk7XFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjIyMzpcXHRhdG9taWNfaW5jKFxcdTAwMjZmYWlsZWRfbG9hZF9tb2R1bGVzKTtcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjI0LSNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfREVDT01QUkVTUylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yNzM9c3RhdGljIHNzaXplX3QgcmVhZF9maWxlX21vZF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTI4Ny1cXHRmYmVjb21pbmcgPSBhdG9taWNfcmVhZChcXHUwMDI2ZmFpbGVkX2JlY29taW5nKTtcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6Mjg4OlxcdGZsb2FkcyA9IGF0b21pY19yZWFkKFxcdTAwMjZmYWlsZWRfbG9hZF9tb2R1bGVzKTtcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjg5LVxcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jPTQxMT1zdGF0aWMgaW50IF9faW5pdCBtb2R1bGVfc3RhdHNfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQyMy1cXHRtb2RfZGVidWdfYWRkX2F0b21pYyhmYWlsZWRfYmVjb21pbmcpO1xcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzo0MjQ6XFx0bW9kX2RlYnVnX2FkZF9hdG9taWMoZmFpbGVkX2xvYWRfbW9kdWxlcyk7XFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQyNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MjIuOTY4NzM2NDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY1ODA4OTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTW9kdWxlIExvYWRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gVGhlIGNvZGUncyBpbnRlcmVzdGluZyBiZWNhdXNlIGBsb2FkX21vZHVsZWAgaXMgc3RhdGljIGJ1dCBlbm9ybW91cy4gVGhlIHByb21wdCBleHBsaWNpdGx5IGZhdm9ycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNpbmNlIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAgYXJlIHRoZSB0cnVlIGVudHJ5IHBvaW50cywgYW5kIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZCwgSSBzaG91bGQgYmUgdXNpbmcgdGhlbS4gV2FpdCwgaG9sZCBvbiwgYHN5c19pbml0X21vZHVsZWAgaXMgYSBtYWNybywgc28gaXQgY291bGQgYmUgYF9feDY0X3N5c19pbml0X21vZHVsZWAgb3IgYHN5c19pbml0X21vZHVsZWAuIEl0IHNvdW5kcyBsaWtlIHN5emthbGxlciBnZW5lcmFsbHkgdW5kZXJzdGFuZHMgYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCwgc28gdGhhdCBzaG91bGQgYmUgZmluZS4gSSdsbCBzdGljayB3aXRoIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYW5kIGByZWxlYXNlX21vZHVsZV90YWdzYC4gVGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHNvIEknbSBub3QgZGlyZWN0bHkgdGFyZ2V0aW5nIHRoZW0sIGJ1dCB0aGV5J3JlIGltcG9ydGFudC4gVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGNsZWFybHkgcmVsZXZhbnQgaGVyZS5cblxuSXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZz8gVGhlIG9idmlvdXMgcmVxdWlyZW1lbnQgaXMgYE1PRFVMRVNgLCBidXQgdGhhdCdzIHR5cGljYWxseSBlbmFibGVkIGluIG1vc3QgZnV6emluZyBzZXR1cHMsIHNvIEkgd29uJ3Qgd29ycnkgYWJvdXQgaXQuIEkgKndpbGwqIGJlIGluY2x1ZGluZyBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIHRob3VnaC5cblxuU28sIGhlcmUncyBteSBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSDigJMgdGhpcyBpcyBhIGNvcmUgbW9kdWxlIGxvYWRlciBjaGFuZ2UuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYHN5c19pbml0X21vZHVsZWAsIGBzeXNfZmluaXRfbW9kdWxlYCDigJMgdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuXG4qICAgKipFbmFibGVDb25maWdzOioqIGBNRU1fQUxMT0NfUFJPRklMSU5HYCDigJMgdGhpcyBlbmFibGVzIHRoZSByZWxldmFudCBjb2RlIHBhdGguXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb2R1bGUgbG9hZGluZyBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3Mgd2hlbiB0aGV5IGNhbm5vdCBmaXQgaW4gcGFnZSBmbGFnIGJpdHMuIEl0IGFkZHMgYSByZXRyeSBsb29wIHRvIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCB3aGVuIGBtb3ZlX21vZHVsZWAgcmV0dXJucyBgLUVBR0FJTmAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtb2R1bGUgbG9hZGVyLCByZWFjaGFibGUgdmlhIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIHN5c2NhbGxzIHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE4MCwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MzEuNjI2ODI5ODI1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MTY1MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX2luaXRfbW9kdWxlXCIsXG4gICAgXCJzeXNfZmluaXRfbW9kdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vZHVsZSBsb2FkaW5nIGxvZ2ljIHRvIGhhbmRsZSBhIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgY2Fubm90IGZpdCBpbiBwYWdlIGZsYWcgYml0cy4gSXQgYWRkcyBhIHJldHJ5IGxvb3AgaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgIHdoZW4gYG1vdmVfbW9kdWxlYCByZXR1cm5zIGAtRUFHQUlOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1vZHVsZSBsb2FkZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIHN5c2NhbGxzIHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfaW5pdF9tb2R1bGVcIixcbiAgICBcInN5c19maW5pdF9tb2R1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW9kdWxlIGxvYWRpbmcgbG9naWMgdG8gaGFuZGxlIGEgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBjYW5ub3QgZml0IGluIHBhZ2UgZmxhZyBiaXRzLiBJdCBhZGRzIGEgcmV0cnkgbG9vcCBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgd2hlbiBgbW92ZV9tb2R1bGVgIHJldHVybnMgYC1FQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbW9kdWxlIGxvYWRlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgc3lzY2FsbHMgd2hlbiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjExOjMxLjc2MzAwMzAxMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNjY2MTQ5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTozMS43NjM1MjYyOTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzIyNjYwODUwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBleGNlZWQgdGhlIGF2YWlsYWJsZSBwYWdlIGZsYWcgYml0cy4gSXQgaW50cm9kdWNlcyBhIHJldHJ5IG1lY2hhbmlzbSBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYCBieSByZXR1cm5pbmcgYC1FQUdBSU5gIGZyb20gYG1vdmVfbW9kdWxlKClgICh2aWEgYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWApLiBUaGUgc3RhdGUgaXMgc2F2ZWQgaW4gYSBsb2NhbCBzdGFjayBhcnJheSBgZnJvYl9zaXplYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB1c2luZyB0aGUgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgbWFjcm8gKGl0ZXJhdGluZyBvdmVyIGFsbCB2YWxpZCBtb2R1bGUgbWVtb3J5IHR5cGVzKS4gVGhlIHBhdGNoIGFsc28gbW92ZXMgYHJlbGVhc2VfbW9kdWxlX3RhZ3MoKWAgZWFybGllciBpbiB0aGUgZmlsZSB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSBlcnJvciBwYXRoLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZjIwNDg0NzljNWM1YWUxODRjZjRiMThjMzI4Yzg4ZjAyNzQ4ZjVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDY6MDk6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCA0NmRkOGQyNWE2MDU4Li5lZDI2ZjE2N2JlODRkIDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbisrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMjk0NCw2ICsyOTQ0LDcgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBtb2R1bGUgKm1vZDtcbiBcdGludCBlcnI7XG4rXHR1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107XG4gXG4gXHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG4gXHRlcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsXG5AQCAtMjk2NiwxOCArMjk2NywzOCBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4gXHQgKi9cbiBcdG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoaW5mby1cdTAwM2VoZHIsIGluZm8tXHUwMDNlc2VjaGRycywgaW5mby1cdTAwM2VzZWNzdHJpbmdzKTtcbiBcbitcdC8qXG4rXHQgKiBTYXZlIHRoZSBzaXplcyByZXNlcnZlZCBieSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKCkgc28gdGhleSBjYW5cbitcdCAqIGJlIHJlc3RvcmVkIGlmIHdlIHJldHJ5IGJlbG93LlxuK1x0ICovXG4rXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcbitcdFx0ZnJvYl9zaXplW3R5cGVdID0gaW5mby1cdTAwM2Vtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemU7XG4rXG4gXHQvKlxuIFx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbiBcdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55XG4gXHQgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy5cbiBcdCAqL1xuK3JldHJ5OlxuIFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuIFxuIFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4gXHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdFx0LypcbitcdFx0ICogLUVBR0FJTiBtZWFucyBwcm9maWxpbmcgd2FzIGRpc2FibGVkIGJ1dCB0aGUgbW9kdWxlXG4rXHRcdCAqIGNhbiBzdGlsbCBsb2FkIHdpdGhvdXQgaXQuIFJlc2V0IHN0YXRlIGFuZCByZXRyeS5cbitcdFx0ICovXG4rXHRcdHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKGluZm8sIGZsYWdzKTtcbitcdFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG4rXHRcdFx0aW5mby1cdTAwM2Vtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUgPSBmcm9iX3NpemVbdHlwZV07XG4rXHRcdGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnN5bV0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuK1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5zdHJdLnNoX2ZsYWdzIFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcbitcdFx0Z290byByZXRyeTtcbitcdH1cbiBcbiBcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xuIFx0bW9kID0gKHZvaWQgKilpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggYjMzNDEwMzEwNDc3OS4uMTEyYTAxNGQ0Yjg5MCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTgzNSw2ICs4MzUsNTIgQEAgc3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4re1xuK1x0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuK1x0c3RydWN0IG1vZHVsZSAqdmFsO1xuK1xuK1x0bWFzX2xvY2soXHUwMDI2bWFzKTtcbitcdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4rXHRcdGlmICh2YWwgPT0gbW9kKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIXVzZWQpXG4rXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuK1xuK1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XG4rXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcbitcdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbitcdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuK1xuK1x0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcbitcdFx0XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XG4rXG4rXHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbitcdFx0XHRwcl9pbmZvKFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cIixcbitcdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4rXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHR1c2VkID0gZmFsc2U7XG4rXHR9XG4rcmVsZWFzZV9hcmVhOlxuK1x0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuK1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbitcdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4rXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuK291dDpcbitcdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkwNCwxMCArOTUwLDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRpbnQgZ3Jvd19yZXM7XG4gXG4gXHRcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xuLVx0XHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbitcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbi1cdFx0XHRcdG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cHJfd2Fybl9vbmNlKFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCIsXG4rXHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiBcdFx0fVxuIFxuIFx0XHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XG5AQCAtOTIyLDUyICs5NzAsNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgb2Zmc2V0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcbi17XG4tXHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbi1cdHN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZztcbi1cdHN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7XG4tXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4tXG4tXHRtYXNfbG9jayhcdTAwMjZtYXMpO1xuLVx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbi1cdFx0aWYgKHZhbCA9PSBtb2QpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqL1xuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGlmICghdXNlZClcbi1cdFx0Z290byByZWxlYXNlX2FyZWE7XG4tXG4tXHRzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmluZGV4KTtcbi1cdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmxhc3QpO1xuLVx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xuLVx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4tXG4tXHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjPSBlbmRfdGFnOyB0YWcrKykge1xuLVx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcbi1cbi1cdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycylcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xuLVx0XHRcdHByX2luZm8oXCIlczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwiLFxuLVx0XHRcdFx0dGFnLVx1MDAzZWN0LmZpbGVuYW1lLCB0YWctXHUwMDNlY3QubGluZW5vLCB0YWctXHUwMDNlY3QubW9kbmFtZSxcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHVzZWQgPSBmYWxzZTtcbi1cdH1cbi1yZWxlYXNlX2FyZWE6XG4tXHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4tXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcdTAwMjZtYXMsIDApO1xuLVx0aWYgKHZhbCA9PSBcdTAwMjZwcmVwZW5kX21vZClcbi1cdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4tb3V0OlxuLVx0bWFzX3VubG9jayhcdTAwMjZtYXMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbiB7XG4gXHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MzEuNzYzNTI2OTgxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NjI4NjE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTW9kdWxlIExvYWRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGhvdyBtb2R1bGVzIGFyZSBsb2FkZWQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYC1FQUdBSU5gIGVycm9ycyB0aGF0IGNhbiBwb3AgdXAgZHVyaW5nIHRhZyBhbGxvY2F0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWAgY2FuIGZhaWwgYmVjYXVzZSB3ZSdyZSB0cnlpbmcgdG8gY3JhbSB0b28gbWFueSB0YWdzIGludG8gdGhlIHBhZ2UgZmxhZyBiaXRzLiBXaGVuIHRoYXQgaGFwcGVucywgdGhlIHBhdGNoIGRpc2FibGVzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZywgcmVsZWFzZXMgdGhlIHRhZ3MsIGFuZCBiYWlscyBvdXQgd2l0aCBgLUVBR0FJTmAuIGBsYXlvdXRfYW5kX2FsbG9jYXRlKClgIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgdGhlbiBjYXRjaGVzIHRoZSBlcnJvciwgcmVzZXRzIHRoaW5ncywgYW5kIHRyaWVzIGFnYWluIHdpdGhvdXQgdXNpbmcgdGFncy4gVGhhdCdzIHRoZSBiYXNpYyBmbG93LlxuXG5CdXQgbm93LCBJIHNlZSBzb21ldGhpbmcgbmV3OiB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGBmcm9iX3NpemVgIGFycmF5IHdpdGhpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYC4gSXQncyBhbiBgdW5zaWduZWQgbG9uZ2AgYXJyYXkgb2YgYE1PRF9NRU1fTlVNX1RZUEVTYCAod2hpY2ggSSBrbm93IGlzIDcgZnJvbSBwYXN0IGV4cGVyaWVuY2UpIGVsZW1lbnRzLiBUaGUgY29kZSBpcyBzYXZpbmcgYGluZm8tXHUwMDNlbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplYCBpbnRvIGBmcm9iX3NpemVgICpiZWZvcmUqIGBsYXlvdXRfc2VjdGlvbnMoKWAgaXMgY2FsbGVkLiBUaGVuLCBpZiBgbW92ZV9tb2R1bGUoKWAgcmV0dXJucyBgLUVBR0FJTmAsIGl0IHJlc3RvcmVzIGBpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZWAgZnJvbSBgZnJvYl9zaXplW3R5cGVdYCwgY2xlYXJzIGBTSEZfQUxMT0NgIGZyb20gc29tZSBzZWN0aW9ucywgYW5kIGp1bXBzIHRvIGByZXRyeWAuIE1ha2VzIHNlbnNlLCB0aGUgc2l6ZSBvZiBtZW1vcnkgcmVnaW9ucyBhcmUgc2F2ZWQgcHJpb3IgdG8gcG90ZW50aWFsIGZhaWx1cmUsIHRoZW4gcmVzdG9yZWQgYWZ0ZXIgZmFpbHVyZSB0byByZXN0YXJ0IGxheW91dC5cblxuVGhlIHJlZCBmbGFnIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhpcyBgZnJvYl9zaXplYCBpbml0aWFsaXplZCBjb3JyZWN0bHk/IEl0IGlzIGZpbGxlZCBpbiBhIGxvb3A6XG5cbmBgYGNcblx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG5cdFx0ZnJvYl9zaXplW3R5cGVdID0gaW5mby1cdTAwM2Vtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemU7XG5gYGBcblxuSSBoYXZlIHRvIGJlIGNhcmVmdWwgaGVyZS4uLiBUaGUgbG9vcCBpdGVyYXRlcyBvdmVyIGFsbCBcInZhbGlkXCIgbW9kdWxlIG1lbW9yeSB0eXBlcy4gV2hhdCBjb25zdGl0dXRlcyBcInZhbGlkXCIgaW4gdGhpcyBjb250ZXh0PyBJZiBzb21lIG9mIHRob3NlIDcgZWxlbWVudHMgYXJlbid0IGluaXRpYWxpemVkLCB3ZSBjb3VsZCBiZSByZWFkaW5nIGdhcmJhZ2Ugd2hlbiByZXN0b3JpbmcgdGhlIHNpemVzISBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgbWFjcm8gZGVmaW5pdGlvbiB0byBtYWtlIGFic29sdXRlbHkgc3VyZS4gQW55IHZ1bG5lcmFiaWxpdHkgaGVyZSB3b3VsZCBjcmVhdGUgYSBzZXJpb3VzIHNlY3VyaXR5IHJpc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTozOS4zMjYzOTMxMloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MTk5MDcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGZvcl9lYWNoX21vZF9tZW1fdHlwZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21vZHVsZS5oPTMxOD1lbnVtIG1vZF9tZW1fdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM0Ny1cXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oOjM0ODojZGVmaW5lIGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM0OS1cXHRmb3IgKGVudW0gbW9kX21lbV90eXBlICh0eXBlKSA9IDA7XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTo0MS44NjgzODg0ODVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4OTU2MDI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgZm9yX2VhY2hfbW9kX21lbV90eXBlYCwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZSBvbiB0aGlzIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIGZ1bmN0aW9uIG9yIG1hY3JvIG9yIHdoYXRldmVyIGl0IGlzLiBJIGNhbid0IHJlYWxseSBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSBvciBob3cgSSBtaWdodCBsZXZlcmFnZSBpdCBlZmZlY3RpdmVseSB3aXRob3V0IGEgcHJvcGVyIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwYXJhbWV0ZXJzLCBpdHMgcmV0dXJuIHR5cGUgKGlmIGFueSksIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGl0ICpkb2VzKiB1bmRlciB0aGUgaG9vZC4gV2hhdCBpcyBpdCBpdGVyYXRpbmcgb3Zlcj8gV2hhdCBraW5kIG9mIG1lbW9yeSB0eXBlcyBpcyBpdCBoYW5kbGluZz8gSXMgaXQgcmVsYXRlZCB0byBtb2R1bGVzIG9yIHNvbWUgc29ydCBvZiB1bmRlcmx5aW5nIG1lbW9yeSBtb2RlbD8gVGhpcyBpcyBwcm9iYWJseSBhIGxvdy1sZXZlbCByb3V0aW5lLCBzbyB0aGUgZGV0YWlscyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIGEgcHJvcGVyIHVuZGVyc3RhbmRpbmcuIEkgbmVlZCB0aGUgZnVsbCBjb250ZXh0IHRvIG1ha2UgYW55IHVzZWZ1bCBqdWRnbWVudHMgYWJvdXQgaXRzIHVzZWZ1bG5lc3MgYW5kIGFwcGxpY2F0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aGF0IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTo0NS4zNTc5NTIxNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MzExODMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb3JfZWFjaF9tb2RfbWVtX3R5cGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC0zMzYtICAtICdmb3JfZWFjaF9tbGVfc3ViZWxlbWVudCdcXG4uY2xhbmctZm9ybWF0OjMzNzogIC0gJ2Zvcl9lYWNoX21vZF9tZW1fdHlwZSdcXG4uY2xhbmctZm9ybWF0LTMzOC0gIC0gJ2Zvcl9lYWNoX21vbl9jYXBhYmxlX3JkdF9yZXNvdXJjZSdcXG4tLVxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmg9MzE4PWVudW0gbW9kX21lbV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmgtMzQ3LVxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MzQ4OiNkZWZpbmUgZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmgtMzQ5LVxcdGZvciAoZW51bSBtb2RfbWVtX3R5cGUgKHR5cGUpID0gMDtcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM1Mi0jZGVmaW5lIGZvcl9jbGFzc19tb2RfbWVtX3R5cGUodHlwZSwgY2xhc3MpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MzUzOlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM1NC1cXHRcXHRpZiAobW9kX21lbV90eXBlX2lzXyMjY2xhc3ModHlwZSkpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmM9MTI9dm9pZCBrbWVtbGVha19sb2FkX21vZHVsZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QsXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMTUtXFx0Lyogb25seSBzY2FuIHdyaXRhYmxlLCBub24tZXhlY3V0YWJsZSBzZWN0aW9ucyAqL1xcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxNjpcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xNy1cXHRcXHRpZiAodHlwZSAhPSBNT0RfREFUQSBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IE1PRF9JTklUX0RBVEEgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTExOT1zdGF0aWMgdm9pZCBtb2RfdXBkYXRlX2JvdW5kcyhzdHJ1Y3QgbW9kdWxlICptb2QpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMTIwLXtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxMjE6XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xMjItXFx0XFx0c3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBcXHUwMDI2bW9kLVxcdTAwM2VtZW1bdHlwZV07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xMzk3PXN0YXRpYyB2b2lkIGZyZWVfbW9kX21lbShzdHJ1Y3QgbW9kdWxlICptb2QpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMTM5OC17XFxua2VybmVsL21vZHVsZS9tYWluLmM6MTM5OTpcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE0MDAtXFx0XFx0c3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBcXHUwMDI2bW9kLVxcdTAwM2VtZW1bdHlwZV07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNzg4PXN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjc5My1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNzk0OlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjc5NS1cXHRcXHRpZiAoIW1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemUpIHtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI4OTI9c3RhdGljIHZvaWQgZmx1c2hfbW9kdWxlX2ljYWNoZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODk4LVxcdCAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4OTk6XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTAwLVxcdFxcdGNvbnN0IHN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtID0gXFx1MDAyNm1vZC1cXHUwMDNlbWVtW3R5cGVdO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTczLVxcdCAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5NzQ6XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjk3NS1cXHRcXHRmcm9iX3NpemVbdHlwZV0gPSBpbmZvLVxcdTAwM2Vtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjk5NS1cXHRcXHRyZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvLCBmbGFncyk7XFxua2VybmVsL21vZHVsZS9tYWluLmM6Mjk5NjpcXHRcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTk3LVxcdFxcdFxcdGluZm8tXFx1MDAzZW1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemUgPSBmcm9iX3NpemVbdHlwZV07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDk4PXN0YXRpYyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzEwNC1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMTA1OlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMzEwNi1cXHRcXHRjb25zdCBzdHJ1Y3QgbW9kdWxlX21lbW9yeSAqbW9kX21lbSA9IFxcdTAwMjZtb2QtXFx1MDAzZW1lbVt0eXBlXTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvcHJvY2ZzLmM9NjU9c3RhdGljIHVuc2lnbmVkIGludCBtb2R1bGVfdG90YWxfc2l6ZShzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jLTY4LVxcbmtlcm5lbC9tb2R1bGUvcHJvY2ZzLmM6Njk6XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXFxua2VybmVsL21vZHVsZS9wcm9jZnMuYy03MC1cXHRcXHRzaXplICs9IG1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemU7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmM9Nzg9dm9pZCBtb2RfdHJlZV9pbnNlcnQoc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYy03OS17XFxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jOjgwOlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jLTgxLVxcdFxcdG1vZC1cXHUwMDNlbWVtW3R5cGVdLm10bi5tb2QgPSBtb2Q7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmM9OTU9dm9pZCBtb2RfdHJlZV9yZW1vdmUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYy05Ni17XFxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jOjk3OlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jLTk4LVxcdFxcdGlmIChtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTo0Ny45NTEwNzcwNjlaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NDc3ODE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIG1vZHVsZSBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgbW9kdWxlLmhgIGluIHRoZSBMaW51eCBrZXJuZWwgaGVhZGVycy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHRvIGxpbmVzIDM0OCB0aHJvdWdoIDM1MSwgd2hpY2ggc2hvdWxkIGdldCBtZSBzdGFydGVkIG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtb2R1bGUgbG9hZCBhbmQgdW5sb2FkIHJvdXRpbmVzLiBJJ20gaW50ZXJlc3RlZCBpbiB0aG9zZSBsaW5lcywgYmVjYXVzZSBJIGtub3cgdGhleSdyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIG1vZHVsZSBsaWZlY3ljbGUgZnJvbSB0aGUgZGV2ZWxvcGVyJ3MgcGVyc3BlY3RpdmUuIEkgZXhwZWN0IHRvIHNlZSB0aGUga2V5IHN0cnVjdHVyZXMgYW5kIG1hY3JvcyBpbnZvbHZlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTo1MS4xNDU4NTg4OTVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbW9kdWxlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcdChtb2RfbWVtX3R5cGVfaXNfY29yZSh0eXBlKSBcXHUwMDI2XFx1MDAyNlxcdFxcXFxcXG4gMzQ2OlxcdFxcdCBtb2RfbWVtX3R5cGVfaXNfZGF0YSh0eXBlKSlcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0I2RlZmluZSBmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcXHRcXHRcXHRcXFxcXFxuIDM0OTpcXHRcXHRmb3IgKGVudW0gbW9kX21lbV90eXBlICh0eXBlKSA9IDA7XFx0XFx0XFxcXFxcbiAzNTA6XFx0XFx0ICAgICAodHlwZSkgXFx1MDAzYyBNT0RfTUVNX05VTV9UWVBFUzsgKHR5cGUpKyspXFxuIDM1MTpcXHRcXG4gMzUyOlxcdCNkZWZpbmUgZm9yX2NsYXNzX21vZF9tZW1fdHlwZSh0eXBlLCBjbGFzcylcXHRcXHRcXFxcXFxuIDM1MzpcXHRcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcXHRcXHRcXHRcXFxcXFxuIDM1NDpcXHRcXHRcXHRpZiAobW9kX21lbV90eXBlX2lzXyMjY2xhc3ModHlwZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjExOjUxLjE0NjAyMTk5NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg4MzU1MDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCByZWdhcmRpbmcgdGhlIGluaXRpYWwgY29uY2VybiBhYm91dCBgZnJvYl9zaXplYCwgaXQncyBjbGVhciBhZnRlciBleGFtaW5pbmcgdGhlIGNvZGUgdGhhdCBpdCdzIGEgbG9jYWwsIHN0YWNrLWFsbG9jYXRlZCBhcnJheS4gVGhlIGxvb3AgdXNpbmcgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgKmRvZXMqIGluaXRpYWxpemUgYWxsIGVsZW1lbnRzIG9mIGBmcm9iX3NpemVgIGJlZm9yZSBpdCdzIHVzZWQuIFRoZXJlZm9yZSwgdGhlIHJlc3RvcmF0aW9uIG9mIGBpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZWAgdXNpbmcgYGZyb2Jfc2l6ZWAgaXMgcGVyZmVjdGx5IHNhZmUg4oCTIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGVyZS4gV2UncmUgZ29vZC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgYG1tL2FsbG9jX3RhZy5jYCBwYXRjaC4gVGhlIHByaW1hcnkgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBvbiBgcmVsZWFzZV9tb2R1bGVfdGFnc2AgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBgbW9kdWxlX3RhZ3NgIHN0cnVjdHVyZS4gVGhlIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggbW9kdWxlIHRhZ3MgdG8gY2xlYW4gdXAgdW51c2VkIGNvdW50ZXJzLCBhbmQgaXQgcmVhZHMgYHRhZy1cdTAwM2Vjb3VudGVyc2AgaW4gdGhlIHByb2Nlc3MsIHByaW50aW5nIGluZm9ybWF0aW9uIGlmIHRob3NlIGNvdW50ZXJzIGhhdmVuJ3QgYmVlbiBjbGVhbmVkIHVwLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRvIGNvbmZpcm0gdGhlcmUncyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkEgcXVpY2sgcmV2aWV3IG9mIHRoZSBkaWZmIHJldmVhbHMgdGhhdCBgcmVsZWFzZV9tb2R1bGVfdGFnc2Agd2FzIG1vdmVkIHVwIGluIHRoZSBmaWxlLiBUaGlzIG1vdmUgbWFrZXMgaXQgZWFzaWVyIHRvIGNhbGwgaXQgZnJvbSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuIEluIGByZXNlcnZlX21vZHVsZV90YWdzYCwgdGhlIHBhdGNoIGluY2x1ZGVzIGVycm9yIGhhbmRsaW5nLiBJZiB0aGUgbnVtYmVyIG9mIHRhZ3MgbmVlZGVkIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSBiaXRzLCB0aGUgY29kZSBub3cgY2FsbHMgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgICpiZWZvcmUqIHJldHVybmluZyBgLUVBR0FJTmAuIFRoaXMgZWZmZWN0aXZlbHkgcmV0cmllcyBtb2R1bGUgbG9hZGluZyB3aXRob3V0IGFsbG9jYXRpb24gb2YgcHJvZmlsaW5nIHRhZ3MuXG5cbkNyaXRpY2FsbHksIHRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgYWJvdXQgKmZhaWxpbmcqIGdyYWNlZnVsbHkgd2hlbiByZXNvdXJjZXMgYXJlIGNvbnN0cmFpbmVkLiBUaGlzIHBhdGNoIHByaW1hcmlseSByZXN0b3JlcyBtb2R1bGUgc2l6ZXMgYW5kIHJldHJpZXMgd2l0aG91dCBhbGxvY2F0aW5nIHRhZ3MsIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBnaXZlbiB0aGUgbG9naWMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGFkZHJlc3NlcyBtb2R1bGUgbG9hZGluZyByZXRyeSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGV4Y2VlZCBsaW1pdHMgYW5kIGRvZXMgbm90IGludm9sdmUgdXNlci1zcGFjZSBjb3BpZXMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDksIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTI6MDQuMDI5NTc1OTI4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgZXhjZWVkIHRoZSBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIEl0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgYnkgcmV0dXJuaW5nIGAtRUFHQUlOYCBmcm9tIGBtb3ZlX21vZHVsZSgpYCAodmlhIGByZXNlcnZlX21vZHVsZV90YWdzKClgKS4gVGhlIHN0YXRlIGlzIHNhdmVkIGluIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGZyb2Jfc2l6ZWAgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIG1hY3JvIChpdGVyYXRpbmcgb3ZlciBhbGwgdmFsaWQgbW9kdWxlIG1lbW9yeSB0eXBlcykuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIGByZWxlYXNlX21vZHVsZV90YWdzKClgIGVhcmxpZXIgaW4gdGhlIGZpbGUgdG8gYmUgY2FsbGVkIGR1cmluZyB0aGUgZXJyb3IgcGF0aC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGV4Y2VlZCB0aGUgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLiBJdCBpbnRyb2R1Y2VzIGEgcmV0cnkgbWVjaGFuaXNtIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlKClgIGJ5IHJldHVybmluZyBgLUVBR0FJTmAgZnJvbSBgbW92ZV9tb2R1bGUoKWAgKHZpYSBgcmVzZXJ2ZV9tb2R1bGVfdGFncygpYCkuIFRoZSBzdGF0ZSBpcyBzYXZlZCBpbiBhIGxvY2FsIHN0YWNrIGFycmF5IGBmcm9iX3NpemVgIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIHRoZSBgZm9yX2VhY2hfbW9kX21lbV90eXBlYCBtYWNybyAoaXRlcmF0aW5nIG92ZXIgYWxsIHZhbGlkIG1vZHVsZSBtZW1vcnkgdHlwZXMpLiBUaGUgcGF0Y2ggYWxzbyBtb3ZlcyBgcmVsZWFzZV9tb2R1bGVfdGFncygpYCBlYXJsaWVyIGluIHRoZSBmaWxlIHRvIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGVycm9yIHBhdGguIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9skjl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 05:53:50 +0000 UTC FinishedAt: 2026-08-12 06:12:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING" ], "series_id": "c1e16512-ce79-401e-a6fa-c2118a0032a3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sys_init_module", "sys_finit_module" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfaW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7c3lzX2Zpbml0X21vZHVsZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBleGNlZWQgdGhlIGF2YWlsYWJsZSBwYWdlIGZsYWcgYml0cy4gSXQgaW50cm9kdWNlcyBhIHJldHJ5IG1lY2hhbmlzbSBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYCBieSByZXR1cm5pbmcgYC1FQUdBSU5gIGZyb20gYG1vdmVfbW9kdWxlKClgICh2aWEgYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWApLiBUaGUgc3RhdGUgaXMgc2F2ZWQgaW4gYSBsb2NhbCBzdGFjayBhcnJheSBgZnJvYl9zaXplYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB1c2luZyB0aGUgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgbWFjcm8gKGl0ZXJhdGluZyBvdmVyIGFsbCB2YWxpZCBtb2R1bGUgbWVtb3J5IHR5cGVzKS4gVGhlIHBhdGNoIGFsc28gbW92ZXMgYHJlbGVhc2VfbW9kdWxlX3RhZ3MoKWAgZWFybGllciBpbiB0aGUgZmlsZSB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSBlcnJvciBwYXRoLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vZHVsZSBsb2FkaW5nIGxvZ2ljIHRvIGhhbmRsZSBhIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgY2Fubm90IGZpdCBpbiBwYWdlIGZsYWcgYml0cy4gSXQgYWRkcyBhIHJldHJ5IGxvb3AgaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgIHdoZW4gYG1vdmVfbW9kdWxlYCByZXR1cm5zIGAtRUFHQUlOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1vZHVsZSBsb2FkZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIHN5c2NhbGxzIHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWYyMDQ4NDc5YzVjNWFlMTg0Y2Y0YjE4YzMyOGM4OGYwMjc0OGY1ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA2OjA5OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmNcbmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLmVkMjZmMTY3YmU4NGQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbW9kdWxlL21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL21vZHVsZS9tYWluLmNcbkBAIC0yOTQ0LDYgJiM0MzsyOTQ0LDcgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBtb2R1bGUgKm1vZDtcbiBcdGludCBlcnI7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmcm9iX3NpemVbTU9EX01FTV9OVU1fVFlQRVNdO1xuIFxuIFx0LyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqL1xuIFx0ZXJyID0gbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLFxuQEAgLTI5NjYsMTggJiM0MzsyOTY3LDM4IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiBcdCAqL1xuIFx0bW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLCBpbmZvLVx1MDAzZXNlY3N0cmluZ3MpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogU2F2ZSB0aGUgc2l6ZXMgcmVzZXJ2ZWQgYnkgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucygpIHNvIHRoZXkgY2FuXG4mIzQzO1x0ICogYmUgcmVzdG9yZWQgaWYgd2UgcmV0cnkgYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG4mIzQzO1x0XHRmcm9iX3NpemVbdHlwZV0gPSBpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbiBcdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueVxuIFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXG4gXHQgKi9cbiYjNDM7cmV0cnk6XG4gXHRsYXlvdXRfc2VjdGlvbnMoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuIFx0bGF5b3V0X3N5bXRhYihpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4gXG4gXHQvKiBBbGxvY2F0ZSBhbmQgbW92ZSB0byB0aGUgZmluYWwgcGxhY2UgKi9cbiBcdGVyciA9IG1vdmVfbW9kdWxlKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIC1FQUdBSU4gbWVhbnMgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCBidXQgdGhlIG1vZHVsZVxuJiM0MztcdFx0ICogY2FuIHN0aWxsIGxvYWQgd2l0aG91dCBpdC4gUmVzZXQgc3RhdGUgYW5kIHJldHJ5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvLCBmbGFncyk7XG4mIzQzO1x0XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2Vtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUgPSBmcm9iX3NpemVbdHlwZV07XG4mIzQzO1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5zeW1dLnNoX2ZsYWdzIFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcbiYjNDM7XHRcdGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnN0cl0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuJiM0MztcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi9cbiBcdG1vZCA9ICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgubW9kXS5zaF9hZGRyO1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGIzMzQxMDMxMDQ3NzkuLjExMmEwMTRkNGI4OTAgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC04MzUsNiAmIzQzOzgzNSw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4mIzQzO3tcbiYjNDM7XHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4mIzQzO1x0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcbiYjNDM7XHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4mIzQzO1xuJiM0MztcdG1hc19sb2NrKFx1MDAyNm1hcyk7XG4mIzQzO1x0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbiYjNDM7XHRcdGlmICh2YWwgPT0gbW9kKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXVzZWQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfYXJlYTtcbiYjNDM7XG4mIzQzO1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpO1xuJiM0MztcdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTtcbiYjNDM7XHRpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyBcdTAwM2M9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbiYjNDM7XHRcdFx0cHJfaW5mbyhcJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHR0YWctXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cdTAwM2VjdC5saW5lbm8sIHRhZy1cdTAwM2VjdC5tb2RuYW1lLFxuJiM0MztcdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHVzZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO3JlbGVhc2VfYXJlYTpcbiYjNDM7XHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4mIzQzO1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbiYjNDM7XHRpZiAodmFsID09IFx1MDAyNnByZXBlbmRfbW9kKVxuJiM0MztcdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4mIzQzO291dDpcbiYjNDM7XHRtYXNfdW5sb2NrKFx1MDAyNm1hcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkwNCwxMCAmIzQzOzk1MCwxMiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdFx0aW50IGdyb3dfcmVzO1xuIFxuIFx0XHRtb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICYjNDM7IHNpemU7XG4tXHRcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xuJiM0MztcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuLVx0XHRcdFx0bW9kLVx1MDAzZW5hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTtcbiYjNDM7XHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4mIzQzO1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xuIFx0XHR9XG4gXG4gXHRcdGdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTtcbkBAIC05MjIsNTIgJiM0Mzs5NzAsNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG9mZnNldCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4te1xuLVx0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4tXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4tXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuLVx0c3RydWN0IG1vZHVsZSAqdmFsO1xuLVxuLVx0bWFzX2xvY2soXHUwMDI2bWFzKTtcbi1cdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4tXHRcdGlmICh2YWwgPT0gbW9kKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRpZiAoIXVzZWQpXG4tXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuLVxuLVx0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpO1xuLVx0ZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmxhc3QpO1xuLVx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xuLVx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4tXG4tXHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjPSBlbmRfdGFnOyB0YWcmIzQzOyYjNDM7KSB7XG4tXHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xuLVxuLVx0XHRcdGlmICghdGFnLVx1MDAzZWNvdW50ZXJzKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXG4tXHRcdFx0Y291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7XG4tXHRcdFx0cHJfaW5mbyhcJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwmIzM0Oyxcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4tXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuLVx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHR1c2VkID0gZmFsc2U7XG4tXHR9XG4tcmVsZWFzZV9hcmVhOlxuLVx0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuLVx0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbi1cdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4tXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuLW91dDpcbi1cdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbi19XG4tXG4gc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApXG4ge1xuIFx0LyogQWxsb2NhdGUgbW9kdWxlIGFsbG9jX3RhZyBwZXJjcHUgY291bnRlcnMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjowOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19pbml0X21vZHVsZSYjMzQ7LAogICAgJiMzNDtzeXNfZmluaXRfbW9kdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb2R1bGUgbG9hZGluZyBsb2dpYyB0byBoYW5kbGUgYSBjYXNlIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGNhbm5vdCBmaXQgaW4gcGFnZSBmbGFnIGJpdHMuIEl0IGFkZHMgYSByZXRyeSBsb29wIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCB3aGVuIGBtb3ZlX21vZHVsZWAgcmV0dXJucyBgLUVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtb2R1bGUgbG9hZGVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXNjYWxscyB3aGVuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDlmMjA0ODQ3OWM1YzVhZTE4NGNmNGIxOGMzMjhjODhmMDI3NDhmNWQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAwNjowOTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmMKaW5kZXggNDZkZDhkMjVhNjA1OC4uZWQyNmYxNjdiZTg0ZCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL21vZHVsZS9tYWluLmMKQEAgLTI5NDQsNiAmIzQzOzI5NDQsNyBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWludCBlcnI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZnJvYl9zaXplW01PRF9NRU1fTlVNX1RZUEVTXTsKIAogCS8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi8KIAllcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGluZm8tJmd0O2hkciwgaW5mby0mZ3Q7c2VjaGRycywKQEAgLTI5NjYsMTggJiM0MzsyOTY3LDM4IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncykKIAkgKi8KIAltb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tJmd0O2hkciwgaW5mby0mZ3Q7c2VjaGRycywgaW5mby0mZ3Q7c2Vjc3RyaW5ncyk7CiAKJiM0MzsJLyoKJiM0MzsJICogU2F2ZSB0aGUgc2l6ZXMgcmVzZXJ2ZWQgYnkgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucygpIHNvIHRoZXkgY2FuCiYjNDM7CSAqIGJlIHJlc3RvcmVkIGlmIHdlIHJldHJ5IGJlbG93LgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpCiYjNDM7CQlmcm9iX3NpemVbdHlwZV0gPSBpbmZvLSZndDttb2QtJmd0O21lbVt0eXBlXS5zaXplOwomIzQzOwogCS8qCiAJICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3cKIAkgKiB0aGlzIGlzIGRvbmUgZ2VuZXJpY2FsbHk7IHRoZXJlIGRvZXNuJiMzOTt0IGFwcGVhciB0byBiZSBhbnkKIAkgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy4KIAkgKi8KJiM0MztyZXRyeToKIAlsYXlvdXRfc2VjdGlvbnMoaW5mby0mZ3Q7bW9kLCBpbmZvKTsKIAlsYXlvdXRfc3ltdGFiKGluZm8tJmd0O21vZCwgaW5mbyk7CiAKIAkvKiBBbGxvY2F0ZSBhbmQgbW92ZSB0byB0aGUgZmluYWwgcGxhY2UgKi8KIAllcnIgPSBtb3ZlX21vZHVsZShpbmZvLSZndDttb2QsIGluZm8pOwotCWlmIChlcnIpCi0JCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWlmIChlcnIgIT0gLUVBR0FJTikKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwkJLyoKJiM0MzsJCSAqIC1FQUdBSU4gbWVhbnMgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCBidXQgdGhlIG1vZHVsZQomIzQzOwkJICogY2FuIHN0aWxsIGxvYWQgd2l0aG91dCBpdC4gUmVzZXQgc3RhdGUgYW5kIHJldHJ5LgomIzQzOwkJICovCiYjNDM7CQlyZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvLCBmbGFncyk7CiYjNDM7CQlmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkKJiM0MzsJCQlpbmZvLSZndDttb2QtJmd0O21lbVt0eXBlXS5zaXplID0gZnJvYl9zaXplW3R5cGVdOwomIzQzOwkJaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5zeW1dLnNoX2ZsYWdzICZhbXA7PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwomIzQzOwkJaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5zdHJdLnNoX2ZsYWdzICZhbXA7PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwomIzQzOwkJZ290byByZXRyeTsKJiM0MzsJfQogCiAJLyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovCiAJbW9kID0gKHZvaWQgKilpbmZvLSZndDtzZWNoZHJzW2luZm8tJmd0O2luZGV4Lm1vZF0uc2hfYWRkcjsKZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmMKaW5kZXggYjMzNDEwMzEwNDc3OS4uMTEyYTAxNGQ0Yjg5MCAxMDA2NDQKLS0tIGEvbW0vYWxsb2NfdGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmMKQEAgLTgzNSw2ICYjNDM7ODM1LDUyIEBAIHN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpCiYjNDM7ewomIzQzOwlNQV9TVEFURShtYXMsICZhbXA7bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpOwomIzQzOwlzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7CiYjNDM7CXN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7CiYjNDM7CXN0cnVjdCBtb2R1bGUgKnZhbDsKJiM0MzsKJiM0MzsJbWFzX2xvY2soJmFtcDttYXMpOwomIzQzOwltYXNfZm9yX2VhY2hfcmV2KCZhbXA7bWFzLCB2YWwsIDApCiYjNDM7CQlpZiAodmFsID09IG1vZCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJaWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi8KJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlpZiAoIXVzZWQpCiYjNDM7CQlnb3RvIHJlbGVhc2VfYXJlYTsKJiM0MzsKJiM0MzsJc3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpOwomIzQzOwllbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMubGFzdCk7CiYjNDM7CWlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHsKJiM0MzsJCXN0cnVjdCBhbGxvY190YWcgKnRhZzsKJiM0MzsKJiM0MzsJCWZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgJmx0Oz0gZW5kX3RhZzsgdGFnJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjsKJiM0MzsKJiM0MzsJCQlpZiAoIXRhZy0mZ3Q7Y291bnRlcnMpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpOwomIzQzOwkJCXByX2luZm8oJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxuJiMzNDssCiYjNDM7CQkJCXRhZy0mZ3Q7Y3QuZmlsZW5hbWUsIHRhZy0mZ3Q7Y3QubGluZW5vLCB0YWctJmd0O2N0Lm1vZG5hbWUsCiYjNDM7CQkJCXRhZy0mZ3Q7Y3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJdXNlZCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7cmVsZWFzZV9hcmVhOgomIzQzOwltYXNfc3RvcmUoJmFtcDttYXMsIHVzZWQgPyAmYW1wO3VubG9hZGVkX21vZCA6IE5VTEwpOwomIzQzOwl2YWwgPSBtYXNfcHJldl9yYW5nZSgmYW1wO21hcywgMCk7CiYjNDM7CWlmICh2YWwgPT0gJmFtcDtwcmVwZW5kX21vZCkKJiM0MzsJCW1hc19zdG9yZSgmYW1wO21hcywgTlVMTCk7CiYjNDM7b3V0OgomIzQzOwltYXNfdW5sb2NrKCZhbXA7bWFzKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7CkBAIC05MDQsMTAgJiM0Mzs5NTAsMTIgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCWludCBncm93X3JlczsKIAogCQltb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICYjNDM7IHNpemU7Ci0JCWlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSAmYW1wOyZhbXA7ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHsKJiM0MzsJCWlmICghdGFnc19hZGRyZXNzYWJsZSgpKSB7CiAJCQlzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpOwotCQkJcHJfd2FybigmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxuJiMzNDssCi0JCQkJbW9kLSZndDtuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7CiYjNDM7CQkJcHJfd2Fybl9vbmNlKCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXG4mIzM0OywKJiM0MzsJCQkJICAgICBtb2QtJmd0O25hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTsKJiM0MzsJCQlyZWxlYXNlX21vZHVsZV90YWdzKG1vZCwgZmFsc2UpOwomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOwogCQl9CiAKIAkJZ3Jvd19yZXMgPSB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSgpOwpAQCAtOTIyLDUyICYjNDM7OTcwLDYgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJcmV0dXJuIChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0Mzsgb2Zmc2V0KTsKIH0KIAotc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZCkKLXsKLQlNQV9TVEFURShtYXMsICZhbXA7bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpOwotCXN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZzsKLQlzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnOwotCXN0cnVjdCBtb2R1bGUgKnZhbDsKLQotCW1hc19sb2NrKCZhbXA7bWFzKTsKLQltYXNfZm9yX2VhY2hfcmV2KCZhbXA7bWFzLCB2YWwsIDApCi0JCWlmICh2YWwgPT0gbW9kKQotCQkJYnJlYWs7Ci0KLQlpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqLwotCQlnb3RvIG91dDsKLQotCWlmICghdXNlZCkKLQkJZ290byByZWxlYXNlX2FyZWE7Ci0KLQlzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5pbmRleCk7Ci0JZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmxhc3QpOwotCWlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHsKLQkJc3RydWN0IGFsbG9jX3RhZyAqdGFnOwotCi0JCWZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgJmx0Oz0gZW5kX3RhZzsgdGFnJiM0MzsmIzQzOykgewotCQkJc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyOwotCi0JCQlpZiAoIXRhZy0mZ3Q7Y291bnRlcnMpCi0JCQkJY29udGludWU7Ci0KLQkJCWNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpOwotCQkJcHJfaW5mbygmIzM0OyVzOiV1IG1vZHVsZSAlcyBmdW5jOiVzIGhhcyAlbGx1IGFsbG9jYXRlZCBhdCBtb2R1bGUgdW5sb2FkXG4mIzM0OywKLQkJCQl0YWctJmd0O2N0LmZpbGVuYW1lLCB0YWctJmd0O2N0LmxpbmVubywgdGFnLSZndDtjdC5tb2RuYW1lLAotCQkJCXRhZy0mZ3Q7Y3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJdXNlZCA9IGZhbHNlOwotCX0KLXJlbGVhc2VfYXJlYToKLQltYXNfc3RvcmUoJmFtcDttYXMsIHVzZWQgPyAmYW1wO3VubG9hZGVkX21vZCA6IE5VTEwpOwotCXZhbCA9IG1hc19wcmV2X3JhbmdlKCZhbXA7bWFzLCAwKTsKLQlpZiAodmFsID09ICZhbXA7cHJlcGVuZF9tb2QpCi0JCW1hc19zdG9yZSgmYW1wO21hcywgTlVMTCk7Ci1vdXQ6Ci0JbWFzX3VubG9jaygmYW1wO21hcyk7Ci19Ci0KIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnICpzdG9wKQogewogCS8qIEFsbG9jYXRlIG1vZHVsZSBhbGxvY190YWcgcGVyY3B1IGNvdW50ZXJzICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1vZHVsZSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGFuIGAtRUFHQUlOYCBlcnJvciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbW9kdWxlIGxvYWRpbmcgaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGVzIGJlaW5nIHRvdWNoZWQgYXJlIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGBtbS9hbGxvY190YWcuY2AuIFRoZSBjb3JlIGlzc3VlIGFwcGVhcnMgdG8gYmUgd2hlbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgcmV0dXJucyBgLUVBR0FJTmAg4oCTIGFuZCB0aGF0IGhhcHBlbnMgaWYgd2UmIzM5O3JlIHRyeWluZyB0byBsb2FkIGEgbW9kdWxlIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGRpc2FibGVkLCBidXQgd2UmIzM5O3ZlIHNvbWVob3cgaGl0IGEgbGltaXQgb24gdGhlIG51bWJlciBvZiB0YWcgYml0cyBhdmFpbGFibGUgaW4gcGFnZSBmbGFncy4KCk5vdywgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCwgdGhleSYjMzk7dmUgbW9kaWZpZWQgYGxheW91dF9hbmRfYWxsb2NhdGVgIHRvIHJldHJ5IHRoZSBtb2R1bGUgbG9hZCBpZiBgbW92ZV9tb2R1bGVgIGZhaWxzIHdpdGggYC1FQUdBSU5gLiBIYW5nIG9uIGEgc2Vjb25kLi4uIGBtb3ZlX21vZHVsZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgY2FsbHMgYGFsbG9jX21vZHVsZV90YWdzYCwgaXNuJiMzOTt0IGl0PyBUaGF0IHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgY29ubmVjdGlvbiBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBieSBncmVwcGluZyBhcm91bmQgZm9yIHRob3NlIGZ1bmN0aW9uIG5hbWVzLiBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aCBjb3JyZWN0bHkgYW5kIHRoYXQgYG1vdmVfbW9kdWxlYCBpcyBhY3R1YWxseSB0aGUgYm90dGxlbmVjayBoZXJlLiBOZWVkIHRvIHZlcmlmeSB0aGF0IHJlbGF0aW9uc2hpcCBleHBsaWNpdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfbW9kdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS9tYWluLmM9MjM2ND1zdGF0aWMgaW50IGVsZl92YWxpZGl0eV9jYWNoZV9zdHJ0YWIoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yNDE1LSAqIEFzIGEgbGFzdCBzdGVwIHdlIHNldCBpbmZvLVx1MDAzZW1vZCB0byB0aGUgdGVtcG9yYXJ5IGNvcHkgb2YgdGhlIG1vZHVsZSBpblxua2VybmVsL21vZHVsZS9tYWluLmM6MjQxNjogKiBpbmZvLVx1MDAzZWhkci4gVGhlIGZpbmFsIG9uZSB3aWxsIGJlIGFsbG9jYXRlZCBpbiBtb3ZlX21vZHVsZSgpLiBBbnlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI0MTctICogbW9kaWZpY2F0aW9ucyB3ZSBtYWtlIHRvIG91ciBjb3B5IG9mIHRoZSBtb2R1bGUgd2lsbCBiZSBjYXJyaWVkIG92ZXJcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNjU5PXN0YXRpYyBpbnQgZmluZF9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI3ODctXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNzg4OnN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxua2VybmVsL21vZHVsZS9tYWluLmMtMjc4OS17XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjk4Ni1cdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6Mjk4NzpcdGVyciA9IG1vdmVfbW9kdWxlKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5ODgtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY5MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAmIzM5O21vdmVfbW9kdWxlJiMzOTsqKgoKQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGBtb3ZlX21vZHVsZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gZG8uIElzIGl0IHJlc3BvbnNpYmxlIGZvciByZWxvY2F0aW5nIGEgbW9kdWxlIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0sIHBlcmhhcHMgcmVvcmdhbml6aW5nIGRlcGVuZGVuY2llcywgb3IgaXMgaXQgbW9yZSByZWxhdGVkIHRvIGRhdGEgdHJhbnNmZXIgb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb24/IE15IGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGl0cyBpbnB1dHMsIG91dHB1dHMsIGFueSBpbnRlcm5hbCBjYWxscyBpdCBtYWtlcyB0byBvdGhlciBmdW5jdGlvbnMsIGFuZCBpdHMgb3ZlcmFsbCBsb2dpYy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGJ5IGV4YW1pbmluZyB0aGVzZSBlbGVtZW50cywgSSBjYW4gcXVpY2tseSBkZXZlbG9wIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBgbW92ZV9tb2R1bGVgIGZpdHMgaW50byB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlICYjMzk7d2h5JiMzOTsgYmVoaW5kIGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgJiMzOTtob3cmIzM5Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX21vZHVsZV90YWdzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEtlcm5lbCBNb2R1bGUgVGFnZ2luZyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgdGFnZ2luZyBzeXN0ZW0gd29ya3MuIFdoZXJlIHdvdWxkIEkgc3RhcnQ/IFdlbGwsIGBrZXJuZWwvbW9kdWxlL21haW4uY2Agc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBsb29rIGZvciB0aGUgY29yZSBtb2R1bGUgaGFuZGxpbmcgbG9naWMuIE15IGd1dCBzYXlzIHRoYXQgc29tZXRoaW5nIGxpa2UgYGFsbG9jX3RhZ2Agb3IgcGVyaGFwcyBhIGZ1bmN0aW9uIG5hbWVkIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIHdvdWxkIGJlIGludm9sdmVkIGluLCB5b3Uga25vdywgYWN0dWFsbHkgKmRvaW5nKiB0aGUgdGFnZ2luZyBvciBtYW5hZ2luZyB0aG9zZSByZXNlcnZlZCBpZGVudGlmaWVycy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoYXQgZmlsZSBhbmQgc3RhcnQgdHJhY2luZyBmcm9tIHRoZXJlLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgbWVhdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzZXJ2ZV9tb2R1bGVfdGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgS2VybmVsIE1vZHVsZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gZGlnIGludG8gaG93IG1vZHVsZSBhbGxvY2F0aW9uIHRhZ3MgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBmaWxlLCBzaW5jZSB0aGF0JiMzOTtzIGdlbmVyYWxseSB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBtb2R1bGUgbG9hZGluZyBhbmQgaW5pdGlhbGl6YXRpb24gbG9naWMgcmVzaWRlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHNlYXJjaCBmb3IgdGhlIHRlcm0gYGFsbG9jX3RhZ2Agd2l0aGluIHRoYXQgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdGFncyBhcmUgZGVmaW5lZCwgdXNlZCwgYW5kIG1hbmFnZWQgZHVyaW5nIG1vZHVsZSBsaWZlY3ljbGUgZXZlbnRzLiBJIGV4cGVjdCB0aGlzIHNlYXJjaCB3aWxsIHBpbnBvaW50IHRoZSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiB0YWdnaW5nLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIG1vZHVsZSBtYW5hZ2VtZW50IGZyYW1ld29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY190YWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgTW9kdWxlIFJlbG9jYXRpb24gUHJvY2VzcyoqCgpIb2xkIG9uIGEgc2Vjb25kLiBJIHRob3VnaHQgYG1vdmVfbW9kdWxlYCB3YXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYC4gQnV0IGxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGl0IGxvb2tzIGxpa2UgYGxheW91dF9hbmRfYWxsb2NhdGVgIGlzIGFjdHVhbGx5IHRoZSBvbmUgdGhhdCBkb2VzIHRoYXQgcGFydGljdWxhciBqb2IuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoaXMgc3RyYWlnaHQuIExldCYjMzk7cyBnbyBiYWNrIGFuZCBjaGVjay4gSSB0aGluayBJJiMzOTtsbCBmaW5kIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBtb3ZlX21vZHVsZWAgZnVuY3Rpb24uIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgbW9kdWxlIHJlbG9jYXRpb24gcHJvY2VzcyBieSBnb2luZyBvdmVyIHRoZSBjb2RlLiBUaW1lIHRvIGRpdmUgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3ODg6XHRzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbjI3ODk6XHR7XG4yNzkwOlx0XHRpbnQgaSwgcmV0O1xuMjc5MTpcdFx0ZW51bSBtb2RfbWVtX3R5cGUgdCA9IE1PRF9NRU1fTlVNX1RZUEVTO1xuMjc5MjpcdFx0Ym9vbCBjb2RldGFnX3NlY3Rpb25fZm91bmQgPSBmYWxzZTtcbjI3OTM6XHRcbjI3OTQ6XHRcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XG4yNzk1Olx0XHRcdGlmICghbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplKSB7XG4yNzk2Olx0XHRcdFx0bW9kLVx1MDAzZW1lbVt0eXBlXS5iYXNlID0gTlVMTDtcbjI3OTc6XHRcdFx0XHRjb250aW51ZTtcbjI3OTg6XHRcdFx0fVxuMjc5OTpcdFxuMjgwMDpcdFx0XHRyZXQgPSBtb2R1bGVfbWVtb3J5X2FsbG9jKG1vZCwgdHlwZSk7XG4yODAxOlx0XHRcdGlmIChyZXQpIHtcbjI4MDI6XHRcdFx0XHR0ID0gdHlwZTtcbjI4MDM6XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4yODA0Olx0XHRcdH1cbjI4MDU6XHRcdH1cbjI4MDY6XHRcbjI4MDc6XHRcdC8qIFRyYW5zZmVyIGVhY2ggc2VjdGlvbiB3aGljaCBzcGVjaWZpZXMgU0hGX0FMTE9DICovXG4yODA4Olx0XHRwcl9kZWJ1ZyhcJiMzNDtGaW5hbCBzZWN0aW9uIGFkZHJlc3NlcyBmb3IgJXM6XFxuXCYjMzQ7LCBtb2QtXHUwMDNlbmFtZSk7XG4yODA5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtOyBpJiM0MzsmIzQzOykge1xuMjgxMDpcdFx0XHR2b2lkICpkZXN0O1xuMjgxMTpcdFx0XHRFbGZfU2hkciAqc2hkciA9IFx1MDAyNmluZm8tXHUwMDNlc2VjaGRyc1tpXTtcbjI4MTI6XHRcdFx0Y29uc3QgY2hhciAqc25hbWU7XG4yODEzOlx0XG4yODE0Olx0XHRcdGlmICghKHNoZHItXHUwMDNlc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykpXG4yODE1Olx0XHRcdFx0Y29udGludWU7XG4yODE2Olx0XG4yODE3Olx0XHRcdHNuYW1lID0gaW5mby1cdTAwM2VzZWNzdHJpbmdzICYjNDM7IHNoZHItXHUwMDNlc2hfbmFtZTtcbjI4MTg6XHRcdFx0LypcbjI4MTk6XHRcdFx0ICogTG9hZCBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkgYXMgdGhleSBtaWdodCBzdGlsbCBiZSB1c2VkXG4yODIwOlx0XHRcdCAqIGFmdGVyIG1vZHVsZSB1bmxvYWQuXG4yODIxOlx0XHRcdCAqL1xuMjgyMjpcdFx0XHRpZiAoY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLVx1MDAzZXNoX3NpemUpKSB7XG4yODIzOlx0XHRcdFx0ZGVzdCA9IGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuMjgyNDpcdFx0XHRcdFx0XHRhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBpKSwgc2hkci1cdTAwM2VzaF9hZGRyYWxpZ24pO1xuMjgyNTpcdFx0XHRcdGlmIChXQVJOX09OKCFkZXN0KSkge1xuMjgyNjpcdFx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbjI4Mjc6XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjI4Mjg6XHRcdFx0XHR9XG4yODI5Olx0XHRcdFx0aWYgKElTX0VSUihkZXN0KSkge1xuMjgzMDpcdFx0XHRcdFx0cmV0ID0gUFRSX0VSUihkZXN0KTtcbjI4MzE6XHRcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjI4MzI6XHRcdFx0XHR9XG4yODMzOlx0XHRcdFx0Y29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gdHJ1ZTtcbjI4MzQ6XHRcdFx0fSBlbHNlIHtcbjI4MzU6XHRcdFx0XHRlbnVtIG1vZF9tZW1fdHlwZSB0eXBlID0gc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAzZVx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XG4yODM2Olx0XHRcdFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaGRyLVx1MDAzZXNoX2VudHNpemUgXHUwMDI2IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0s7XG4yODM3Olx0XG4yODM4Olx0XHRcdFx0ZGVzdCA9IG1vZC1cdTAwM2VtZW1bdHlwZV0uYmFzZSAmIzQzOyBvZmZzZXQ7XG4yODM5Olx0XHRcdH1cbjI4NDA6XHRcbjI4NDE6XHRcdFx0aWYgKHNoZHItXHUwMDNlc2hfdHlwZSAhPSBTSFRfTk9CSVRTKSB7XG4yODQyOlx0XHRcdFx0LypcbjI4NDM6XHRcdFx0XHQgKiBPdXIgRUxGIGNoZWNrZXIgYWxyZWFkeSB2YWxpZGF0ZWQgdGhpcywgYnV0IGxldCYjMzk7c1xuMjg0NDpcdFx0XHRcdCAqIGJlIHBlZGFudGljIGFuZCBtYWtlIHRoZSBnb2FsIGNsZWFyZXIuIFdlIGFjdHVhbGx5XG4yODQ1Olx0XHRcdFx0ICogZW5kIHVwIGNvcHlpbmcgb3ZlciBhbGwgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRoZVxuMjg0NjpcdFx0XHRcdCAqIHVzZXJzcGFjZSBjb3B5IG9mIHRoZSBlbnRpcmUgc3RydWN0IG1vZHVsZS5cbjI4NDc6XHRcdFx0XHQgKi9cbjI4NDg6XHRcdFx0XHRpZiAoaSA9PSBpbmZvLVx1MDAzZWluZGV4Lm1vZCBcdTAwMjZcdTAwMjZcbjI4NDk6XHRcdFx0XHQgICAoV0FSTl9PTl9PTkNFKHNoZHItXHUwMDNlc2hfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IG1vZHVsZSkpKSkge1xuMjg1MDpcdFx0XHRcdFx0cmV0ID0gLUVOT0VYRUM7XG4yODUxOlx0XHRcdFx0XHRnb3RvIG91dF9lcnI7XG4yODUyOlx0XHRcdFx0fVxuMjg1MzpcdFx0XHRcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXHUwMDNlc2hfYWRkciwgc2hkci1cdTAwM2VzaF9zaXplKTtcbjI4NTQ6XHRcdFx0fVxuMjg1NTpcdFx0XHQvKlxuMjg1NjpcdFx0XHQgKiBVcGRhdGUgdGhlIHVzZXJzcGFjZSBjb3B5JiMzOTtzIEVMRiBzZWN0aW9uIGFkZHJlc3MgdG8gcG9pbnQgdG9cbjI4NTc6XHRcdFx0ICogb3VyIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgYXMgYSBwdXJlIGNvbnZlbmllbmNlIHNvIHRoYXRcbjI4NTg6XHRcdFx0ICogdXNlcnMgb2YgaW5mbyBjYW4ga2VlcCB0YWtpbmcgYWR2YW50YWdlIGFuZCB1c2luZyB0aGUgbmV3bHlcbjI4NTk6XHRcdFx0ICogbWludGVkIG9mZmljaWFsIG1lbW9yeSBhcmVhLlxuMjg2MDpcdFx0XHQgKi9cbjI4NjE6XHRcdFx0c2hkci1cdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcbjI4NjI6XHRcdFx0cHJfZGVidWcoXCYjMzQ7XFx0MHglbHggMHglLjhseCAlc1xcblwmIzM0OywgKGxvbmcpc2hkci1cdTAwM2VzaF9hZGRyLFxuMjg2MzpcdFx0XHRcdCAobG9uZylzaGRyLVx1MDAzZXNoX3NpemUsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyAmIzQzOyBzaGRyLVx1MDAzZXNoX25hbWUpO1xuMjg2NDpcdFx0fVxuMjg2NTpcdFxuMjg2NjpcdFx0cmV0dXJuIDA7XG4yODY3Olx0b3V0X2VycjpcbjI4Njg6XHRcdG1vZHVsZV9tZW1vcnlfcmVzdG9yZV9yb3gobW9kKTtcbjI4Njk6XHRcdHdoaWxlICh0LS0pXG4yODcwOlx0XHRcdG1vZHVsZV9tZW1vcnlfZnJlZShtb2QsIHQpO1xuMjg3MTpcdFx0aWYgKGNvZGV0YWdfc2VjdGlvbl9mb3VuZClcbjI4NzI6XHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhtb2QpO1xuMjg3MzpcdFxuMjg3NDpcdFx0cmV0dXJuIHJldDtcbjI4NzU6XHR9XG4yODc2Olx0XG4yODc3Olx0c3RhdGljIGludCBjaGVja19leHBvcnRfc3ltYm9sX3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZClcbjI4Nzg6XHR7XG4yODc5Olx0XHRpZiAobW9kLVx1MDAzZW51bV9zeW1zIFx1MDAyNlx1MDAyNiAhbW9kLVx1MDAzZWZsYWdzdGFiKSB7XG4yODgwOlx0XHRcdHByX2VycihcJiMzNDslczogbm8gZmxhZ3MgZm9yIGV4cG9ydGVkIHN5bWJvbHNcXG5cJiMzNDssIG1vZC1cdTAwM2VuYW1lKTtcbjI4ODE6XHRcdFx0cmV0dXJuIC1FTk9FWEVDO1xuMjg4MjpcdFx0fVxuMjg4MzpcdCNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlNcbjI4ODQ6XHRcdGlmIChtb2QtXHUwMDNlbnVtX3N5bXMgXHUwMDI2XHUwMDI2ICFtb2QtXHUwMDNlY3Jjcykge1xuMjg4NTpcdFx0XHRyZXR1cm4gdHJ5X3RvX2ZvcmNlX2xvYWQobW9kLFxuMjg4NjpcdFx0XHRcdFx0XHQgXCYjMzQ7bm8gdmVyc2lvbnMgZm9yIGV4cG9ydGVkIHN5bWJvbHNcJiMzNDspO1xuMjg4NzpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTI3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYCoqCgpSaWdodCwgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gIGhhcyBiZWVuIGludm9rZWQuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IG1hbmFnZXMgdGhlIGFsbG9jYXRpb24gb2YgYSBzcGVjaWZpYyBzZWN0aW9uIHdpdGhpbiBhIGNvZGUgdGFnIHN0cnVjdHVyZSwgcmlnaHQ/IFByb2JhYmx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoaXMgcGFydGljdWxhciBtb2R1bGUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBpdCYjMzk7cyBoYW5kbGluZyB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uLCBvciBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGFsbG9jYXRpb24gc2NoZW1lIGZvciB0aGUgc2VjdGlvbnMgdGhlbXNlbHZlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBwYXJhbWV0ZXJzIGl0IHJlY2VpdmVzLCBhbmQgdGhlbiB0cmFjZSBpdHMgZXhlY3V0aW9uIHBhdGguIEkmIzM5O20gbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHJpbWl0aXZlcywgYW5kIG1heWJlIHNvbWUga2luZCBvZiBzZWN0aW9uIG1ldGFkYXRhIG1hbmFnZW1lbnQuIEhvcGVmdWxseSwgdGhlIG5hbWluZyBjb252ZW50aW9ucyBhcmUgZGVjZW50IGVub3VnaCB0byBwcm92aWRlIHNvbWUgdXNlZnVsIGhpbnRzLiBJdCBjb3VsZCBiZSBzb21ldGhpbmcgYXMgc2ltcGxlIGFzIGVuc3VyaW5nIHRoZXJlJiMzOTtzIHNwYWNlIGZvciBhIG5ldyBtb2R1bGUgb3IgYXMgaW50cmljYXRlIGFzIGhhbmRsaW5nIHNoYXJlZCBjb2RlIHNlY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29kZXRhZy5oPTkyPWJvb2wgY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC05My1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk0OnZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTUtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBwcmVwZW5kLFxuLS1cbmluY2x1ZGUvbGludXgvY29kZXRhZy5oPTEwNz1zdGF0aWMgaW5saW5lIHZvaWQgKlxuaW5jbHVkZS9saW51eC9jb2RldGFnLmg6MTA4OmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTA5LVx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgcHJlcGVuZCxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNzg4PXN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4MjItXHRcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSkpIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4MjM6XHRcdFx0ZGVzdCA9IGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxua2VybmVsL21vZHVsZS9tYWluLmMtMjgyNC1cdFx0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbi0tXG5saWIvY29kZXRhZy5jPTI1Mz1ib29sIGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmxpYi9jb2RldGFnLmMtMjgwLVxubGliL2NvZGV0YWcuYzoyODE6dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5saWIvY29kZXRhZy5jLTI4Mi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4NTcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZXRhZyBBbGxvY2F0aW9uIE1vZHVsZSoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAgZnVuY3Rpb24gd2l0aGluIGBsaWIvY29kZXRhZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGNvZGV0YWcgbW9kdWxlIGlzIGFsbG9jYXRpbmcgaXRzIHJlc291cmNlcy4gVGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsLCBiZWNhdXNlIHByb3BlciBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IGFyZSBmdW5kYW1lbnRhbCB0byBtZW1vcnkgc2FmZXR5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB1c2VkOiBhcmUgd2UgZGVhbGluZyB3aXRoIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJsb2NrcywgZHluYW1pYyBhbGxvY2F0aW9uIHdpdGggYG1hbGxvY2AsIGEgY3VzdG9tIGFsbG9jYXRvciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODE6XHR2b2lkICpjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcbiAyODI6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4gMjgzOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFsaWduKVxuIDI4NDpcdHtcbiAyODU6XHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IG5hbWUgJiM0Mzsgc3RybGVuKENPREVUQUdfU0VDVElPTl9QUkVGSVgpO1xuIDI4NjpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDI4NzpcdFx0dm9pZCAqcmV0ID0gRVJSX1BUUigtRUlOVkFMKTtcbiAyODg6XHRcbiAyODk6XHRcdG11dGV4X2xvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAyOTA6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3R0eXBlLCBcdTAwMjZjb2RldGFnX3R5cGVzLCBsaW5rKSB7XG4gMjkxOlx0XHRcdGlmIChzdHJjbXAodHlwZV9uYW1lLCBjdHR5cGUtXHUwMDNlZGVzYy5zZWN0aW9uKSA9PSAwKSB7XG4gMjkyOlx0XHRcdFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cdTAwM2VkZXNjLmFsbG9jX3NlY3Rpb25fbWVtKSlcbiAyOTM6XHRcdFx0XHRcdGJyZWFrO1xuIDI5NDpcdFxuIDI5NTpcdFx0XHRcdGRvd25fd3JpdGUoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiAyOTY6XHRcdFx0XHRyZXQgPSBjdHR5cGUtXHUwMDNlZGVzYy5hbGxvY19zZWN0aW9uX21lbShtb2QsIHNpemUsIHByZXBlbmQsIGFsaWduKTtcbiAyOTc6XHRcdFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuIDI5ODpcdFx0XHRcdGJyZWFrO1xuIDI5OTpcdFx0XHR9XG4gMzAwOlx0XHR9XG4gMzAxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHJldHVybiByZXQ7XG4gMzA0Olx0fVxuIDMwNTpcdFxuIDMwNjpcdHZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpXG4gMzA3Olx0e1xuIDMwODpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDMwOTpcdFxuIDMxMDpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb2RldGFnX2xvY2spO1xuIDMxMTpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcbiAzMTI6XHRcdFx0aWYgKCFjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuIDMxMzpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxNDpcdFxuIDMxNTpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gMzE2Olx0XHRcdGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0obW9kLCBmYWxzZSk7XG4gMzE3Olx0XHRcdHVwX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gMzE4Olx0XHR9XG4gMzE5Olx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAzMjA6XHR9XG4gMzIxOlx0XG4gMzIyOlx0dm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpXG4gMzIzOlx0e1xuIDMyNDpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDMyNTpcdFxuIDMyNjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb2RldGFnX2xvY2spO1xuIDMyNzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcbiAzMjg6XHRcdFx0aWYgKCFjdHR5cGUtXHUwMDNlZGVzYy5tb2R1bGVfcmVwbGFjZWQpXG4gMzI5Olx0XHRcdFx0Y29udGludWU7XG4gMzMwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uKioKCk9rYXksIHNvIGBhbGxvY19zZWN0aW9uX21lbWAgaGFzIGJlZW4gY2FsbGVkLiBUaGF0JiMzOTtzIG91ciBzdGFydGluZyBwb2ludC4gTm93LCB0aGUgY3J1Y2lhbCB0aGluZyBpcyB0byB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgdGhpcyBgYWxsb2Nfc2VjdGlvbl9tZW1gIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkZWZpbmVkKiBvciwgbW9yZSBwcmVjaXNlbHksICpzZXQqLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIGtub3cgaXQmIzM5O3MgYmVpbmcgY2FsbGVkOyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byBpdHMgb3JpZ2luLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGlzIGFsbG9jYXRpb24gaXMgaGFwcGVuaW5nLiBXaGF0JiMzOTtzIGRyaXZpbmcgdGhpcyBjYWxsPyBXaGVyZSBpcyB0aGUgbWVtb3J5IGFjdHVhbGx5IGJlaW5nIG1hbmFnZWQ/IElzIHRoaXMgZHluYW1pYyBhbGxvY2F0aW9uPyBJcyBpdCBwYXJ0IG9mIGEgbGFyZ2VyIG1lbW9yeSBtYXA/IEtub3dpbmcgdGhlIGxvY2F0aW9uIG9mIGl0cyBzZXR1cCB3aWxsIHVubG9jayBhIGZhciBtb3JlIGNvbXByZWhlbnNpdmUgZ3Jhc3Agb2YgdGhlIHByb2Nlc3MuIEkgd2FudCB0aGUgYnJlYWRjcnVtYnM7IEkgd2FudCB0byBmb2xsb3cgdGhlIGNhbGwgc3RhY2sgdXBzdHJlYW0gdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIHBpY3R1cmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NlY3Rpb25fbWVtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29kZXRhZy5oPTM5PXN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyB7XG4tLVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtNDgtXHRib29sICgqbmVlZHNfc2VjdGlvbl9tZW0pKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplKTtcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjQ5Olx0dm9pZCAqKCphbGxvY19zZWN0aW9uX21lbSkoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC01MC1cdFx0XHRcdCAgIHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKTtcbi0tXG5saWIvYWxsb2NfdGFnLmM9OTgzPXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXG4tLVxubGliL2FsbG9jX3RhZy5jLTk4OS1cdFx0Lm5lZWRzX3NlY3Rpb25fbWVtXHQ9IG5lZWRzX3NlY3Rpb25fbWVtLFxubGliL2FsbG9jX3RhZy5jOjk5MDpcdFx0LmFsbG9jX3NlY3Rpb25fbWVtXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXG5saWIvYWxsb2NfdGFnLmMtOTkxLVx0XHQuZnJlZV9zZWN0aW9uX21lbVx0PSByZWxlYXNlX21vZHVsZV90YWdzLFxuLS1cbmxpYi9jb2RldGFnLmM9MjgxPXZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmxpYi9jb2RldGFnLmMtMjkxLVx0XHRpZiAoc3RyY21wKHR5cGVfbmFtZSwgY3R0eXBlLVx1MDAzZWRlc2Muc2VjdGlvbikgPT0gMCkge1xubGliL2NvZGV0YWcuYzoyOTI6XHRcdFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cdTAwM2VkZXNjLmFsbG9jX3NlY3Rpb25fbWVtKSlcbmxpYi9jb2RldGFnLmMtMjkzLVx0XHRcdFx0YnJlYWs7XG4tLVxubGliL2NvZGV0YWcuYy0yOTUtXHRcdFx0ZG93bl93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xubGliL2NvZGV0YWcuYzoyOTY6XHRcdFx0cmV0ID0gY3R0eXBlLVx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW0obW9kLCBzaXplLCBwcmVwZW5kLCBhbGlnbik7XG5saWIvY29kZXRhZy5jLTI5Ny1cdFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTEzMjQ9c3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy0xMzMwLVx0XHQubmVlZHNfc2VjdGlvbl9tZW1cdD0gbmVlZHNfc2VjdGlvbl9tZW0sXG5tbS9hbGxvY190YWcuYzoxMzMxOlx0XHQuYWxsb2Nfc2VjdGlvbl9tZW1cdD0gcmVzZXJ2ZV9tb2R1bGVfdGFncyxcbm1tL2FsbG9jX3RhZy5jLTEzMzItXHRcdC5mcmVlX3NlY3Rpb25fbWVtXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgdGhlIGtleSBjaGFuZ2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgcmVsYXRlZCB0byBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuIFJpZ2h0LCB0aGF0IGZ1bmN0aW9uIG5hbWUgY2xpY2tzLiBBbmQgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgdG8gcmV0dXJuIGBFUlJfUFRSKC1FQUdBSU4pYCB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbi4gTGV0IG1lIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyAtIGlmIGAhdGFnc19hZGRyZXNzYWJsZSgpYCwgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhlIHBhdGNoIGlzIHdvcmtpbmcgd2l0aGluIGBtbS9hbGxvY190YWcuY2AsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGZpbGUuIE5vdyBsZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBlZmZlY3RzIG9mIHRoZSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcbiA5NDY6XHRcdGlmIChJU19FUlIocmV0KSlcbiA5NDc6XHRcdFx0cmV0dXJuIHJldDtcbiA5NDg6XHRcbiA5NDk6XHRcdGlmIChtb2R1bGVfdGFncy5zaXplIFx1MDAzYyBvZmZzZXQgJiM0Mzsgc2l6ZSkge1xuIDk1MDpcdFx0XHRpbnQgZ3Jvd19yZXM7XG4gOTUxOlx0XG4gOTUyOlx0XHRcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgJiM0Mzsgc2l6ZTtcbiA5NTM6XHRcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiA5NTQ6XHRcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuIDk1NTpcdFx0XHRcdHByX3dhcm5fb25jZShcJiMzNDtXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cJiMzNDssXG4gOTU2Olx0XHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4gOTU3Olx0XHRcdFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcbiA5NTg6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiA5NTk6XHRcdFx0fVxuIDk2MDpcdFxuIDk2MTpcdFx0XHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XG4gOTYyOlx0XHRcdGlmIChncm93X3Jlcykge1xuIDk2MzpcdFx0XHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XG4gOTY0Olx0XHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbG9jYXRpb24gdGFncyBpbiB0aGUgbW9kdWxlICVzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuIDk2NTpcdFx0XHRcdCAgICAgICBtb2QtXHUwMDNlbmFtZSk7XG4gOTY2Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xuIDk2NzpcdFx0XHR9XG4gOTY4Olx0XHR9XG4gOTY5Olx0XG4gOTcwOlx0XHRyZXR1cm4gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBvZmZzZXQpO1xuIDk3MTpcdH1cbiA5NzI6XHRcbiA5NzM6XHRzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbiA5NzQ6XHR7XG4gOTc1Olx0XHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xuIDk3NjpcdFx0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xuIDk3NzpcdFx0c3RydWN0IGFsbG9jX3RhZyAqc3RvcF90YWc7XG4gOTc4Olx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4gOTc5Olx0XG4gOTgwOlx0XHQvKiBwZXJjcHUgY291bnRlcnMgZm9yIGNvcmUgYWxsb2NhdGlvbnMgYXJlIGFscmVhZHkgc3RhdGljYWxseSBhbGxvY2F0ZWQgKi9cbiA5ODE6XHRcdGlmICghbW9kKVxuIDk4MjpcdFx0XHRyZXR1cm4gMDtcbiA5ODM6XHRcbiA5ODQ6XHRcdHN0YXJ0X3RhZyA9IGN0X3RvX2FsbG9jX3RhZyhzdGFydCk7XG4gOTg1Olx0XHRzdG9wX3RhZyA9IGN0X3RvX2FsbG9jX3RhZyhzdG9wKTtcbiA5ODY6XHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjIHN0b3BfdGFnOyB0YWcmIzQzOyYjNDM7KSB7XG4gOTg3Olx0XHRcdFdBUk5fT04odGFnLVx1MDAzZWNvdW50ZXJzKTtcbiA5ODg6XHRcdFx0dGFnLVx1MDAzZWNvdW50ZXJzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMpO1xuIDk4OTpcdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycykge1xuIDk5MDpcdFx0XHRcdHdoaWxlICgtLXRhZyBcdTAwM2U9IHN0YXJ0X3RhZykge1xuIDk5MTpcdFx0XHRcdFx0ZnJlZV9wZXJjcHUodGFnLVx1MDAzZWNvdW50ZXJzKTtcbiA5OTI6XHRcdFx0XHRcdHRhZy1cdTAwM2Vjb3VudGVycyA9IE5VTEw7XG4gOTkzOlx0XHRcdFx0fVxuIDk5NDpcdFx0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhbGxvY2F0aW9uIHRhZyBwZXJjcHUgY291bnRlcnMgaW4gdGhlIG1vZHVsZSAlc1xcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTW9kdWxlIExvYWRpbmcgQmVoYXZpb3Igd2l0aCBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcqKgoKT2theSwgc28gSSYjMzk7bSB0cmFja2luZyB0aGlzIGNoYW5nZSBpbiB0aGUgbW9kdWxlIGxvYWRlci4gSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtIGlzIHNldCB1cCBzbyB0aGF0IGlmIGAhdGFnc19hZGRyZXNzYWJsZSgpYCByZXR1cm5zIHRydWUsIG1lbW9yeSBwcm9maWxpbmcgaXMgZGlzYWJsZWQgYW5kIGFuIGAtRUFHQUlOYCBlcnJvciBpcyByZXR1cm5lZC4gVGhhdCYjMzk7cyBhIGtleSBwb2ludC4gVGhpcyBgLUVBR0FJTmAgZ2V0cyBwYXNzZWQgYmFjayB1cCB0aGUgY2FsbCBzdGFjaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYG1vdmVfbW9kdWxlYC4gVGhlbiwgZG93biBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAsIHRoZSBjb2RlIGFjdGl2ZWx5ICpjYXRjaGVzKiB0aGF0IGAtRUFHQUlOYCBlcnJvciwgcmVzZXRzIHNvbWUgaW50ZXJuYWwgc3RhdGUsIGFuZCB0aGVuICpyZXRyaWVzKiB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLiBUaGF0JiMzOTtzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBpc24mIzM5O3QgaXQ/IEl0IGVzc2VudGlhbGx5IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gcmVzcG9uc2UgdG8gYSBzcGVjaWZpYyBjb25kaXRpb24uCgpUaGUgbmV4dCBxdWVzdGlvbiBpcywgJiMzNDtXaGVuIGlzIHRoaXMgYWN0dWFsbHkgaGl0PyYjMzQ7IEl0JiMzOTtzIHJlYWNoYWJsZSBpZiBhIG1vZHVsZSBpcyBsb2FkZWQgYW5kIGAhdGFnc19hZGRyZXNzYWJsZSgpYCBpcyB0cnVlIGF0IGFueSBwb2ludC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYHRhZ3NfYWRkcmVzc2FibGUoKWAgaXRzZWxmIGlzIGNoZWNraW5nIGlmIHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBjYW4gZml0IHdpdGhpbiB0aGUgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLiBUaGF0IGltcGxpZXMgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQuIFJpZ2h0LCB0aGUgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBjb25maWcgb3B0aW9uLiBTbywgdGhpcyByZXRyeSBiZWhhdmlvciBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBhY3RpdmUgYW5kIHRoZSB0YWdzIGFyZSB0b28gYmlnIHRvIGZpdCBpbiB0aGUgcGFnZSBmbGFncywgdGhlbiBpdCBzaG91bGQgdHJpZ2dlciBgLUVBR0FJTmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIzLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWcuZGVidWctMzQwLVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnLmRlYnVnOjM0MTpcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXG5tbS9LY29uZmlnLmRlYnVnOjM0Mzpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDQtXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDUtXHRkZWZhdWx0IG5cbm1tL0tjb25maWcuZGVidWc6MzQ2Olx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9LY29uZmlnLmRlYnVnOjM0NzpcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDgtXHRoZWxwXG4tLVxubW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICYjNDM7PSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgJiM0Mzs9IGFsbG9jX3RhZy5vXG4tLVxubW0vYWxsb2NfdGFnLmMtMjgtXG5tbS9hbGxvY190YWcuYzoyOTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG5tbS9hbGxvY190YWcuYy0zMC1zdGF0aWMgYm9vbCBtZW1fcHJvZmlsaW5nX3N1cHBvcnQgPSB0cnVlO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTQ4PUVYUE9SVF9TWU1CT0woX3NoYXJlZF9hbGxvY190YWcpO1xuLS1cbm1tL2FsbG9jX3RhZy5jLTUwLVxubW0vYWxsb2NfdGFnLmM6NTE6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxubW0vYWxsb2NfdGFnLmMtNTItXHRcdFx0bWVtX2FsbG9jX3Byb2ZpbGluZ19rZXkpO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTExMTY9c3RhdGljIF9faW5pdCBib29sIG5lZWRfcGFnZV9hbGxvY190YWdnaW5nKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTEyMy1cbm1tL2FsbG9jX3RhZy5jOjExMjQ6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy0xMTI1LS8qXG4tLVxubW0vYWxsb2NfdGFnLmM9MTIwMj1zdGF0aWMgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTI1NS19XG5tbS9hbGxvY190YWcuYzoxMjU2OiNlbHNlIC8qICFDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vYWxsb2NfdGFnLmMtMTI1Ny1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNsZWFyX2Vhcmx5X2FsbG9jX3Bmbl90YWdfcmVmcyh2b2lkKSB7fVxubW0vYWxsb2NfdGFnLmM6MTI1ODojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbm1tL2FsbG9jX3RhZy5jLTEyNTktXG4tLVxubW0vYWxsb2NfdGFnLmM9MTI3Nz1zdGF0aWMgaW50IHByb2NfbWVtX3Byb2ZpbGluZ19oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubW0vYWxsb2NfdGFnLmMtMTI4OC1cbm1tL2FsbG9jX3RhZy5jOjEyODk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy0xMjkwLVx0XHQvKiBVc2VyIGNhbiYjMzk7dCB0b2dnbGUgcHJvZmlsaW5nIHdoaWxlIGRlYnVnZ2luZyAqL1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMjIwPXN0YXRpYyB2b2lkIGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTIzNC1cbm1tL3BhZ2VfYWxsb2MuYzoxMjM1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGFnZV9hbGxvYy5jLTEyMzYtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTEzMDE9c3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTMwNi1cbm1tL3BhZ2VfYWxsb2MuYzoxMzA3OiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9wYWdlX2FsbG9jLmMtMTMwOC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTMxMj1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKSB7fVxubW0vcGFnZV9hbGxvYy5jLTEzMTMtXG5tbS9wYWdlX2FsbG9jLmM6MTMxNDojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3BhZ2VfYWxsb2MuYy0xMzE1LVxuLS1cbm1tL3BhZ2VfZXh0LmM9ODA9c3RhdGljIHN0cnVjdCBwYWdlX2V4dF9vcGVyYXRpb25zICpwYWdlX2V4dF9vcHNbXSBfX2luaXRkYXRhID0ge1xuLS1cbm1tL3BhZ2VfZXh0LmMtODYtI2VuZGlmXG5tbS9wYWdlX2V4dC5jOjg3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGFnZV9leHQuYy04OC1cdFx1MDAyNnBhZ2VfYWxsb2NfdGFnZ2luZ19vcHMsXG4tLVxubW0vcGFnZV9leHQuYz0xMDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXNhZ2U7XG5tbS9wYWdlX2V4dC5jLTEwMS1cbm1tL3BhZ2VfZXh0LmM6MTAyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vcGFnZV9leHQuYy0xMDMtLypcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0zNT1zdHJ1Y3QgcGNwdW9ial9leHQge1xuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTM4LSNlbmRpZlxubW0vcGVyY3B1LWludGVybmFsLmg6Mzk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00MC1cdHVuaW9uIGNvZGV0YWdfcmVmXHR0YWc7XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmgtNDMtXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo0NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIHx8IGRlZmluZWQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00NS0jZGVmaW5lIE5FRURfUENQVU9CSl9FWFRcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD05MD1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wY3B1b2JqX2V4dCh2b2lkKVxubW0vcGVyY3B1LWludGVybmFsLmgtOTEte1xubW0vcGVyY3B1LWludGVybmFsLmg6OTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05My1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vcGVyY3B1LmM9MTY5MD1zdGF0aWMgdm9pZCBwY3B1X21lbWNnX2ZyZWVfaG9vayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIHNpemVfdCBzaXplKVxuLS1cbm1tL3BlcmNwdS5jLTE2OTQtXG5tbS9wZXJjcHUuYzoxNjk1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGVyY3B1LmMtMTY5Ni1zdGF0aWMgdm9pZCBwY3B1X2FsbG9jX3RhZ19hbGxvY19ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcbi0tXG5tbS9zaG93X21lbS5jPTQwOD12b2lkIF9fc2hvd19tZW0odW5zaWduZWQgaW50IGZpbHRlciwgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2ssXG4tLVxubW0vc2hvd19tZW0uYy00MzQtI2VuZGlmXG5tbS9zaG93X21lbS5jOjQzNTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3Nob3dfbWVtLmMtNDM2LVx0c3RhdGljIERFRklORV9TUElOTE9DSyhtZW1fYWxsb2NfcHJvZmlsaW5nX3NwaW5sb2NrKTtcbi0tXG5tbS9zbHViLmM9MjA0Nj1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy0yMDYzLVxubW0vc2x1Yi5jOjIwNjQ6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9zbHViLmMtMjA2NS1cbi0tXG5tbS9zbHViLmM9MjA5Nz1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tLVxubW0vc2x1Yi5jLTIxMTItXG5tbS9zbHViLmM6MjExMzojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vc2x1Yi5jLTIxMTQtXG4tLVxubW0vc2x1Yi5jPTIxMTc9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxuLS1cbm1tL3NsdWIuYy0yMTE5LVxubW0vc2x1Yi5jOjIxMjA6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG5tbS9zbHViLmMtMjEyMS1cbi0tXG5tbS9zbHViLmM9MjMxND1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjMyMC1cbm1tL3NsdWIuYzoyMzIxOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vc2x1Yi5jLTIzMjItXG4tLVxubW0vc2x1Yi5jPTI0MDk9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuLS1cbm1tL3NsdWIuYy0yNDE1LVxubW0vc2x1Yi5jOjI0MTY6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3NsdWIuYy0yNDE3LVxuLS1cbm1tL3NsdWIuYz0yNDI1PWFsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjQyOS1cbm1tL3NsdWIuYzoyNDMwOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xubW0vc2x1Yi5jLTI0MzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDYxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaW4gdGhlIGNvbmZpZyDigJMgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBzZXQgdXAgZnV6emluZyBhZ2FpbnN0IGl0PyBJdCBsb29rcyBsaWtlIGl0IGludHJvZHVjZXMgYSByZXRyeSBsb29wIHdpdGhpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAuIFRoZSBjb2RlIG5vdyByZXRyaWVzIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgaWYgYG1vdmVfbW9kdWxlYCByZXR1cm5zIGAtRUFHQUlOYC4gVGhpcyBuZXcgaGFuZGxpbmcgc2VlbXMgdG8gYWRkcmVzcyBhIHNwZWNpZmljIGVkZ2UgY2FzZSB3aGVyZSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgbWlnaHQgZmFpbCBkdWUgdG8gdGhlIG51bWJlciBvZiB0YWdzIGV4Y2VlZGluZyBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuCgpMZXQgbWUganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5LCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgaXMgbG9jYXRlZCBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLCByaWdodD8gT2theSwganVzdCB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGxheW91dF9hbmRfYWxsb2NhdGVgIGFnYWluLiBOZWVkIHRvIGJlIGNlcnRhaW4gYmVmb3JlIEkgZ28gZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk0NDpcdHtcbjI5NDU6XHRcdHN0cnVjdCBtb2R1bGUgKm1vZDtcbjI5NDY6XHRcdGludCBlcnI7XG4yOTQ3Olx0XHR1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107XG4yOTQ4Olx0XG4yOTQ5Olx0XHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG4yOTUwOlx0XHRlcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsXG4yOTUxOlx0XHRcdFx0XHRcdGluZm8tXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cdTAwM2Vtb2QpO1xuMjk1MjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI5NTM6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI5NTQ6XHRcbjI5NTU6XHRcdGVyciA9IG1vZHVsZV9lbmZvcmNlX3J3eF9zZWN0aW9ucyhpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLFxuMjk1NjpcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cdTAwM2Vtb2QpO1xuMjk1NzpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI5NTg6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI5NTk6XHRcbjI5NjA6XHRcdC8qIFdlIHdpbGwgZG8gYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHBlci1jcHUgc2VjdGlvbnMgbGF0ZXIuICovXG4yOTYxOlx0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5wY3B1XS5zaF9mbGFncyBcdTAwMjY9IH4odW5zaWduZWQgbG9uZylTSEZfQUxMT0M7XG4yOTYyOlx0XG4yOTYzOlx0XHQvKlxuMjk2NDpcdFx0ICogTWFyayByZWxldmFudCBzZWN0aW9ucyBhcyBTSEZfUk9fQUZURVJfSU5JVCBzbyBsYXlvdXRfc2VjdGlvbnMoKSBjYW5cbjI5NjU6XHRcdCAqIHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZS5cbjI5NjY6XHRcdCAqIE5vdGU6IHJvX2FmdGVyX2luaXQgc2VjdGlvbnMgYWxzbyBoYXZlIFNIRl97V1JJVEUsQUxMT0N9IHNldC5cbjI5Njc6XHRcdCAqL1xuMjk2ODpcdFx0bW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLCBpbmZvLVx1MDAzZXNlY3N0cmluZ3MpO1xuMjk2OTpcdFxuMjk3MDpcdFx0LypcbjI5NzE6XHRcdCAqIFNhdmUgdGhlIHNpemVzIHJlc2VydmVkIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoKSBzbyB0aGV5IGNhblxuMjk3MjpcdFx0ICogYmUgcmVzdG9yZWQgaWYgd2UgcmV0cnkgYmVsb3cuXG4yOTczOlx0XHQgKi9cbjI5NzQ6XHRcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxuMjk3NTpcdFx0XHRmcm9iX3NpemVbdHlwZV0gPSBpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZTtcbjI5NzY6XHRcbjI5Nzc6XHRcdC8qXG4yOTc4Olx0XHQgKiBEZXRlcm1pbmUgdG90YWwgc2l6ZXMsIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAgRm9yIG5vd1xuMjk3OTpcdFx0ICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW55XG4yOTgwOlx0XHQgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy5cbjI5ODE6XHRcdCAqL1xuMjk4MjpcdHJldHJ5OlxuMjk4MzpcdFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbjI5ODQ6XHRcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuMjk4NTpcdFxuMjk4NjpcdFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4yOTg3Olx0XHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4yOTg4Olx0XHRpZiAoZXJyKSB7XG4yOTg5Olx0XHRcdGlmIChlcnIgIT0gLUVBR0FJTilcbjI5OTA6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjk5MTpcdFx0XHQvKlxuMjk5MjpcdFx0XHQgKiAtRUFHQUlOIG1lYW5zIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQgYnV0IHRoZSBtb2R1bGVcbjI5OTM6XHRcdFx0ICogY2FuIHN0aWxsIGxvYWQgd2l0aG91dCBpdC4gUmVzZXQgc3RhdGUgYW5kIHJldHJ5LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDYwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBNb2R1bGUgTG9hZGluZyBSZXRyeSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29kZSBzbmlwcGV0LCBzcGVjaWZpY2FsbHkgdGhlIHJldHJ5IGxvZ2ljIGluIG1vZHVsZSBsb2FkaW5nLCB0cmlnZ2VyZWQgd2hlbiBhIGAtRUFHQUlOYCBlcnJvciBpcyBlbmNvdW50ZXJlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBtb2R1bGUgbG9hZGluZyBsb2dpYywgYW5kIGFueSBkZXZpYXRpb24gb3IgdW5leHBlY3RlZCBiZWhhdmlvciBoZXJlIGNvdWxkIGhhdmUgcHJldHR5IHNlcmlvdXMgaW1wbGljYXRpb25zLgoKVGhlIGNvZGUmIzM5O3MgcHVycG9zZSBpcyB0byByZXRyeSBhZnRlciBoYW5kbGluZyBhIGAtRUFHQUlOYCBlcnJvciwgd2hpY2ggc2lnbmlmaWVzIHRoYXQgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgYnV0IHRoZSBtb2R1bGUgY2FuIHN0aWxsIGJlIGxvYWRlZC4gSXQgcmV3cml0ZXMgc2VjdGlvbiBoZWFkZXJzLCBhZGp1c3RzIG1lbW9yeSBzaXplcyBmb3IgZGlmZmVyZW50IHR5cGVzLCBhbmQgY2xlYXJzIHRoZSBgU0hGX0FMTE9DYCBmbGFnIGZvciBzeW1ib2wgYW5kIHN0cmluZyB0YWJsZSBzZWN0aW9ucywgdGhlbiByZXRyaWVzLiBUaGlzIHJlc2V0IGFuZCByZXRyeSBtZWNoYW5pc20gc2NyZWFtcyBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBlc3BlY2lhbGx5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC4KCkdpdmVuIHRoYXQgbW9kdWxlIGxvYWRpbmcgaXMgcmVhY2hlZCB2aWEgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgc3lzY2FsbHMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGguIFRoZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgY29uZmlnIG9wdGlvbiBpcyB0aGUga2V5IHRvIHRyaWdnZXIgaXQuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSB0YXJnZXRzIGhlcmU/IGBsYXlvdXRfYW5kX2FsbG9jYXRlYCwgYG1vdmVfbW9kdWxlYCwgYW5kIGByZXNlcnZlX21vZHVsZV90YWdzYCBhcmUgaW1tZWRpYXRlbHkgb24gbXkgcmFkYXIuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGFsbCB0aHJlZSBhcmUgc3RhdGljIGZ1bmN0aW9ucy4gV2hpbGUgc3RhdGljIGZ1bmN0aW9ucyBjYW4gc3RpbGwgYmUgdmFsdWFibGUgdGFyZ2V0cywgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBwdWJsaWMgaW50ZXJmYWNlcyB0aGF0IGNhbGwgdGhlbSwgYmVjYXVzZSB0aGVzZSBhcmUgaGFyZGVyIHRvIHRhcmdldCBkaXJlY3RseS4gVGhlIGBsb2FkX21vZHVsZWAgaXMgc3RhdGljLCB3aGljaCBpcyBjYWxsZWQsIEkgYmVsaWV2ZSwgd2hlbiBjYWxsaW5nIGBpbml0X21vZHVsZWAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGVudHJ5cG9pbnQuIEkgYWxzbyBzaG91bGQgbm90ZSB0aGF0IHRoZSBzeXN0ZW0gY2FsbCB0byB0cmlnZ2VyIHRoaXMgaXMgYHN5c19pbml0X21vZHVsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLippbml0X21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvbWFpbi5jPTM0NDM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzY1NC1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM2NTU6U1lTQ0FMTF9ERUZJTkUzKGluaXRfbW9kdWxlLCB2b2lkIF9fdXNlciAqLCB1bW9kLFxua2VybmVsL21vZHVsZS9tYWluLmMtMzY1Ni1cdFx0dW5zaWduZWQgbG9uZywgbGVuLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1YXJncylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zODAxPXN0YXRpYyBpbnQgaWRlbXBvdGVudF9pbml0X21vZHVsZShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKiB1YXJncywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM4MTktXG5rZXJuZWwvbW9kdWxlL21haW4uYzozODIwOlNZU0NBTExfREVGSU5FMyhmaW5pdF9tb2R1bGUsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHVhcmdzLCBpbnQsIGZsYWdzKVxua2VybmVsL21vZHVsZS9tYWluLmMtMzgyMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTY4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIG1vZHVsZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIOKAkyB0aG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgcmlnaHQ/IEJ1dCBob2xkIG9uLCB0aGUgY2FsbCBjaGFpbiBpcyBhIGJpdCBtb3JlIGludHJpY2F0ZS4gYGxheW91dF9hbmRfYWxsb2NhdGVgIGdldHMgY2FsbGVkIGJ5IGBsb2FkX21vZHVsZWAuIEFuZCBgbG9hZF9tb2R1bGVgLCBpbiB0dXJuLCBpcyB0cmlnZ2VyZWQgYnkgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAuCgpOb3csIHRoZSBxdWVzdGlvbiBpczogd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZD8gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYSBmb2N1cy4gQXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IEkgY2FuIGRpZyBpbnRvPyBOb3BlLCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGByZXNlcnZlX21vZHVsZV90YWdzYCBhcmUgYm90aCBzdGF0aWMuIEhtbSwgaGFuZyBvbiwgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGlzIGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgYGFsbG9jX3NlY3Rpb25fbWVtYCB3aXRoaW4gYGFsbG9jX3RhZ19pbml0YC4gVGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLgoKTGV0JiMzOTtzIHJldGhpbmsgdGhpcy4gQmFjayB0byB0aGUgaHVudCBmb3Igc29tZXRoaW5nIG5vbi1zdGF0aWMuIGBsb2FkX21vZHVsZWAgaXMgc3RhdGljLiBUaGF0IGRvZXNuJiMzOTt0IGhlbHAuIFNvLCBpdCBsb29rcyBsaWtlIGl0IHdpbGwgY29tZSBkb3duIHRvIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAuIEkmIzM5O2xsIGdvIGNoZWNrIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgLiptb2R1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYz0yMDc9c3RhdGljIHNzaXplX3QgbW9kdWxlX3pzdGRfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI5My1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI5NDppbnQgbW9kdWxlX2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI5NS17XG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTEyMD1pbnQgbW9kX3ZlcmlmeV9zaWcoY29uc3Qgdm9pZCAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDoxMjE6aW50IHRyeV90b19mb3JjZV9sb2FkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqcmVhc29uKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xMjItYm9vbCBmaW5kX3N5bWJvbChzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnICpmc2EpO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0xMzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGtlcm5lbF9zeW1ib2xfdmFsdWUoY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN5bSlcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMTQ0LSNpZmRlZiBDT05GSUdfTElWRVBBVENIXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTQ1OmludCBjb3B5X21vZHVsZV9lbGYoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xNDYtdm9pZCBmcmVlX21vZHVsZV9lbGYoc3RydWN0IG1vZHVsZSAqbW9kKTtcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg9MjA5PXN0cnVjdCBtb2RfZmFpbF9sb2FkIHtcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjE1LVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjIxNjppbnQgdHJ5X2FkZF9mYWlsZWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gZmFpbF9kdXBfbW9kX3JlYXNvbiByZWFzb24pO1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTIxNy12b2lkIG1vZF9zdGF0X2J1bXBfaW52YWxpZChzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0yNTY9c3RydWN0IG1vZF91bmxvYWRfdGFpbnQge1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0yNjItXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MjYzOmludCB0cnlfYWRkX3RhaW50ZWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCk7XG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjY0LXZvaWQgcHJpbnRfdW5sb2FkZWRfdGFpbnRlZF9tb2R1bGVzKHZvaWQpO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0yNzE9c3RhdGljIGlubGluZSB2b2lkIHByaW50X3VubG9hZGVkX3RhaW50ZWRfbW9kdWxlcyh2b2lkKVxuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0yNzYtI2lmZGVmIENPTkZJR19NT0RVTEVfREVDT01QUkVTU1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjI3NzppbnQgbW9kdWxlX2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7XG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjc4LXZvaWQgbW9kdWxlX2RlY29tcHJlc3NfY2xlYW51cChzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg9MzE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1vZHVsZSAqbW9kX2ZpbmQodW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3QgbW9kX3RyZWVfcm9vdCAqdHJlZSlcbi0tXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMzI4LVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjMyOTppbnQgbW9kdWxlX2VuYWJsZV9yb2RhdGFfcm8oY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozMzA6aW50IG1vZHVsZV9lbmFibGVfcm9kYXRhX3JvX2FmdGVyX2luaXQoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozMzE6aW50IG1vZHVsZV9lbmFibGVfZGF0YV9ueChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpO1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjMzMjppbnQgbW9kdWxlX2VuYWJsZV90ZXh0X3JveChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpO1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjMzMzppbnQgbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKGNvbnN0IEVsZl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTMzNC1cdFx0XHRcdGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTMzNj12b2lkIG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoY29uc3QgRWxmX0VoZHIgKmhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTMzOS0jaWZkZWYgQ09ORklHX01PRFVMRV9TSUdcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozNDA6aW50IG1vZHVsZV9zaWdfY2hlY2soc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zNDEtI2Vsc2UgLyogIUNPTkZJR19NT0RVTEVfU0lHICovXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTM2Nz1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykgeyB9XG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM3MC0jaWZkZWYgQ09ORklHX1NZU0ZTXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzcxOmludCBtb2Rfc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM3Mi1cdFx0ICAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwYXJhbSwgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zOTE9dm9pZCBtb2R1bGVfbGF5b3V0KHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHZlcnNpb25faW5mbyAqdmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zOTItXHRcdCAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHApO1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM5MzppbnQgY2hlY2tfbW9kc3RydWN0X3ZlcnNpb24oY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgc3RydWN0IG1vZHVsZSAqbW9kKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zOTQtaW50IHNhbWVfbWFnaWMoY29uc3QgY2hhciAqYW1hZ2ljLCBjb25zdCBjaGFyICpibWFnaWMsIGJvb2wgaGFzX2NyY3MpO1xuLS1cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz0zMTE9dm9pZCAqIF9fd2VhayBkZXJlZmVyZW5jZV9tb2R1bGVfZnVuY3Rpb25fZGVzY3JpcHRvcihzdHJ1Y3QgbW9kdWxlICptb2QsXG4tLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTMyMC0gKi9cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzozMjE6aW50IG1vZHVsZV9hZGRyZXNzX2xvb2t1cCh1bnNpZ25lZCBsb25nIGFkZHIsXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzIyLVx0XHRcdCAgdW5zaWduZWQgbG9uZyAqc2l6ZSxcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzQ3LVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjM0ODppbnQgbG9va3VwX21vZHVsZV9zeW1ib2xfbmFtZSh1bnNpZ25lZCBsb25nIGFkZHIsIGNoYXIgKnN5bW5hbWUpXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzQ5LXtcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzcwLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjM3MTppbnQgbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTM3Mi1cdFx0ICAgICAgIGNoYXIgKm5hbWUsIGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgKmV4cG9ydGVkKVxuLS1cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz00NDc9dW5zaWduZWQgbG9uZyBmaW5kX2thbGxzeW1zX3N5bWJvbF92YWx1ZShzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUpXG4tLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTQ1Mi1cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzo0NTM6aW50IG1vZHVsZV9rYWxsc3ltc19vbl9lYWNoX3N5bWJvbChjb25zdCBjaGFyICptb2RuYW1lLFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTQ1NC1cdFx0XHRcdCAgIGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyksXG4tLVxua2VybmVsL21vZHVsZS9rbW9kLmM9NzI9c3RhdGljIGludCBjYWxsX21vZHByb2JlKGNoYXIgKm9yaWdfbW9kdWxlX25hbWUsIGludCB3YWl0KVxuLS1cbmtlcm5lbC9tb2R1bGUva21vZC5jLTEzMS0gKi9cbmtlcm5lbC9tb2R1bGUva21vZC5jOjEzMjppbnQgX19yZXF1ZXN0X21vZHVsZShib29sIHdhaXQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxua2VybmVsL21vZHVsZS9rbW9kLmMtMTMzLXtcbi0tXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTE3LSAqL1xua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYzoxODppbnQgY29weV9tb2R1bGVfZWxmKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmMtMTkte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTE2ND1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChtb2R1bGVfbm90aWZ5X2xpc3QpO1xua2VybmVsL21vZHVsZS9tYWluLmMtMTY1LVxua2VybmVsL21vZHVsZS9tYWluLmM6MTY2OmludCByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE2Ny17XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MTcwPUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE3MS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE3MjppbnQgdW5yZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE3My17XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9NzcyPXN0YXRpYyBpbnQgdHJ5X3N0b3BfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgaW50IGZsYWdzLCBpbnQgKmZvcmNlZClcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy03OTQtICovXG5rZXJuZWwvbW9kdWxlL21haW4uYzo3OTU6aW50IG1vZHVsZV9yZWZjb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL21haW4uYy03OTYte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTExMDU9c3RhdGljIGNvbnN0IGNoYXIgdmVybWFnaWNbXSA9IFZFUk1BR0lDX1NUUklORztcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExMDYtXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxMTA3OmludCB0cnlfdG9fZm9yY2VfbG9hZChzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKnJlYXNvbilcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExMDgte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5MDk9Ym9vbCBfX3dlYWsgbW9kdWxlX2VsZl9jaGVja19hcmNoKEVsZl9FaGRyICpoZHIpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjkxMy1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MTQ6aW50IF9fd2VhayBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTE1LVx0XHRcdFx0ICAgICBFbGZfU2hkciAqc2VjaGRycyxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDEyPXN0YXRpYyB2b2lkIG1vZHVsZV9kZWFsbG9jYXRlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDIwLVxua2VybmVsL21vZHVsZS9tYWluLmM6MzAyMTppbnQgX193ZWFrIG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAyMi1cdFx0XHQgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycyxcbi0tXG5rZXJuZWwvbW9kdWxlL3NpZ25pbmcuYz00Mz1pbnQgbW9kX3ZlcmlmeV9zaWcoY29uc3Qgdm9pZCAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvc2lnbmluZy5jLTY5LVxua2VybmVsL21vZHVsZS9zaWduaW5nLmM6NzA6aW50IG1vZHVsZV9zaWdfY2hlY2soc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxua2VybmVsL21vZHVsZS9zaWduaW5nLmMtNzEte1xuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yMzA9dm9pZCBtb2Rfc3RhdF9idW1wX2JlY29taW5nKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjM5LVxua2VybmVsL21vZHVsZS9zdGF0cy5jOjI0MDppbnQgdHJ5X2FkZF9mYWlsZWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIGVudW0gZmFpbF9kdXBfbW9kX3JlYXNvbiByZWFzb24pXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjQxLXtcbi0tXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYz0xNT1zdGF0aWMgaW50IG1vZHVsZV9zZXRfbWVtb3J5KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy0zMi0gKi9cbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjMzOmludCBtb2R1bGVfZW5hYmxlX3RleHRfcm94KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZClcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTM0LXtcbi0tXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy01MC1cbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjUxOmludCBtb2R1bGVfZW5hYmxlX3JvZGF0YV9ybyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy01Mi17XG4tLVxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNjctXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYzo2ODppbnQgbW9kdWxlX2VuYWJsZV9yb2RhdGFfcm9fYWZ0ZXJfaW5pdChjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy02OS17XG4tLVxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNzUtXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYzo3NjppbnQgbW9kdWxlX2VuYWJsZV9kYXRhX254KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZClcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTc3LXtcbi0tXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy04OS1cbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjkwOmludCBtb2R1bGVfZW5mb3JjZV9yd3hfc2VjdGlvbnMoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsXG5rZXJuZWwvbW9kdWxlL3N0cmljdF9yd3guYy05MS1cdFx0XHRcdGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsXG4tLVxua2VybmVsL21vZHVsZS9zeXNmcy5jPTMzMj1zdGF0aWMgaW50IG1vZF9zeXNmc19pbml0KHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMzYzLVxua2VybmVsL21vZHVsZS9zeXNmcy5jOjM2NDppbnQgbW9kX3N5c2ZzX3NldHVwKHN0cnVjdCBtb2R1bGUgKm1vZCxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYy0zNjUtXHRcdCAgICBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxuLS1cbmtlcm5lbC9tb2R1bGUvdHJhY2tpbmcuYz0xOD1leHRlcm4gc3RydWN0IGRlbnRyeSAqbW9kX2RlYnVnZnNfcm9vdDtcbmtlcm5lbC9tb2R1bGUvdHJhY2tpbmcuYy0xOS1cbmtlcm5lbC9tb2R1bGUvdHJhY2tpbmcuYzoyMDppbnQgdHJ5X2FkZF90YWludGVkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL3RyYWNraW5nLmMtMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTW9kdWxlIExvYWRpbmcgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIG1vZHVsZSBsb2FkaW5nIGNoYW5nZXMsIGFuZCB0aGUgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGZ1bmN0aW9ucyB3aGVyZSB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbnMgc2VlbSB0byBiZSwgd2hpY2ggYXJlIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCwgYHJlc2VydmVfbW9kdWxlX3RhZ3NgLCBhbmQgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgLiBCdXQgdGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIGludGVybmFsIGhlbHBlcnMsIG5vdCB3aGF0IHdlJiMzOTtyZSBsb29raW5nIGZvciwgSSBuZWVkIHRoZSBhY3R1YWwgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwhCgpSaWdodCwgc28gdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQsIHRoZSBzeXNjYWxscyB0aGVtc2VsdmVzLiBUaGUgaW5pdGlhbCBpZGVhIHdhcyB0byBmb2N1cyBvbiBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgLiBUaGF0IG1ha2VzIG1vcmUgc2Vuc2UsIGFuZCB0aGVuIEkgd2FzIGdldHRpbmcgc2xpZ2h0bHkgdGhyb3duIGJ5IHRoZSBpbnRlcm5hbCBgbG9hZF9tb2R1bGVgIGJlaW5nIHN0YXRpYyBhbmQgdGhlIG1haW4gd29yayBoYXBwZW5pbmcgdGhlcmUuIEJ1dCwgd2FpdCwgbm8sIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIGFyZSB0aGUgc3lzY2FsbHMsIGFuZCB0aGV5JiMzOTtyZSB3aGF0IFN5emthbGxlciBzaG91bGQgYmUgdXNpbmcgaW4gdGhlIHRlc3QgaGFybmVzcy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIHVzaW5nIHRoZSBjb3JyZWN0IG5hbWVzIGZvciB0aGUgc3lzY2FsbHMuCgpBaCwgeWVzLCBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgLCBvciBzb21ldGltZXMganVzdCBgaW5pdF9tb2R1bGVgIG9yIGBmaW5pdF9tb2R1bGVgLCBhcmUgd2hhdCBTeXprYWxsZXIgd291bGQgYmUgbG9va2luZyBmb3IuIFRoYXQgc2VlbXMgcmlnaHQuIFBlcmZlY3QuIExldCYjMzk7cyBjb25maXJtIHRoYXQgdGhlc2UgYXJlIHRoZSBwcm9wZXIgbmFtZXMuIFllcywgU3l6a2FsbGVyIHVzZXMgYHN5c19pbml0X21vZHVsZWAuIE9rYXksIHRoYXQmIzM5O3MgZ29vZC4gUmVtZW1iZXIgdGhlIHByb21wdDogd2UmIzM5O3JlIGZhdm9yaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgpTbywgYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCBhcmUgZGVmaW5pdGVseSB0aGUgcHJlZmVycmVkIGVudHJ5IHBvaW50cy4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZSB0aGF0IEkmIzM5O20gbWlzc2luZy4gYGFsbG9jX3RhZ19pbml0YCBpcyBgX19pbml0YCBhbmQgc3RhdGljLiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYW5kIGByZWxlYXNlX21vZHVsZV90YWdzYCBhcmUgc3RhdGljIGFzIHdlbGwsIHNvIHRoYXQgY29uZmlybXMgaXQuIFRoZSBvbmx5IGVudHJ5IHBvaW50cyBhcmUgZGVmaW5pdGVseSB0aGUgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMsIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gTm93IEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBuZWVkcyBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdG8gYmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIzLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI1LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM5LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTM0Mi1cbm1tL0tjb25maWcuZGVidWc6MzQzOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9LY29uZmlnLmRlYnVnLTM0NC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGRpZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBtbS9LY29uZmlnLmRlYnVnYC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBnby10byBzcG90IGZvciBtZW1vcnkgbWFuYWdlbWVudC1yZWxhdGVkIGRlYnVnZ2luZyBjb25maWd1cmF0aW9ucywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGNvcmUgbWVtb3J5IGFyZWFzLiBJJiMzOTttIHNwZWNpZmljYWxseSBhaW1pbmcgYXJvdW5kIGxpbmUgMzI0OyB0aGF0IGZlZWxzIGxpa2UgYSBsaWtlbHkgcG9pbnQgdG8gc3RhcnQgdW5yYXZlbGluZyB3aGF0JiMzOTtzIGVuYWJsZWQgYW5kIGRpc2FibGVkLiBNeSBob3BlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGljaCBmZWF0dXJlcyBhcmUgYWN0aXZlIGluIHRoZSBjdXJyZW50IGJ1aWxkIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgcmlnaHQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEkgYW50aWNpcGF0ZSB0aGVyZSYjMzk7bGwgYmUgY29uZGl0aW9uYWwgYmxvY2tzIGFuZCBzb21lIGludGVyZXN0aW5nIGRlcGVuZGVuY2llcyBpbiB0aGF0IGFyZWEuIEl0JiMzOTtzIHRpbWUgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHdoYXQgY2FuIGJlIGFkanVzdGVkLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0XHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1Y2Nlc3MsIHJldHJ5IGFuZCBmYWlsdXJlIGNvdW50ZXJzIG9mIHBhZ2VcbiAzMTY6XHRcdCAgZmF1bHRzIGhhbmRsZWQgdW5kZXIgcHJvdGVjdGlvbiBvZiBwZXItdm1hIGxvY2tzLiBXaGVuIGVuYWJsZWQsIHRoZVxuIDMxNzpcdFx0ICBjb3VudGVycyBhcmUgZXhwb3NlZCBpbiAvcHJvYy92bXN0YXQuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvclxuIDMxODpcdFx0ICBrZXJuZWwgZGV2ZWxvcGVycyB0byBldmFsdWF0ZSBlZmZlY3RpdmVuZXNzIG9mIHBlci12bWEgbG9ja3MgYW5kIHRvXG4gMzE5Olx0XHQgIGlkZW50aWZ5IHBhdGhvbG9naWNhbCBjYXNlcy4gQ291bnRpbmcgdGhlc2UgZXZlbnRzIGludHJvZHVjZXMgYSBzbWFsbFxuIDMyMDpcdFx0ICBvdmVyaGVhZCBpbiB0aGUgcGFnZSBmYXVsdCBwYXRoLlxuIDMyMTpcdFxuIDMyMjpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gMzIzOlx0XG4gMzI0Olx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbiAzMjU6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1wmIzM0O1xuIDMyNjpcdFx0ZGVmYXVsdCBuXG4gMzI3Olx0XHRkZXBlbmRzIG9uIE1NVVxuIDMyODpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gMzI5Olx0XHRkZXBlbmRzIG9uICFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVcbiAzMzA6XHRcdHNlbGVjdCBDT0RFX1RBR0dJTkdcbiAzMzE6XHRcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuIDMzMjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuIDMzMzpcdFx0aGVscFxuIDMzNDpcdFx0ICBUcmFjayBhbGxvY2F0aW9uIHNvdXJjZSBjb2RlIGFuZCByZWNvcmQgdG90YWwgYWxsb2NhdGlvbiBzaXplXG4gMzM1Olx0XHQgIGluaXRpYXRlZCBhdCB0aGF0IGNvZGUgbG9jYXRpb24uIFRoZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdHJhY2tcbiAzMzY6XHRcdCAgbWVtb3J5IGxlYWtzIHdpdGggYSBsb3cgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBpbXBhY3QuXG4gMzM3Olx0XG4gMzM4Olx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG4gMzM5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuIDM0MDpcdFx0ZGVmYXVsdCB5XG4gMzQxOlx0XHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcbiAzNDI6XHRcbiAzNDM6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xuIDM0NDpcdFx0Ym9vbCBcJiMzNDtNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwMjEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIFN5c2NhbGwgVmVyaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCBlbmFibGluZyBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBjbGVhcjogYE1NVWAsIGBQUk9DX0ZTYCwgYW5kIGltcG9ydGFudGx5LCBpdCBuZWVkcyB0byBiZSAqbm90KiBgREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIHdoZW4gZW5hYmxlZCwgaXQgcHVsbHMgaW4gYENPREVfVEFHR0lOR2AsIGBQQUdFX0VYVEVOU0lPTmAsIGFuZCBgU0xBQl9PQkpfRVhUYC4gU28sIEkgdGhpbmsgd2Ugc2hvdWxkIGVuYWJsZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb3RoZXIgZGlyZWN0IGNvbmZpZ3VyYXRpb24gaXRlbXMuCgpBaCwgZ29vZCEgYE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUYCBpcyBgZGVmYXVsdCB5YCBhcyBsb25nIGFzIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBzZXQuIFNvLCBqdXN0IHNldHRpbmcgYE1FTV9BTExPQ19QUk9GSUxJTkdgIHNob3VsZCBiZSBlbm91Z2guIEdyZWF0LgoKTm93LCBhIHF1aWNrIHZlcmlmaWNhdGlvbiBvbiB0aGUgc3lzY2FsbHMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlIG5hbWVzIGFyZSByaWdodC4gSSBuZWVkIHRvIGNvbmZpcm0gYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCBhcmUgdGhlIGNvcnJlY3QgbmFtZXMuIFRoZXkgYXJlIGRlZmluZWQgd2l0aCBgU1lTQ0FMTF9ERUZJTkUzYCwgYW5kIHRoZXkgYXJlIG5hbWVkIGFjY29yZGluZyB0byB0aGUgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHkgYF9feDY0X3N5c19pbml0X21vZHVsZWAgb3IgYHN5c19pbml0X21vZHVsZWAgZGVwZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUuIFN5emthbGxlciB1c2VzIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgLiBTbywgZm9yIGBGb2N1c1N5bWJvbHNgLCB3ZSYjMzk7bGwgcHJvdmlkZSBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGluZ3MuCgpXYWl0IGEgc2Vjb25kLCBob2xkIG9uLi4uIGBsb2FkX21vZHVsZWAuLi4gSXQmIzM5O3MgdGhlIG1haW4gZnVuY3Rpb24sIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYy4gSXQmIzM5O3MgYSBodWdlIGZ1bmN0aW9uLCBhIGtleSBwaWVjZSBvZiB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGNoZWNrIGlmIGBsb2FkX21vZHVsZWAgaXMgaW5saW5lZCBiZWNhdXNlIHRoYXQgd291bGQgaW1wYWN0IHRoZSBzeW1ib2wgdmlzaWJpbGl0eSBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQuIFRoYXQgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2FkX21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xMS1cbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxMjp2b2lkIGttZW1sZWFrX2xvYWRfbW9kdWxlKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCxcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xMy1cdFx0XHQgIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTYyPXN0cnVjdCBsb2FkX2luZm8ge1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTYzLVx0Y29uc3QgY2hhciAqbmFtZTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDo2NDpcdC8qIHBvaW50ZXIgdG8gbW9kdWxlIGluIHRlbXBvcmFyeSBjb3B5LCBmcmVlZCBhdCBlbmQgb2YgbG9hZF9tb2R1bGUoKSAqL1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTY1LVx0c3RydWN0IG1vZHVsZSAqbW9kO1xuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zNDI9c3RhdGljIGlubGluZSBpbnQgbW9kdWxlX3NpZ19jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM0OC0jaWZkZWYgQ09ORklHX0RFQlVHX0tNRU1MRUFLXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzQ5OnZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zNTAtI2Vsc2UgLyogIUNPTkZJR19ERUJVR19LTUVNTEVBSyAqL1xua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM1MTpzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM1Mi1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykgeyB9XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MTQxNz1zdGF0aWMgdm9pZCBmcmVlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMTQyMC1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE0MjE6XHRjb2RldGFnX3VubG9hZF9tb2R1bGUobW9kKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE0MjItXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzAwNC1cdG1vZCA9ICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgubW9kXS5zaF9hZGRyO1xua2VybmVsL21vZHVsZS9tYWluLmM6MzAwNTpcdGttZW1sZWFrX2xvYWRfbW9kdWxlKG1vZCwgaW5mbyk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDA2LVx0Y29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoaW5mby1cdTAwM2Vtb2QsIG1vZCk7XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MzQwNz1zdGF0aWMgaW50IGVhcmx5X21vZF9jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzQ0Mi0gKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM0NDM6c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNDQ0LVx0XHQgICAgICAgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1OTEtXG5rZXJuZWwvbW9kdWxlL21haW4uYzozNTkyOlx0aWYgKGNvZGV0YWdfbG9hZF9tb2R1bGUobW9kKSlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1OTMtXHRcdGdvdG8gc3lzZnNfY2xlYW51cDtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zNjU1PVNZU0NBTExfREVGSU5FMyhpbml0X21vZHVsZSwgdm9pZCBfX3VzZXIgKiwgdW1vZCxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjc0LVxua2VybmVsL21vZHVsZS9tYWluLmM6MzY3NTpcdHJldHVybiBsb2FkX21vZHVsZShcdTAwMjZpbmZvLCB1YXJncywgMCk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjc2LX1cbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zNzYyPXN0YXRpYyBpbnQgaW5pdF9tb2R1bGVfZnJvbV9maWxlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqIHVhcmdzLCBpbnQgZmxhZ3MpXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzc5Ny1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM3OTg6XHRyZXR1cm4gbG9hZF9tb2R1bGUoXHUwMDI2aW5mbywgdWFyZ3MsIGZsYWdzKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM3OTktfVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0xMDA9c3RhdGljIExJU1RfSEVBRChkdXBfZmFpbGVkX21vZHVsZXMpO1xuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0xODMtICogICAgY2FsbCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIGl0Llxua2VybmVsL21vZHVsZS9zdGF0cy5jOjE4NDogKiAgKiBmYWlsZWRfbG9hZF9tb2R1bGVzOiBob3cgbWFueSBtb2R1bGVzIGZhaWxlZCBvbmNlIHdlJiMzOTt2ZSBhbGxvY2F0ZWQgb3VyXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTg1LSAqICAgIHByaXZhdGUgc3BhY2UgZm9yIG91ciBtb2R1bGUgdXNpbmcgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpLiBUaGVzZSBmYWlsdXJlc1xuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yMDU9c3RhdGljIGF0b21pY190IGZhaWxlZF9iZWNvbWluZztcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzoyMDY6c3RhdGljIGF0b21pY190IGZhaWxlZF9sb2FkX21vZHVsZXM7XG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjA3LVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yMjA9dm9pZCBtb2Rfc3RhdF9idW1wX2ludmFsaWQoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yMjItXHRhdG9taWNfbG9uZ19hZGQoaW5mby1cdTAwM2VsZW4gKiAyLCBcdTAwMjZpbnZhbGlkX21vZF9ieXRlcyk7XG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MjIzOlx0YXRvbWljX2luYyhcdTAwMjZmYWlsZWRfbG9hZF9tb2R1bGVzKTtcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yMjQtI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRV9ERUNPTVBSRVNTKVxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yNzM9c3RhdGljIHNzaXplX3QgcmVhZF9maWxlX21vZF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yODctXHRmYmVjb21pbmcgPSBhdG9taWNfcmVhZChcdTAwMjZmYWlsZWRfYmVjb21pbmcpO1xua2VybmVsL21vZHVsZS9zdGF0cy5jOjI4ODpcdGZsb2FkcyA9IGF0b21pY19yZWFkKFx1MDAyNmZhaWxlZF9sb2FkX21vZHVsZXMpO1xua2VybmVsL21vZHVsZS9zdGF0cy5jLTI4OS1cbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM9NDExPXN0YXRpYyBpbnQgX19pbml0IG1vZHVsZV9zdGF0c19pbml0KHZvaWQpXG4tLVxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQyMy1cdG1vZF9kZWJ1Z19hZGRfYXRvbWljKGZhaWxlZF9iZWNvbWluZyk7XG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6NDI0Olx0bW9kX2RlYnVnX2FkZF9hdG9taWMoZmFpbGVkX2xvYWRfbW9kdWxlcyk7XG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtNDI1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE4MAoJCQkJCQkJb3V0cHV0OiAxNDcKCQkJCQkJCXRob3VnaHRzOiA0MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1vZHVsZSBMb2FkaW5nIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gVGhlIGNvZGUmIzM5O3MgaW50ZXJlc3RpbmcgYmVjYXVzZSBgbG9hZF9tb2R1bGVgIGlzIHN0YXRpYyBidXQgZW5vcm1vdXMuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBmYXZvcnMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBTaW5jZSBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIGFyZSB0aGUgdHJ1ZSBlbnRyeSBwb2ludHMsIGFuZCBhY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24gdGhleSBhcmUgbm9uLXN0YXRpYyBhbmQgbm9uLWlubGluZWQsIEkgc2hvdWxkIGJlIHVzaW5nIHRoZW0uIFdhaXQsIGhvbGQgb24sIGBzeXNfaW5pdF9tb2R1bGVgIGlzIGEgbWFjcm8sIHNvIGl0IGNvdWxkIGJlIGBfX3g2NF9zeXNfaW5pdF9tb2R1bGVgIG9yIGBzeXNfaW5pdF9tb2R1bGVgLiBJdCBzb3VuZHMgbGlrZSBzeXprYWxsZXIgZ2VuZXJhbGx5IHVuZGVyc3RhbmRzIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAsIHNvIHRoYXQgc2hvdWxkIGJlIGZpbmUuIEkmIzM5O2xsIHN0aWNrIHdpdGggYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgd2hhdCYjMzk7cyBhY3R1YWxseSBjaGFuZ2VkIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLiBJIHNlZSBtb2RpZmljYXRpb25zIHRvIGByZXNlcnZlX21vZHVsZV90YWdzYCBhbmQgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgLiBUaG9zZSBhcmUgc3RhdGljIGZ1bmN0aW9ucywgc28gSSYjMzk7bSBub3QgZGlyZWN0bHkgdGFyZ2V0aW5nIHRoZW0sIGJ1dCB0aGV5JiMzOTtyZSBpbXBvcnRhbnQuIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBjbGVhcmx5IHJlbGV2YW50IGhlcmUuCgpJcyB0aGVyZSBhbnkgb3RoZXIgY29uZmlnPyBUaGUgb2J2aW91cyByZXF1aXJlbWVudCBpcyBgTU9EVUxFU2AsIGJ1dCB0aGF0JiMzOTtzIHR5cGljYWxseSBlbmFibGVkIGluIG1vc3QgZnV6emluZyBzZXR1cHMsIHNvIEkgd29uJiMzOTt0IHdvcnJ5IGFib3V0IGl0LiBJICp3aWxsKiBiZSBpbmNsdWRpbmcgYE1FTV9BTExPQ19QUk9GSUxJTkdgLCB0aG91Z2guCgpTbywgaGVyZSYjMzk7cyBteSBzdW1tYXJ5OgoKKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWUg4oCTIHRoaXMgaXMgYSBjb3JlIG1vZHVsZSBsb2FkZXIgY2hhbmdlLgoqICAgKipGb2N1c1N5bWJvbHM6KiogYHN5c19pbml0X21vZHVsZWAsIGBzeXNfZmluaXRfbW9kdWxlYCDigJMgdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYE1FTV9BTExPQ19QUk9GSUxJTkdgIOKAkyB0aGlzIGVuYWJsZXMgdGhlIHJlbGV2YW50IGNvZGUgcGF0aC4KKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW9kdWxlIGxvYWRpbmcgbG9naWMgdG8gaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIHdoZW4gdGhleSBjYW5ub3QgZml0IGluIHBhZ2UgZmxhZyBiaXRzLiBJdCBhZGRzIGEgcmV0cnkgbG9vcCB0byBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgd2hlbiBgbW92ZV9tb2R1bGVgIHJldHVybnMgYC1FQUdBSU5gLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbW9kdWxlIGxvYWRlciwgcmVhY2hhYmxlIHZpYSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXNjYWxscyB3aGVuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfaW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7c3lzX2Zpbml0X21vZHVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW9kdWxlIGxvYWRpbmcgbG9naWMgdG8gaGFuZGxlIGEgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBjYW5ub3QgZml0IGluIHBhZ2UgZmxhZyBiaXRzLiBJdCBhZGRzIGEgcmV0cnkgbG9vcCBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgd2hlbiBgbW92ZV9tb2R1bGVgIHJldHVybnMgYC1FQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbW9kdWxlIGxvYWRlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgc3lzY2FsbHMgd2hlbiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfaW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7c3lzX2Zpbml0X21vZHVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW9kdWxlIGxvYWRpbmcgbG9naWMgdG8gaGFuZGxlIGEgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBjYW5ub3QgZml0IGluIHBhZ2UgZmxhZyBiaXRzLiBJdCBhZGRzIGEgcmV0cnkgbG9vcCBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgd2hlbiBgbW92ZV9tb2R1bGVgIHJldHVybnMgYC1FQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbW9kdWxlIGxvYWRlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgc3lzY2FsbHMgd2hlbiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGV4Y2VlZCB0aGUgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLiBJdCBpbnRyb2R1Y2VzIGEgcmV0cnkgbWVjaGFuaXNtIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlKClgIGJ5IHJldHVybmluZyBgLUVBR0FJTmAgZnJvbSBgbW92ZV9tb2R1bGUoKWAgKHZpYSBgcmVzZXJ2ZV9tb2R1bGVfdGFncygpYCkuIFRoZSBzdGF0ZSBpcyBzYXZlZCBpbiBhIGxvY2FsIHN0YWNrIGFycmF5IGBmcm9iX3NpemVgIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIHRoZSBgZm9yX2VhY2hfbW9kX21lbV90eXBlYCBtYWNybyAoaXRlcmF0aW5nIG92ZXIgYWxsIHZhbGlkIG1vZHVsZSBtZW1vcnkgdHlwZXMpLiBUaGUgcGF0Y2ggYWxzbyBtb3ZlcyBgcmVsZWFzZV9tb2R1bGVfdGFncygpYCBlYXJsaWVyIGluIHRoZSBmaWxlIHRvIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGVycm9yIHBhdGguIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZjIwNDg0NzljNWM1YWUxODRjZjRiMThjMzI4Yzg4ZjAyNzQ4ZjVkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMDY6MDk6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLmVkMjZmMTY3YmU4NGQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCkBAIC0yOTQ0LDYgJiM0MzsyOTQ0LDcgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKQogewogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAlpbnQgZXJyOwomIzQzOwl1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107CiAKIAkvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovCiAJZXJyID0gbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhpbmZvLSZndDtoZHIsIGluZm8tJmd0O3NlY2hkcnMsCkBAIC0yOTY2LDE4ICYjNDM7Mjk2NywzOCBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiAJICovCiAJbW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLSZndDtoZHIsIGluZm8tJmd0O3NlY2hkcnMsIGluZm8tJmd0O3NlY3N0cmluZ3MpOwogCiYjNDM7CS8qCiYjNDM7CSAqIFNhdmUgdGhlIHNpemVzIHJlc2VydmVkIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoKSBzbyB0aGV5IGNhbgomIzQzOwkgKiBiZSByZXN0b3JlZCBpZiB3ZSByZXRyeSBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKQomIzQzOwkJZnJvYl9zaXplW3R5cGVdID0gaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZTsKJiM0MzsKIAkvKgogCSAqIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93CiAJICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW55CiAJICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuCiAJICovCiYjNDM7cmV0cnk6CiAJbGF5b3V0X3NlY3Rpb25zKGluZm8tJmd0O21vZCwgaW5mbyk7CiAJbGF5b3V0X3N5bXRhYihpbmZvLSZndDttb2QsIGluZm8pOwogCiAJLyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovCiAJZXJyID0gbW92ZV9tb2R1bGUoaW5mby0mZ3Q7bW9kLCBpbmZvKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpZiAoZXJyICE9IC1FQUdBSU4pCiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiAtRUFHQUlOIG1lYW5zIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQgYnV0IHRoZSBtb2R1bGUKJiM0MzsJCSAqIGNhbiBzdGlsbCBsb2FkIHdpdGhvdXQgaXQuIFJlc2V0IHN0YXRlIGFuZCByZXRyeS4KJiM0MzsJCSAqLwomIzQzOwkJcmV3cml0ZV9zZWN0aW9uX2hlYWRlcnMoaW5mbywgZmxhZ3MpOwomIzQzOwkJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpCiYjNDM7CQkJaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZSA9IGZyb2Jfc2l6ZVt0eXBlXTsKJiM0MzsJCWluZm8tJmd0O3NlY2hkcnNbaW5mby0mZ3Q7aW5kZXguc3ltXS5zaF9mbGFncyAmYW1wOz0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKJiM0MzsJCWluZm8tJmd0O3NlY2hkcnNbaW5mby0mZ3Q7aW5kZXguc3RyXS5zaF9mbGFncyAmYW1wOz0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KIAogCS8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqLwogCW1vZCA9ICh2b2lkICopaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5tb2RdLnNoX2FkZHI7CmRpZmYgLS1naXQgYS9tbS9hbGxvY190YWcuYyBiL21tL2FsbG9jX3RhZy5jCmluZGV4IGIzMzQxMDMxMDQ3NzkuLjExMmEwMTRkNGI4OTAgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC04MzUsNiAmIzQzOzgzNSw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKQomIzQzO3sKJiM0MzsJTUFfU1RBVEUobWFzLCAmYW1wO21vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTsKJiM0MzsJc3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnOwomIzQzOwlzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnOwomIzQzOwlzdHJ1Y3QgbW9kdWxlICp2YWw7CiYjNDM7CiYjNDM7CW1hc19sb2NrKCZhbXA7bWFzKTsKJiM0MzsJbWFzX2Zvcl9lYWNoX3JldigmYW1wO21hcywgdmFsLCAwKQomIzQzOwkJaWYgKHZhbCA9PSBtb2QpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CWlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCF1c2VkKQomIzQzOwkJZ290byByZWxlYXNlX2FyZWE7CiYjNDM7CiYjNDM7CXN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmluZGV4KTsKJiM0MzsJZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmxhc3QpOwomIzQzOwlpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7CiYjNDM7CQlzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7CiYjNDM7CiYjNDM7CQlmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnICZsdDs9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7CiYjNDM7CiYjNDM7CQkJaWYgKCF0YWctJmd0O2NvdW50ZXJzKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTsKJiM0MzsJCQlwcl9pbmZvKCYjMzQ7JXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcbiYjMzQ7LAomIzQzOwkJCQl0YWctJmd0O2N0LmZpbGVuYW1lLCB0YWctJmd0O2N0LmxpbmVubywgdGFnLSZndDtjdC5tb2RuYW1lLAomIzQzOwkJCQl0YWctJmd0O2N0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXVzZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzO3JlbGVhc2VfYXJlYToKJiM0MzsJbWFzX3N0b3JlKCZhbXA7bWFzLCB1c2VkID8gJmFtcDt1bmxvYWRlZF9tb2QgOiBOVUxMKTsKJiM0MzsJdmFsID0gbWFzX3ByZXZfcmFuZ2UoJmFtcDttYXMsIDApOwomIzQzOwlpZiAodmFsID09ICZhbXA7cHJlcGVuZF9tb2QpCiYjNDM7CQltYXNfc3RvcmUoJmFtcDttYXMsIE5VTEwpOwomIzQzO291dDoKJiM0MzsJbWFzX3VubG9jaygmYW1wO21hcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJIHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKQogewpAQCAtOTA0LDEwICYjNDM7OTUwLDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQlpbnQgZ3Jvd19yZXM7CiAKIAkJbW9kdWxlX3RhZ3Muc2l6ZSA9IG9mZnNldCAmIzQzOyBzaXplOwotCQlpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgJmFtcDsmYW1wOyAhdGFnc19hZGRyZXNzYWJsZSgpKSB7CiYjNDM7CQlpZiAoIXRhZ3NfYWRkcmVzc2FibGUoKSkgewogCQkJc2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTsKLQkJCXByX3dhcm4oJiMzNDtXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcbiYjMzQ7LAotCQkJCW1vZC0mZ3Q7bmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpOwomIzQzOwkJCXByX3dhcm5fb25jZSgmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxuJiMzNDssCiYjNDM7CQkJCSAgICAgbW9kLSZndDtuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7CiYjNDM7CQkJcmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKIAkJfQogCiAJCWdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTsKQEAgLTkyMiw1MiAmIzQzOzk3MCw2IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCXJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpCi17Ci0JTUFfU1RBVEUobWFzLCAmYW1wO21vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTsKLQlzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7Ci0Jc3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZzsKLQlzdHJ1Y3QgbW9kdWxlICp2YWw7Ci0KLQltYXNfbG9jaygmYW1wO21hcyk7Ci0JbWFzX2Zvcl9lYWNoX3JldigmYW1wO21hcywgdmFsLCAwKQotCQlpZiAodmFsID09IG1vZCkKLQkJCWJyZWFrOwotCi0JaWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi8KLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXVzZWQpCi0JCWdvdG8gcmVsZWFzZV9hcmVhOwotCi0Jc3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpOwotCWVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTsKLQlpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7Ci0JCXN0cnVjdCBhbGxvY190YWcgKnRhZzsKLQotCQlmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnICZsdDs9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHsKLQkJCXN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjsKLQotCQkJaWYgKCF0YWctJmd0O2NvdW50ZXJzKQotCQkJCWNvbnRpbnVlOwotCi0JCQljb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTsKLQkJCXByX2luZm8oJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxuJiMzNDssCi0JCQkJdGFnLSZndDtjdC5maWxlbmFtZSwgdGFnLSZndDtjdC5saW5lbm8sIHRhZy0mZ3Q7Y3QubW9kbmFtZSwKLQkJCQl0YWctJmd0O2N0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXVzZWQgPSBmYWxzZTsKLQl9Ci1yZWxlYXNlX2FyZWE6Ci0JbWFzX3N0b3JlKCZhbXA7bWFzLCB1c2VkID8gJmFtcDt1bmxvYWRlZF9tb2QgOiBOVUxMKTsKLQl2YWwgPSBtYXNfcHJldl9yYW5nZSgmYW1wO21hcywgMCk7Ci0JaWYgKHZhbCA9PSAmYW1wO3ByZXBlbmRfbW9kKQotCQltYXNfc3RvcmUoJmFtcDttYXMsIE5VTEwpOwotb3V0OgotCW1hc191bmxvY2soJmFtcDttYXMpOwotfQotCiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcCkKIHsKIAkvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyNAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNb2R1bGUgTG9hZGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBob3cgbW9kdWxlcyBhcmUgbG9hZGVkLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGAtRUFHQUlOYCBlcnJvcnMgdGhhdCBjYW4gcG9wIHVwIGR1cmluZyB0YWcgYWxsb2NhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IGByZXNlcnZlX21vZHVsZV90YWdzKClgIGNhbiBmYWlsIGJlY2F1c2Ugd2UmIzM5O3JlIHRyeWluZyB0byBjcmFtIHRvbyBtYW55IHRhZ3MgaW50byB0aGUgcGFnZSBmbGFnIGJpdHMuIFdoZW4gdGhhdCBoYXBwZW5zLCB0aGUgcGF0Y2ggZGlzYWJsZXMgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nLCByZWxlYXNlcyB0aGUgdGFncywgYW5kIGJhaWxzIG91dCB3aXRoIGAtRUFHQUlOYC4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCB0aGVuIGNhdGNoZXMgdGhlIGVycm9yLCByZXNldHMgdGhpbmdzLCBhbmQgdHJpZXMgYWdhaW4gd2l0aG91dCB1c2luZyB0YWdzLiBUaGF0JiMzOTtzIHRoZSBiYXNpYyBmbG93LgoKQnV0IG5vdywgSSBzZWUgc29tZXRoaW5nIG5ldzogdGhlIHBhdGNoIGludHJvZHVjZXMgdGhpcyBgZnJvYl9zaXplYCBhcnJheSB3aXRoaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAuIEl0JiMzOTtzIGFuIGB1bnNpZ25lZCBsb25nYCBhcnJheSBvZiBgTU9EX01FTV9OVU1fVFlQRVNgICh3aGljaCBJIGtub3cgaXMgNyBmcm9tIHBhc3QgZXhwZXJpZW5jZSkgZWxlbWVudHMuIFRoZSBjb2RlIGlzIHNhdmluZyBgaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZWAgaW50byBgZnJvYl9zaXplYCAqYmVmb3JlKiBgbGF5b3V0X3NlY3Rpb25zKClgIGlzIGNhbGxlZC4gVGhlbiwgaWYgYG1vdmVfbW9kdWxlKClgIHJldHVybnMgYC1FQUdBSU5gLCBpdCByZXN0b3JlcyBgaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZWAgZnJvbSBgZnJvYl9zaXplW3R5cGVdYCwgY2xlYXJzIGBTSEZfQUxMT0NgIGZyb20gc29tZSBzZWN0aW9ucywgYW5kIGp1bXBzIHRvIGByZXRyeWAuIE1ha2VzIHNlbnNlLCB0aGUgc2l6ZSBvZiBtZW1vcnkgcmVnaW9ucyBhcmUgc2F2ZWQgcHJpb3IgdG8gcG90ZW50aWFsIGZhaWx1cmUsIHRoZW4gcmVzdG9yZWQgYWZ0ZXIgZmFpbHVyZSB0byByZXN0YXJ0IGxheW91dC4KClRoZSByZWQgZmxhZyBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIElzIHRoaXMgYGZyb2Jfc2l6ZWAgaW5pdGlhbGl6ZWQgY29ycmVjdGx5PyBJdCBpcyBmaWxsZWQgaW4gYSBsb29wOgoKYGBgYwoJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpCgkJZnJvYl9zaXplW3R5cGVdID0gaW5mby0mZ3Q7bW9kLSZndDttZW1bdHlwZV0uc2l6ZTsKYGBgCgpJIGhhdmUgdG8gYmUgY2FyZWZ1bCBoZXJlLi4uIFRoZSBsb29wIGl0ZXJhdGVzIG92ZXIgYWxsICYjMzQ7dmFsaWQmIzM0OyBtb2R1bGUgbWVtb3J5IHR5cGVzLiBXaGF0IGNvbnN0aXR1dGVzICYjMzQ7dmFsaWQmIzM0OyBpbiB0aGlzIGNvbnRleHQ/IElmIHNvbWUgb2YgdGhvc2UgNyBlbGVtZW50cyBhcmVuJiMzOTt0IGluaXRpYWxpemVkLCB3ZSBjb3VsZCBiZSByZWFkaW5nIGdhcmJhZ2Ugd2hlbiByZXN0b3JpbmcgdGhlIHNpemVzISBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgbWFjcm8gZGVmaW5pdGlvbiB0byBtYWtlIGFic29sdXRlbHkgc3VyZS4gQW55IHZ1bG5lcmFiaWxpdHkgaGVyZSB3b3VsZCBjcmVhdGUgYSBzZXJpb3VzIHNlY3VyaXR5IHJpc2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNkZWZpbmUgZm9yX2VhY2hfbW9kX21lbV90eXBlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW9kdWxlLmg9MzE4PWVudW0gbW9kX21lbV90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM0Ny1cbmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MzQ4OiNkZWZpbmUgZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmgtMzQ5LVx0Zm9yIChlbnVtIG1vZF9tZW1fdHlwZSAodHlwZSkgPSAwO1x0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTE0CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9uIHRoaXMgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgZnVuY3Rpb24gb3IgbWFjcm8gb3Igd2hhdGV2ZXIgaXQgaXMuIEkgY2FuJiMzOTt0IHJlYWxseSBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSBvciBob3cgSSBtaWdodCBsZXZlcmFnZSBpdCBlZmZlY3RpdmVseSB3aXRob3V0IGEgcHJvcGVyIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwYXJhbWV0ZXJzLCBpdHMgcmV0dXJuIHR5cGUgKGlmIGFueSksIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGl0ICpkb2VzKiB1bmRlciB0aGUgaG9vZC4gV2hhdCBpcyBpdCBpdGVyYXRpbmcgb3Zlcj8gV2hhdCBraW5kIG9mIG1lbW9yeSB0eXBlcyBpcyBpdCBoYW5kbGluZz8gSXMgaXQgcmVsYXRlZCB0byBtb2R1bGVzIG9yIHNvbWUgc29ydCBvZiB1bmRlcmx5aW5nIG1lbW9yeSBtb2RlbD8gVGhpcyBpcyBwcm9iYWJseSBhIGxvdy1sZXZlbCByb3V0aW5lLCBzbyB0aGUgZGV0YWlscyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIGEgcHJvcGVyIHVuZGVyc3RhbmRpbmcuIEkgbmVlZCB0aGUgZnVsbCBjb250ZXh0IHRvIG1ha2UgYW55IHVzZWZ1bCBqdWRnbWVudHMgYWJvdXQgaXRzIHVzZWZ1bG5lc3MgYW5kIGFwcGxpY2F0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aGF0IGRlZmluaXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDA2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Zvcl9lYWNoX21vZF9tZW1fdHlwZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDsuY2xhbmctZm9ybWF0PTcxPUZvckVhY2hNYWNyb3M6XG4tLVxuLmNsYW5nLWZvcm1hdC0zMzYtICAtICYjMzk7Zm9yX2VhY2hfbWxlX3N1YmVsZW1lbnQmIzM5O1xuLmNsYW5nLWZvcm1hdDozMzc6ICAtICYjMzk7Zm9yX2VhY2hfbW9kX21lbV90eXBlJiMzOTtcbi5jbGFuZy1mb3JtYXQtMzM4LSAgLSAmIzM5O2Zvcl9lYWNoX21vbl9jYXBhYmxlX3JkdF9yZXNvdXJjZSYjMzk7XG4tLVxuaW5jbHVkZS9saW51eC9tb2R1bGUuaD0zMTg9ZW51bSBtb2RfbWVtX3R5cGUge1xuLS1cbmluY2x1ZGUvbGludXgvbW9kdWxlLmgtMzQ3LVxuaW5jbHVkZS9saW51eC9tb2R1bGUuaDozNDg6I2RlZmluZSBmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tb2R1bGUuaC0zNDktXHRmb3IgKGVudW0gbW9kX21lbV90eXBlICh0eXBlKSA9IDA7XHRcdFxcXG4tLVxuaW5jbHVkZS9saW51eC9tb2R1bGUuaC0zNTItI2RlZmluZSBmb3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGNsYXNzKVx0XHRcXFxuaW5jbHVkZS9saW51eC9tb2R1bGUuaDozNTM6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcdFx0XHRcXFxuaW5jbHVkZS9saW51eC9tb2R1bGUuaC0zNTQtXHRcdGlmIChtb2RfbWVtX3R5cGVfaXNfIyNjbGFzcyh0eXBlKSlcbi0tXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmM9MTI9dm9pZCBrbWVtbGVha19sb2FkX21vZHVsZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QsXG4tLVxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jLTE1LVx0Lyogb25seSBzY2FuIHdyaXRhYmxlLCBub24tZXhlY3V0YWJsZSBzZWN0aW9ucyAqL1xua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjE2Olx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xNy1cdFx0aWYgKHR5cGUgIT0gTU9EX0RBVEEgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTU9EX0lOSVRfREFUQSBcdTAwMjZcdTAwMjZcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xMTk9c3RhdGljIHZvaWQgbW9kX3VwZGF0ZV9ib3VuZHMoc3RydWN0IG1vZHVsZSAqbW9kKVxua2VybmVsL21vZHVsZS9tYWluLmMtMTIwLXtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjEyMTpcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0xMjItXHRcdHN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtID0gXHUwMDI2bW9kLVx1MDAzZW1lbVt0eXBlXTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xMzk3PXN0YXRpYyB2b2lkIGZyZWVfbW9kX21lbShzdHJ1Y3QgbW9kdWxlICptb2QpXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xMzk4LXtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjEzOTk6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS9tYWluLmMtMTQwMC1cdFx0c3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBcdTAwMjZtb2QtXHUwMDNlbWVtW3R5cGVdO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI3ODg9c3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjc5My1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI3OTQ6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS9tYWluLmMtMjc5NS1cdFx0aWYgKCFtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUpIHtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yODkyPXN0YXRpYyB2b2lkIGZsdXNoX21vZHVsZV9pY2FjaGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4OTgtXHQgKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4OTk6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS9tYWluLmMtMjkwMC1cdFx0Y29uc3Qgc3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBcdTAwMjZtb2QtXHUwMDNlbWVtW3R5cGVdO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5NDM9c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NzMtXHQgKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5NzQ6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NzUtXHRcdGZyb2Jfc2l6ZVt0eXBlXSA9IGluZm8tXHUwMDNlbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5OTUtXHRcdHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKGluZm8sIGZsYWdzKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5OTY6XHRcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxua2VybmVsL21vZHVsZS9tYWluLmMtMjk5Ny1cdFx0XHRpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IGZyb2Jfc2l6ZVt0eXBlXTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDk4PXN0YXRpYyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMxMDQtXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMTA1Olx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMxMDYtXHRcdGNvbnN0IHN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtID0gXHUwMDI2bW9kLVx1MDAzZW1lbVt0eXBlXTtcbi0tXG5rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jPTY1PXN0YXRpYyB1bnNpZ25lZCBpbnQgbW9kdWxlX3RvdGFsX3NpemUoc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvcHJvY2ZzLmMtNjgtXG5rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jOjY5Olx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG5rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jLTcwLVx0XHRzaXplICYjNDM7PSBtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemU7XG4tLVxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jPTc4PXZvaWQgbW9kX3RyZWVfaW5zZXJ0KHN0cnVjdCBtb2R1bGUgKm1vZClcbmtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYy03OS17XG5rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmM6ODA6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jLTgxLVx0XHRtb2QtXHUwMDNlbWVtW3R5cGVdLm10bi5tb2QgPSBtb2Q7XG4tLVxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jPTk1PXZvaWQgbW9kX3RyZWVfcmVtb3ZlKHN0cnVjdCBtb2R1bGUgKm1vZClcbmtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYy05Ni17XG5rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmM6OTc6XHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jLTk4LVx0XHRpZiAobW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTgxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHByb2NlZHVyZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgbW9kdWxlLmhgIGluIHRoZSBMaW51eCBrZXJuZWwgaGVhZGVycy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnb2luZyB0byBsaW5lcyAzNDggdGhyb3VnaCAzNTEsIHdoaWNoIHNob3VsZCBnZXQgbWUgc3RhcnRlZCBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgbW9kdWxlIGxvYWQgYW5kIHVubG9hZCByb3V0aW5lcy4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRob3NlIGxpbmVzLCBiZWNhdXNlIEkga25vdyB0aGV5JiMzOTtyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIG1vZHVsZSBsaWZlY3ljbGUgZnJvbSB0aGUgZGV2ZWxvcGVyJiMzOTtzIHBlcnNwZWN0aXZlLiBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgaW52b2x2ZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW9kdWxlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0NTpcdFx0KG1vZF9tZW1fdHlwZV9pc19jb3JlKHR5cGUpIFx1MDAyNlx1MDAyNlx0XFxcbiAzNDY6XHRcdCBtb2RfbWVtX3R5cGVfaXNfZGF0YSh0eXBlKSlcbiAzNDc6XHRcbiAzNDg6XHQjZGVmaW5lIGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVx0XHRcdFxcXG4gMzQ5Olx0XHRmb3IgKGVudW0gbW9kX21lbV90eXBlICh0eXBlKSA9IDA7XHRcdFxcXG4gMzUwOlx0XHQgICAgICh0eXBlKSBcdTAwM2MgTU9EX01FTV9OVU1fVFlQRVM7ICh0eXBlKSYjNDM7JiM0MzspXG4gMzUxOlx0XG4gMzUyOlx0I2RlZmluZSBmb3JfY2xhc3NfbW9kX21lbV90eXBlKHR5cGUsIGNsYXNzKVx0XHRcXFxuIDM1MzpcdFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXHRcdFx0XFxcbiAzNTQ6XHRcdFx0aWYgKG1vZF9tZW1fdHlwZV9pc18jI2NsYXNzKHR5cGUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDA5CgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDg3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIEFzc2Vzc21lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHJlZ2FyZGluZyB0aGUgaW5pdGlhbCBjb25jZXJuIGFib3V0IGBmcm9iX3NpemVgLCBpdCYjMzk7cyBjbGVhciBhZnRlciBleGFtaW5pbmcgdGhlIGNvZGUgdGhhdCBpdCYjMzk7cyBhIGxvY2FsLCBzdGFjay1hbGxvY2F0ZWQgYXJyYXkuIFRoZSBsb29wIHVzaW5nIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgICpkb2VzKiBpbml0aWFsaXplIGFsbCBlbGVtZW50cyBvZiBgZnJvYl9zaXplYCBiZWZvcmUgaXQmIzM5O3MgdXNlZC4gVGhlcmVmb3JlLCB0aGUgcmVzdG9yYXRpb24gb2YgYGluZm8tJmd0O21vZC0mZ3Q7bWVtW3R5cGVdLnNpemVgIHVzaW5nIGBmcm9iX3NpemVgIGlzIHBlcmZlY3RseSBzYWZlIOKAkyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhlcmUuIFdlJiMzOTtyZSBnb29kLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGBtbS9hbGxvY190YWcuY2AgcGF0Y2guIFRoZSBwcmltYXJ5IGZvY3VzIGhlcmUgc2VlbXMgdG8gYmUgb24gYHJlbGVhc2VfbW9kdWxlX3RhZ3NgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYG1vZHVsZV90YWdzYCBzdHJ1Y3R1cmUuIFRoZSBmdW5jdGlvbiBpdGVyYXRlcyB0aHJvdWdoIG1vZHVsZSB0YWdzIHRvIGNsZWFuIHVwIHVudXNlZCBjb3VudGVycywgYW5kIGl0IHJlYWRzIGB0YWctJmd0O2NvdW50ZXJzYCBpbiB0aGUgcHJvY2VzcywgcHJpbnRpbmcgaW5mb3JtYXRpb24gaWYgdGhvc2UgY291bnRlcnMgaGF2ZW4mIzM5O3QgYmVlbiBjbGVhbmVkIHVwLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRvIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgcmV2ZWFscyB0aGF0IGByZWxlYXNlX21vZHVsZV90YWdzYCB3YXMgbW92ZWQgdXAgaW4gdGhlIGZpbGUuIFRoaXMgbW92ZSBtYWtlcyBpdCBlYXNpZXIgdG8gY2FsbCBpdCBmcm9tIGByZXNlcnZlX21vZHVsZV90YWdzYC4gSW4gYHJlc2VydmVfbW9kdWxlX3RhZ3NgLCB0aGUgcGF0Y2ggaW5jbHVkZXMgZXJyb3IgaGFuZGxpbmcuIElmIHRoZSBudW1iZXIgb2YgdGFncyBuZWVkZWQgZXhjZWVkcyB0aGUgYXZhaWxhYmxlIGJpdHMsIHRoZSBjb2RlIG5vdyBjYWxscyBgcmVsZWFzZV9tb2R1bGVfdGFnc2AgKmJlZm9yZSogcmV0dXJuaW5nIGAtRUFHQUlOYC4gVGhpcyBlZmZlY3RpdmVseSByZXRyaWVzIG1vZHVsZSBsb2FkaW5nIHdpdGhvdXQgYWxsb2NhdGlvbiBvZiBwcm9maWxpbmcgdGFncy4KCkNyaXRpY2FsbHksIHRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgYWJvdXQgKmZhaWxpbmcqIGdyYWNlZnVsbHkgd2hlbiByZXNvdXJjZXMgYXJlIGNvbnN0cmFpbmVkLiBUaGlzIHBhdGNoIHByaW1hcmlseSByZXN0b3JlcyBtb2R1bGUgc2l6ZXMgYW5kIHJldHJpZXMgd2l0aG91dCBhbGxvY2F0aW5nIHRhZ3MsIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBnaXZlbiB0aGUgbG9naWMuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBhZGRyZXNzZXMgbW9kdWxlIGxvYWRpbmcgcmV0cnkgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBleGNlZWQgbGltaXRzIGFuZCBkb2VzIG5vdCBpbnZvbHZlIHVzZXItc3BhY2UgY29waWVzIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBJIGNvbmNsdWRlIHRoYXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgZXhjZWVkIHRoZSBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIEl0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgYnkgcmV0dXJuaW5nIGAtRUFHQUlOYCBmcm9tIGBtb3ZlX21vZHVsZSgpYCAodmlhIGByZXNlcnZlX21vZHVsZV90YWdzKClgKS4gVGhlIHN0YXRlIGlzIHNhdmVkIGluIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGZyb2Jfc2l6ZWAgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIG1hY3JvIChpdGVyYXRpbmcgb3ZlciBhbGwgdmFsaWQgbW9kdWxlIG1lbW9yeSB0eXBlcykuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIGByZWxlYXNlX21vZHVsZV90YWdzKClgIGVhcmxpZXIgaW4gdGhlIGZpbGUgdG8gYmUgY2FsbGVkIGR1cmluZyB0aGUgZXJyb3IgcGF0aC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgZXhjZWVkIHRoZSBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIEl0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgYnkgcmV0dXJuaW5nIGAtRUFHQUlOYCBmcm9tIGBtb3ZlX21vZHVsZSgpYCAodmlhIGByZXNlcnZlX21vZHVsZV90YWdzKClgKS4gVGhlIHN0YXRlIGlzIHNhdmVkIGluIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGZyb2Jfc2l6ZWAgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIG1hY3JvIChpdGVyYXRpbmcgb3ZlciBhbGwgdmFsaWQgbW9kdWxlIG1lbW9yeSB0eXBlcykuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIGByZWxlYXNlX21vZHVsZV90YWdzKClgIGVhcmxpZXIgaW4gdGhlIGZpbGUgdG8gYmUgY2FsbGVkIGR1cmluZyB0aGUgZXJyb3IgcGF0aC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjA5OjU3LjQ3NzgyOTg2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjU1MTgwMjUwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX2luaXRfbW9kdWxlXCIsXG4gICAgXCJzeXNfZmluaXRfbW9kdWxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgZXhjZWVkIHRoZSBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIEl0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgYnkgcmV0dXJuaW5nIGAtRUFHQUlOYCBmcm9tIGBtb3ZlX21vZHVsZSgpYCAodmlhIGByZXNlcnZlX21vZHVsZV90YWdzKClgKS4gVGhlIHN0YXRlIGlzIHNhdmVkIGluIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGZyb2Jfc2l6ZWAgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIG1hY3JvIChpdGVyYXRpbmcgb3ZlciBhbGwgdmFsaWQgbW9kdWxlIG1lbW9yeSB0eXBlcykuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIGByZWxlYXNlX21vZHVsZV90YWdzKClgIGVhcmxpZXIgaW4gdGhlIGZpbGUgdG8gYmUgY2FsbGVkIGR1cmluZyB0aGUgZXJyb3IgcGF0aC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vZHVsZSBsb2FkaW5nIGxvZ2ljIHRvIGhhbmRsZSBhIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgY2Fubm90IGZpdCBpbiBwYWdlIGZsYWcgYml0cy4gSXQgYWRkcyBhIHJldHJ5IGxvb3AgaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgIHdoZW4gYG1vdmVfbW9kdWxlYCByZXR1cm5zIGAtRUFHQUlOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1vZHVsZSBsb2FkZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIHN5c2NhbGxzIHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjowOTo1Ny40Nzc4MzQ0NzZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTc3NDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDlmMjA0ODQ3OWM1YzVhZTE4NGNmNGIxOGMzMjhjODhmMDI3NDhmNWRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDY6MDk6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9tYWluLmMgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xcbmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLmVkMjZmMTY3YmU4NGQgMTAwNjQ0XFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcXG4rKysgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xcbkBAIC0yOTQ0LDYgKzI5NDQsNyBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IG1vZHVsZSAqbW9kO1xcbiBcXHRpbnQgZXJyO1xcbitcXHR1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107XFxuIFxcbiBcXHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXFxuIFxcdGVyciA9IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLFxcbkBAIC0yOTY2LDE4ICsyOTY3LDM4IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcXG4gXFx0ICovXFxuIFxcdG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLCBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFNhdmUgdGhlIHNpemVzIHJlc2VydmVkIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoKSBzbyB0aGV5IGNhblxcbitcXHQgKiBiZSByZXN0b3JlZCBpZiB3ZSByZXRyeSBiZWxvdy5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxcbitcXHRcXHRmcm9iX3NpemVbdHlwZV0gPSBpbmZvLVxcdTAwM2Vtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcXG4gXFx0ICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnlcXG4gXFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXFxuIFxcdCAqL1xcbityZXRyeTpcXG4gXFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuIFxcdGxheW91dF9zeW10YWIoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xcbiBcXHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVxcdTAwM2Vtb2QsIGluZm8pO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGlmIChlcnIgIT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogLUVBR0FJTiBtZWFucyBwcm9maWxpbmcgd2FzIGRpc2FibGVkIGJ1dCB0aGUgbW9kdWxlXFxuK1xcdFxcdCAqIGNhbiBzdGlsbCBsb2FkIHdpdGhvdXQgaXQuIFJlc2V0IHN0YXRlIGFuZCByZXRyeS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKGluZm8sIGZsYWdzKTtcXG4rXFx0XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXFxuK1xcdFxcdFxcdGluZm8tXFx1MDAzZW1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemUgPSBmcm9iX3NpemVbdHlwZV07XFxuK1xcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXguc3ltXS5zaF9mbGFncyBcXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4LnN0cl0uc2hfZmxhZ3MgXFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcXG4rXFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovXFxuIFxcdG1vZCA9ICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XFxuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcXG5pbmRleCBiMzM0MTAzMTA0Nzc5Li4xMTJhMDE0ZDRiODkwIDEwMDY0NFxcbi0tLSBhL21tL2FsbG9jX3RhZy5jXFxuKysrIGIvbW0vYWxsb2NfdGFnLmNcXG5AQCAtODM1LDYgKzgzNSw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxcbit7XFxuK1xcdE1BX1NUQVRFKG1hcywgXFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcXG4rXFx0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xcbitcXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xcbitcXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XFxuK1xcbitcXHRtYXNfbG9jayhcXHUwMDI2bWFzKTtcXG4rXFx0bWFzX2Zvcl9lYWNoX3JldihcXHUwMDI2bWFzLCB2YWwsIDApXFxuK1xcdFxcdGlmICh2YWwgPT0gbW9kKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdGlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0aWYgKCF1c2VkKVxcbitcXHRcXHRnb3RvIHJlbGVhc2VfYXJlYTtcXG4rXFxuK1xcdHN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMuaW5kZXgpO1xcbitcXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcXG4rXFx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xcbitcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XFxuK1xcbitcXHRcXHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFxcdTAwM2M9IGVuZF90YWc7IHRhZysrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcXG4rXFxuK1xcdFxcdFxcdGlmICghdGFnLVxcdTAwM2Vjb3VudGVycylcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcXG4rXFx0XFx0XFx0cHJfaW5mbyhcXFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHRhZy1cXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cXHUwMDNlY3QubGluZW5vLCB0YWctXFx1MDAzZWN0Lm1vZG5hbWUsXFxuK1xcdFxcdFxcdFxcdHRhZy1cXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHVzZWQgPSBmYWxzZTtcXG4rXFx0fVxcbityZWxlYXNlX2FyZWE6XFxuK1xcdG1hc19zdG9yZShcXHUwMDI2bWFzLCB1c2VkID8gXFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xcbitcXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcXHUwMDI2bWFzLCAwKTtcXG4rXFx0aWYgKHZhbCA9PSBcXHUwMDI2cHJlcGVuZF9tb2QpXFxuK1xcdFxcdG1hc19zdG9yZShcXHUwMDI2bWFzLCBOVUxMKTtcXG4rb3V0OlxcbitcXHRtYXNfdW5sb2NrKFxcdTAwMjZtYXMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4gXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKVxcbiB7XFxuQEAgLTkwNCwxMCArOTUwLDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbiBcXHRcXHRpbnQgZ3Jvd19yZXM7XFxuIFxcbiBcXHRcXHRtb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICsgc2l6ZTtcXG4tXFx0XFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcXG4rXFx0XFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcXG4gXFx0XFx0XFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcXG4tXFx0XFx0XFx0cHJfd2FybihcXFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRtb2QtXFx1MDAzZW5hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTtcXG4rXFx0XFx0XFx0cHJfd2Fybl9vbmNlKFxcXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgbW9kLVxcdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XFxuK1xcdFxcdFxcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XFxuK1xcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XFxuQEAgLTkyMiw1MiArOTcwLDYgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuIFxcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgb2Zmc2V0KTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcXG4te1xcbi1cXHRNQV9TVEFURShtYXMsIFxcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XFxuLVxcdHN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZztcXG4tXFx0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcXG4tXFx0c3RydWN0IG1vZHVsZSAqdmFsO1xcbi1cXG4tXFx0bWFzX2xvY2soXFx1MDAyNm1hcyk7XFxuLVxcdG1hc19mb3JfZWFjaF9yZXYoXFx1MDAyNm1hcywgdmFsLCAwKVxcbi1cXHRcXHRpZiAodmFsID09IG1vZClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqL1xcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdGlmICghdXNlZClcXG4tXFx0XFx0Z290byByZWxlYXNlX2FyZWE7XFxuLVxcbi1cXHRzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmluZGV4KTtcXG4tXFx0ZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMubGFzdCk7XFxuLVxcdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcXG4tXFx0XFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xcbi1cXG4tXFx0XFx0Zm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyBcXHUwMDNjPSBlbmRfdGFnOyB0YWcrKykge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XFxuLVxcbi1cXHRcXHRcXHRpZiAoIXRhZy1cXHUwMDNlY291bnRlcnMpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0XFx0Y291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7XFxuLVxcdFxcdFxcdHByX2luZm8oXFxcIiVzOiV1IG1vZHVsZSAlcyBmdW5jOiVzIGhhcyAlbGx1IGFsbG9jYXRlZCBhdCBtb2R1bGUgdW5sb2FkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHR0YWctXFx1MDAzZWN0LmZpbGVuYW1lLCB0YWctXFx1MDAzZWN0LmxpbmVubywgdGFnLVxcdTAwM2VjdC5tb2RuYW1lLFxcbi1cXHRcXHRcXHRcXHR0YWctXFx1MDAzZWN0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHR1c2VkID0gZmFsc2U7XFxuLVxcdH1cXG4tcmVsZWFzZV9hcmVhOlxcbi1cXHRtYXNfc3RvcmUoXFx1MDAyNm1hcywgdXNlZCA/IFxcdTAwMjZ1bmxvYWRlZF9tb2QgOiBOVUxMKTtcXG4tXFx0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXFx1MDAyNm1hcywgMCk7XFxuLVxcdGlmICh2YWwgPT0gXFx1MDAyNnByZXBlbmRfbW9kKVxcbi1cXHRcXHRtYXNfc3RvcmUoXFx1MDAyNm1hcywgTlVMTCk7XFxuLW91dDpcXG4tXFx0bWFzX3VubG9jayhcXHUwMDI2bWFzKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApXFxuIHtcXG4gXFx0LyogQWxsb2NhdGUgbW9kdWxlIGFsbG9jX3RhZyBwZXJjcHUgY291bnRlcnMgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MDk6NTcuOTk4NjU1MDYyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTM3NjQzNDMyMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19pbml0X21vZHVsZVwiLFxuICAgIFwic3lzX2Zpbml0X21vZHVsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb2R1bGUgbG9hZGluZyBsb2dpYyB0byBoYW5kbGUgYSBjYXNlIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGNhbm5vdCBmaXQgaW4gcGFnZSBmbGFnIGJpdHMuIEl0IGFkZHMgYSByZXRyeSBsb29wIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCB3aGVuIGBtb3ZlX21vZHVsZWAgcmV0dXJucyBgLUVBR0FJTmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtb2R1bGUgbG9hZGVyIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXNjYWxscyB3aGVuIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWYyMDQ4NDc5YzVjNWFlMTg0Y2Y0YjE4YzMyOGM4OGYwMjc0OGY1ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDA2OjA5OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9tYWluLmMgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xuaW5kZXggNDZkZDhkMjVhNjA1OC4uZWQyNmYxNjdiZTg0ZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG4rKysgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xuQEAgLTI5NDQsNiArMjk0NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XG4gXHRpbnQgZXJyO1xuK1x0dW5zaWduZWQgbG9uZyBmcm9iX3NpemVbTU9EX01FTV9OVU1fVFlQRVNdO1xuIFxuIFx0LyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqL1xuIFx0ZXJyID0gbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLFxuQEAgLTI5NjYsMTggKzI5NjcsMzggQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyk7XG4gXG4rXHQvKlxuK1x0ICogU2F2ZSB0aGUgc2l6ZXMgcmVzZXJ2ZWQgYnkgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucygpIHNvIHRoZXkgY2FuXG4rXHQgKiBiZSByZXN0b3JlZCBpZiB3ZSByZXRyeSBiZWxvdy5cbitcdCAqL1xuK1x0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG4rXHRcdGZyb2Jfc2l6ZVt0eXBlXSA9IGluZm8tXHUwMDNlbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplO1xuK1xuIFx0LypcbiBcdCAqIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93XG4gXHQgKiB0aGlzIGlzIGRvbmUgZ2VuZXJpY2FsbHk7IHRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGFueVxuIFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXG4gXHQgKi9cbityZXRyeTpcbiBcdGxheW91dF9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4gXHRsYXlvdXRfc3ltdGFiKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcbiBcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xuIFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdGlmIChlcnIpIHtcbitcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4rXHRcdC8qXG4rXHRcdCAqIC1FQUdBSU4gbWVhbnMgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCBidXQgdGhlIG1vZHVsZVxuK1x0XHQgKiBjYW4gc3RpbGwgbG9hZCB3aXRob3V0IGl0LiBSZXNldCBzdGF0ZSBhbmQgcmV0cnkuXG4rXHRcdCAqL1xuK1x0XHRyZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvLCBmbGFncyk7XG4rXHRcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxuK1x0XHRcdGluZm8tXHUwMDNlbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplID0gZnJvYl9zaXplW3R5cGVdO1xuK1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5zeW1dLnNoX2ZsYWdzIFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcbitcdFx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXguc3RyXS5zaF9mbGFncyBcdTAwMjY9IH4odW5zaWduZWQgbG9uZylTSEZfQUxMT0M7XG4rXHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4gXG4gXHQvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi9cbiBcdG1vZCA9ICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgubW9kXS5zaF9hZGRyO1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGIzMzQxMDMxMDQ3NzkuLjExMmEwMTRkNGI4OTAgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuKysrIGIvbW0vYWxsb2NfdGFnLmNcbkBAIC04MzUsNiArODM1LDUyIEBAIHN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxuK3tcbitcdE1BX1NUQVRFKG1hcywgXHUwMDI2bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpO1xuK1x0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xuK1x0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcbitcdHN0cnVjdCBtb2R1bGUgKnZhbDtcbitcbitcdG1hc19sb2NrKFx1MDAyNm1hcyk7XG4rXHRtYXNfZm9yX2VhY2hfcmV2KFx1MDAyNm1hcywgdmFsLCAwKVxuK1x0XHRpZiAodmFsID09IG1vZClcbitcdFx0XHRicmVhaztcbitcbitcdGlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0aWYgKCF1c2VkKVxuK1x0XHRnb3RvIHJlbGVhc2VfYXJlYTtcbitcbitcdHN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMuaW5kZXgpO1xuK1x0ZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMubGFzdCk7XG4rXHRpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7XG4rXHRcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcbitcbitcdFx0Zm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyBcdTAwM2M9IGVuZF90YWc7IHRhZysrKSB7XG4rXHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xuK1xuK1x0XHRcdGlmICghdGFnLVx1MDAzZWNvdW50ZXJzKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0Y291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7XG4rXHRcdFx0cHJfaW5mbyhcIiVzOiV1IG1vZHVsZSAlcyBmdW5jOiVzIGhhcyAlbGx1IGFsbG9jYXRlZCBhdCBtb2R1bGUgdW5sb2FkXFxuXCIsXG4rXHRcdFx0XHR0YWctXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cdTAwM2VjdC5saW5lbm8sIHRhZy1cdTAwM2VjdC5tb2RuYW1lLFxuK1x0XHRcdFx0dGFnLVx1MDAzZWN0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTtcbitcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0dXNlZCA9IGZhbHNlO1xuK1x0fVxuK3JlbGVhc2VfYXJlYTpcbitcdG1hc19zdG9yZShcdTAwMjZtYXMsIHVzZWQgPyBcdTAwMjZ1bmxvYWRlZF9tb2QgOiBOVUxMKTtcbitcdHZhbCA9IG1hc19wcmV2X3JhbmdlKFx1MDAyNm1hcywgMCk7XG4rXHRpZiAodmFsID09IFx1MDAyNnByZXBlbmRfbW9kKVxuK1x0XHRtYXNfc3RvcmUoXHUwMDI2bWFzLCBOVUxMKTtcbitvdXQ6XG4rXHRtYXNfdW5sb2NrKFx1MDAyNm1hcyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRcdFx0IHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKVxuIHtcbkBAIC05MDQsMTAgKzk1MCwxMiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdFx0aW50IGdyb3dfcmVzO1xuIFxuIFx0XHRtb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICsgc2l6ZTtcbi1cdFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhdGFnc19hZGRyZXNzYWJsZSgpKSB7XG4rXHRcdGlmICghdGFnc19hZGRyZXNzYWJsZSgpKSB7XG4gXHRcdFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcbi1cdFx0XHRwcl93YXJuKFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCIsXG4tXHRcdFx0XHRtb2QtXHUwMDNlbmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpO1xuK1x0XHRcdHByX3dhcm5fb25jZShcIldpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcblwiLFxuK1x0XHRcdFx0ICAgICBtb2QtXHUwMDNlbmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpO1xuK1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XG4gXHRcdH1cbiBcbiBcdFx0Z3Jvd19yZXMgPSB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSgpO1xuQEAgLTkyMiw1MiArOTcwLDYgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRyZXR1cm4gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG9mZnNldCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4te1xuLVx0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4tXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4tXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuLVx0c3RydWN0IG1vZHVsZSAqdmFsO1xuLVxuLVx0bWFzX2xvY2soXHUwMDI2bWFzKTtcbi1cdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4tXHRcdGlmICh2YWwgPT0gbW9kKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRpZiAoIXVzZWQpXG4tXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuLVxuLVx0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XG4tXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcbi1cdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbi1cdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuLVxuLVx0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcbi1cdFx0XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XG4tXG4tXHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbi1cdFx0XHRwcl9pbmZvKFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cIixcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4tXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuLVx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHR1c2VkID0gZmFsc2U7XG4tXHR9XG4tcmVsZWFzZV9hcmVhOlxuLVx0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuLVx0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbi1cdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4tXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuLW91dDpcbi1cdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbi19XG4tXG4gc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApXG4ge1xuIFx0LyogQWxsb2NhdGUgbW9kdWxlIGFsbG9jX3RhZyBwZXJjcHUgY291bnRlcnMgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjA5OjU3Ljk5ODY1NzQ5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzkwNjAzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1vZHVsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIGxpa2UgaXQncyBhZGRyZXNzaW5nIGFuIGAtRUFHQUlOYCBlcnJvciwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbW9kdWxlIGxvYWRpbmcgaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGVzIGJlaW5nIHRvdWNoZWQgYXJlIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGBtbS9hbGxvY190YWcuY2AuIFRoZSBjb3JlIGlzc3VlIGFwcGVhcnMgdG8gYmUgd2hlbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgcmV0dXJucyBgLUVBR0FJTmAg4oCTIGFuZCB0aGF0IGhhcHBlbnMgaWYgd2UncmUgdHJ5aW5nIHRvIGxvYWQgYSBtb2R1bGUgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgZGlzYWJsZWQsIGJ1dCB3ZSd2ZSBzb21laG93IGhpdCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGFnIGJpdHMgYXZhaWxhYmxlIGluIHBhZ2UgZmxhZ3MuXG5cbk5vdywgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCwgdGhleSd2ZSBtb2RpZmllZCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgdG8gcmV0cnkgdGhlIG1vZHVsZSBsb2FkIGlmIGBtb3ZlX21vZHVsZWAgZmFpbHMgd2l0aCBgLUVBR0FJTmAuIEhhbmcgb24gYSBzZWNvbmQuLi4gYG1vdmVfbW9kdWxlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBjYWxscyBgYWxsb2NfbW9kdWxlX3RhZ3NgLCBpc24ndCBpdD8gVGhhdCBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIGNvbm5lY3Rpb24gaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgYnkgZ3JlcHBpbmcgYXJvdW5kIGZvciB0aG9zZSBmdW5jdGlvbiBuYW1lcy4gSSB3YW50IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGNvZGUgcGF0aCBjb3JyZWN0bHkgYW5kIHRoYXQgYG1vdmVfbW9kdWxlYCBpcyBhY3R1YWxseSB0aGUgYm90dGxlbmVjayBoZXJlLiBOZWVkIHRvIHZlcmlmeSB0aGF0IHJlbGF0aW9uc2hpcCBleHBsaWNpdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MDIuNzM3NzIwODY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTQ2ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfbW9kdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9tb2R1bGUvbWFpbi5jPTIzNjQ9c3RhdGljIGludCBlbGZfdmFsaWRpdHlfY2FjaGVfc3RydGFiKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yNDE1LSAqIEFzIGEgbGFzdCBzdGVwIHdlIHNldCBpbmZvLVxcdTAwM2Vtb2QgdG8gdGhlIHRlbXBvcmFyeSBjb3B5IG9mIHRoZSBtb2R1bGUgaW5cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNDE2OiAqIGluZm8tXFx1MDAzZWhkci4gVGhlIGZpbmFsIG9uZSB3aWxsIGJlIGFsbG9jYXRlZCBpbiBtb3ZlX21vZHVsZSgpLiBBbnlcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yNDE3LSAqIG1vZGlmaWNhdGlvbnMgd2UgbWFrZSB0byBvdXIgY29weSBvZiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FycmllZCBvdmVyXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNjU5PXN0YXRpYyBpbnQgZmluZF9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjc4Ny1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNzg4OnN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI3ODkte1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTg2LVxcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5ODc6XFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTg4LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MDIuNzk2ODc2MjJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTAxNzc4NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJ21vdmVfbW9kdWxlJyoqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBgbW92ZV9tb2R1bGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGl0J3Mgc3VwcG9zZWQgdG8gZG8uIElzIGl0IHJlc3BvbnNpYmxlIGZvciByZWxvY2F0aW5nIGEgbW9kdWxlIHdpdGhpbiBhIGxhcmdlciBzeXN0ZW0sIHBlcmhhcHMgcmVvcmdhbml6aW5nIGRlcGVuZGVuY2llcywgb3IgaXMgaXQgbW9yZSByZWxhdGVkIHRvIGRhdGEgdHJhbnNmZXIgb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb24/IE15IGluaXRpYWwgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW50ZW5kZWQgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGlucHV0cywgb3V0cHV0cywgYW55IGludGVybmFsIGNhbGxzIGl0IG1ha2VzIHRvIG90aGVyIGZ1bmN0aW9ucywgYW5kIGl0cyBvdmVyYWxsIGxvZ2ljLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYnkgZXhhbWluaW5nIHRoZXNlIGVsZW1lbnRzLCBJIGNhbiBxdWlja2x5IGRldmVsb3AgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IGBtb3ZlX21vZHVsZWAgZml0cyBpbnRvIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgJ3doeScgYmVoaW5kIGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgY2FuIGFzc2VzcyB0aGUgJ2hvdycuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2OTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDowNS44OTg2ODc4MTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5NzY0ODIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX21vZHVsZV90YWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDowNS45Njk2NzE3MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA1NjM3MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIEtlcm5lbCBNb2R1bGUgVGFnZ2luZyoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUga2VybmVsJ3MgbW9kdWxlIHRhZ2dpbmcgc3lzdGVtIHdvcmtzLiBXaGVyZSB3b3VsZCBJIHN0YXJ0PyBXZWxsLCBga2VybmVsL21vZHVsZS9tYWluLmNgIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gbG9vayBmb3IgdGhlIGNvcmUgbW9kdWxlIGhhbmRsaW5nIGxvZ2ljLiBNeSBndXQgc2F5cyB0aGF0IHNvbWV0aGluZyBsaWtlIGBhbGxvY190YWdgIG9yIHBlcmhhcHMgYSBmdW5jdGlvbiBuYW1lZCBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIGByZXNlcnZlX21vZHVsZV90YWdzYCB3b3VsZCBiZSBpbnZvbHZlZCBpbiwgeW91IGtub3csIGFjdHVhbGx5ICpkb2luZyogdGhlIHRhZ2dpbmcgb3IgbWFuYWdpbmcgdGhvc2UgcmVzZXJ2ZWQgaWRlbnRpZmllcnMuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhhdCBmaWxlIGFuZCBzdGFydCB0cmFjaW5nIGZyb20gdGhlcmUuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IGxpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDowOS40NzUzMTE5NTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MDE5NDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlc2VydmVfbW9kdWxlX3RhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL21vZHVsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjA5LjU3MDgyMTkzMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTA5NDk0MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIEtlcm5lbCBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gZGlnIGludG8gaG93IG1vZHVsZSBhbGxvY2F0aW9uIHRhZ3MgYXJlIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gbG9vayBhdCB0aGUgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBmaWxlLCBzaW5jZSB0aGF0J3MgZ2VuZXJhbGx5IHdoZXJlIGEgbG90IG9mIHRoZSBjb3JlIG1vZHVsZSBsb2FkaW5nIGFuZCBpbml0aWFsaXphdGlvbiBsb2dpYyByZXNpZGVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBzZWFyY2ggZm9yIHRoZSB0ZXJtIGBhbGxvY190YWdgIHdpdGhpbiB0aGF0IGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHRhZ3MgYXJlIGRlZmluZWQsIHVzZWQsIGFuZCBtYW5hZ2VkIGR1cmluZyBtb2R1bGUgbGlmZWN5Y2xlIGV2ZW50cy4gSSBleHBlY3QgdGhpcyBzZWFyY2ggd2lsbCBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhlIGFsbG9jYXRpb24gdGFnZ2luZy4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBtb2R1bGUgbWFuYWdlbWVudCBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDoxMi42NjE3NzM3ODlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTIxMDQwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY190YWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL21vZHVsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjEyLjc1MTcwMzg5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg1MzAwODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi5cblxuKipEZWNvbnN0cnVjdGluZyB0aGUgTW9kdWxlIFJlbG9jYXRpb24gUHJvY2VzcyoqXG5cbkhvbGQgb24gYSBzZWNvbmQuIEkgdGhvdWdodCBgbW92ZV9tb2R1bGVgIHdhcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgLiBCdXQgbG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQgbG9va3MgbGlrZSBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgaXMgYWN0dWFsbHkgdGhlIG9uZSB0aGF0IGRvZXMgdGhhdCBwYXJ0aWN1bGFyIGpvYi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhpcyBzdHJhaWdodC4gTGV0J3MgZ28gYmFjayBhbmQgY2hlY2suIEkgdGhpbmsgSSdsbCBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AsIHNwZWNpZmljYWxseSBpbiB0aGUgYG1vdmVfbW9kdWxlYCBmdW5jdGlvbi4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBtb2R1bGUgcmVsb2NhdGlvbiBwcm9jZXNzIGJ5IGdvaW5nIG92ZXIgdGhlIGNvZGUuIFRpbWUgdG8gZGl2ZSBpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzYxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MTYuMzM3MDA3NzY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbW9kdWxlL21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzg4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc4ODpcXHRzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4yNzg5OlxcdHtcXG4yNzkwOlxcdFxcdGludCBpLCByZXQ7XFxuMjc5MTpcXHRcXHRlbnVtIG1vZF9tZW1fdHlwZSB0ID0gTU9EX01FTV9OVU1fVFlQRVM7XFxuMjc5MjpcXHRcXHRib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlO1xcbjI3OTM6XFx0XFxuMjc5NDpcXHRcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xcbjI3OTU6XFx0XFx0XFx0aWYgKCFtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplKSB7XFxuMjc5NjpcXHRcXHRcXHRcXHRtb2QtXFx1MDAzZW1lbVt0eXBlXS5iYXNlID0gTlVMTDtcXG4yNzk3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI3OTg6XFx0XFx0XFx0fVxcbjI3OTk6XFx0XFxuMjgwMDpcXHRcXHRcXHRyZXQgPSBtb2R1bGVfbWVtb3J5X2FsbG9jKG1vZCwgdHlwZSk7XFxuMjgwMTpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMjgwMjpcXHRcXHRcXHRcXHR0ID0gdHlwZTtcXG4yODAzOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4yODA0OlxcdFxcdFxcdH1cXG4yODA1OlxcdFxcdH1cXG4yODA2OlxcdFxcbjI4MDc6XFx0XFx0LyogVHJhbnNmZXIgZWFjaCBzZWN0aW9uIHdoaWNoIHNwZWNpZmllcyBTSEZfQUxMT0MgKi9cXG4yODA4OlxcdFxcdHByX2RlYnVnKFxcXCJGaW5hbCBzZWN0aW9uIGFkZHJlc3NlcyBmb3IgJXM6XFxcXG5cXFwiLCBtb2QtXFx1MDAzZW5hbWUpO1xcbjI4MDk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluZm8tXFx1MDAzZWhkci1cXHUwMDNlZV9zaG51bTsgaSsrKSB7XFxuMjgxMDpcXHRcXHRcXHR2b2lkICpkZXN0O1xcbjI4MTE6XFx0XFx0XFx0RWxmX1NoZHIgKnNoZHIgPSBcXHUwMDI2aW5mby1cXHUwMDNlc2VjaGRyc1tpXTtcXG4yODEyOlxcdFxcdFxcdGNvbnN0IGNoYXIgKnNuYW1lO1xcbjI4MTM6XFx0XFxuMjgxNDpcXHRcXHRcXHRpZiAoIShzaGRyLVxcdTAwM2VzaF9mbGFncyBcXHUwMDI2IFNIRl9BTExPQykpXFxuMjgxNTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yODE2OlxcdFxcbjI4MTc6XFx0XFx0XFx0c25hbWUgPSBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzICsgc2hkci1cXHUwMDNlc2hfbmFtZTtcXG4yODE4OlxcdFxcdFxcdC8qXFxuMjgxOTpcXHRcXHRcXHQgKiBMb2FkIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseSBhcyB0aGV5IG1pZ2h0IHN0aWxsIGJlIHVzZWRcXG4yODIwOlxcdFxcdFxcdCAqIGFmdGVyIG1vZHVsZSB1bmxvYWQuXFxuMjgyMTpcXHRcXHRcXHQgKi9cXG4yODIyOlxcdFxcdFxcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXFx1MDAzZXNoX3NpemUpKSB7XFxuMjgyMzpcXHRcXHRcXHRcXHRkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplLFxcbjI4MjQ6XFx0XFx0XFx0XFx0XFx0XFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXFx1MDAzZXNoX2FkZHJhbGlnbik7XFxuMjgyNTpcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTighZGVzdCkpIHtcXG4yODI2OlxcdFxcdFxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuMjgyNzpcXHRcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMjgyODpcXHRcXHRcXHRcXHR9XFxuMjgyOTpcXHRcXHRcXHRcXHRpZiAoSVNfRVJSKGRlc3QpKSB7XFxuMjgzMDpcXHRcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKGRlc3QpO1xcbjI4MzE6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbjI4MzI6XFx0XFx0XFx0XFx0fVxcbjI4MzM6XFx0XFx0XFx0XFx0Y29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gdHJ1ZTtcXG4yODM0OlxcdFxcdFxcdH0gZWxzZSB7XFxuMjgzNTpcXHRcXHRcXHRcXHRlbnVtIG1vZF9tZW1fdHlwZSB0eXBlID0gc2hkci1cXHUwMDNlc2hfZW50c2l6ZSBcXHUwMDNlXFx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XFxuMjgzNjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG9mZnNldCA9IHNoZHItXFx1MDAzZXNoX2VudHNpemUgXFx1MDAyNiBTSF9FTlRTSVpFX09GRlNFVF9NQVNLO1xcbjI4Mzc6XFx0XFxuMjgzODpcXHRcXHRcXHRcXHRkZXN0ID0gbW9kLVxcdTAwM2VtZW1bdHlwZV0uYmFzZSArIG9mZnNldDtcXG4yODM5OlxcdFxcdFxcdH1cXG4yODQwOlxcdFxcbjI4NDE6XFx0XFx0XFx0aWYgKHNoZHItXFx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xcbjI4NDI6XFx0XFx0XFx0XFx0LypcXG4yODQzOlxcdFxcdFxcdFxcdCAqIE91ciBFTEYgY2hlY2tlciBhbHJlYWR5IHZhbGlkYXRlZCB0aGlzLCBidXQgbGV0J3NcXG4yODQ0OlxcdFxcdFxcdFxcdCAqIGJlIHBlZGFudGljIGFuZCBtYWtlIHRoZSBnb2FsIGNsZWFyZXIuIFdlIGFjdHVhbGx5XFxuMjg0NTpcXHRcXHRcXHRcXHQgKiBlbmQgdXAgY29weWluZyBvdmVyIGFsbCBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlXFxuMjg0NjpcXHRcXHRcXHRcXHQgKiB1c2Vyc3BhY2UgY29weSBvZiB0aGUgZW50aXJlIHN0cnVjdCBtb2R1bGUuXFxuMjg0NzpcXHRcXHRcXHRcXHQgKi9cXG4yODQ4OlxcdFxcdFxcdFxcdGlmIChpID09IGluZm8tXFx1MDAzZWluZGV4Lm1vZCBcXHUwMDI2XFx1MDAyNlxcbjI4NDk6XFx0XFx0XFx0XFx0ICAgKFdBUk5fT05fT05DRShzaGRyLVxcdTAwM2VzaF9zaXplICE9IHNpemVvZihzdHJ1Y3QgbW9kdWxlKSkpKSB7XFxuMjg1MDpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtRU5PRVhFQztcXG4yODUxOlxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4yODUyOlxcdFxcdFxcdFxcdH1cXG4yODUzOlxcdFxcdFxcdFxcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXFx1MDAzZXNoX2FkZHIsIHNoZHItXFx1MDAzZXNoX3NpemUpO1xcbjI4NTQ6XFx0XFx0XFx0fVxcbjI4NTU6XFx0XFx0XFx0LypcXG4yODU2OlxcdFxcdFxcdCAqIFVwZGF0ZSB0aGUgdXNlcnNwYWNlIGNvcHkncyBFTEYgc2VjdGlvbiBhZGRyZXNzIHRvIHBvaW50IHRvXFxuMjg1NzpcXHRcXHRcXHQgKiBvdXIgbmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBhcyBhIHB1cmUgY29udmVuaWVuY2Ugc28gdGhhdFxcbjI4NTg6XFx0XFx0XFx0ICogdXNlcnMgb2YgaW5mbyBjYW4ga2VlcCB0YWtpbmcgYWR2YW50YWdlIGFuZCB1c2luZyB0aGUgbmV3bHlcXG4yODU5OlxcdFxcdFxcdCAqIG1pbnRlZCBvZmZpY2lhbCBtZW1vcnkgYXJlYS5cXG4yODYwOlxcdFxcdFxcdCAqL1xcbjI4NjE6XFx0XFx0XFx0c2hkci1cXHUwMDNlc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7XFxuMjg2MjpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiXFxcXHQweCVseCAweCUuOGx4ICVzXFxcXG5cXFwiLCAobG9uZylzaGRyLVxcdTAwM2VzaF9hZGRyLFxcbjI4NjM6XFx0XFx0XFx0XFx0IChsb25nKXNoZHItXFx1MDAzZXNoX3NpemUsIGluZm8tXFx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVxcdTAwM2VzaF9uYW1lKTtcXG4yODY0OlxcdFxcdH1cXG4yODY1OlxcdFxcbjI4NjY6XFx0XFx0cmV0dXJuIDA7XFxuMjg2NzpcXHRvdXRfZXJyOlxcbjI4Njg6XFx0XFx0bW9kdWxlX21lbW9yeV9yZXN0b3JlX3JveChtb2QpO1xcbjI4Njk6XFx0XFx0d2hpbGUgKHQtLSlcXG4yODcwOlxcdFxcdFxcdG1vZHVsZV9tZW1vcnlfZnJlZShtb2QsIHQpO1xcbjI4NzE6XFx0XFx0aWYgKGNvZGV0YWdfc2VjdGlvbl9mb3VuZClcXG4yODcyOlxcdFxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcXG4yODczOlxcdFxcbjI4NzQ6XFx0XFx0cmV0dXJuIHJldDtcXG4yODc1OlxcdH1cXG4yODc2OlxcdFxcbjI4Nzc6XFx0c3RhdGljIGludCBjaGVja19leHBvcnRfc3ltYm9sX3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4yODc4OlxcdHtcXG4yODc5OlxcdFxcdGlmIChtb2QtXFx1MDAzZW51bV9zeW1zIFxcdTAwMjZcXHUwMDI2ICFtb2QtXFx1MDAzZWZsYWdzdGFiKSB7XFxuMjg4MDpcXHRcXHRcXHRwcl9lcnIoXFxcIiVzOiBubyBmbGFncyBmb3IgZXhwb3J0ZWQgc3ltYm9sc1xcXFxuXFxcIiwgbW9kLVxcdTAwM2VuYW1lKTtcXG4yODgxOlxcdFxcdFxcdHJldHVybiAtRU5PRVhFQztcXG4yODgyOlxcdFxcdH1cXG4yODgzOlxcdCNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlNcXG4yODg0OlxcdFxcdGlmIChtb2QtXFx1MDAzZW51bV9zeW1zIFxcdTAwMjZcXHUwMDI2ICFtb2QtXFx1MDAzZWNyY3MpIHtcXG4yODg1OlxcdFxcdFxcdHJldHVybiB0cnlfdG9fZm9yY2VfbG9hZChtb2QsXFxuMjg4NjpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcIm5vIHZlcnNpb25zIGZvciBleHBvcnRlZCBzeW1ib2xzXFxcIik7XFxuMjg4NzpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjE2LjMzNzI5ODQwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc2MTI2MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gKipcblxuUmlnaHQsIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYCBoYXMgYmVlbiBpbnZva2VkLiBMZXQncyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCBpdHMgcHVycG9zZS4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcy4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgbWFuYWdlcyB0aGUgYWxsb2NhdGlvbiBvZiBhIHNwZWNpZmljIHNlY3Rpb24gd2l0aGluIGEgY29kZSB0YWcgc3RydWN0dXJlLCByaWdodD8gUHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZS4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGl0J3MgaGFuZGxpbmcgdGhlIGluaXRpYWwgYWxsb2NhdGlvbiwgb3IgaXMgcGFydCBvZiBhIGxhcmdlciBhbGxvY2F0aW9uIHNjaGVtZSBmb3IgdGhlIHNlY3Rpb25zIHRoZW1zZWx2ZXMuIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoZSBwYXJhbWV0ZXJzIGl0IHJlY2VpdmVzLCBhbmQgdGhlbiB0cmFjZSBpdHMgZXhlY3V0aW9uIHBhdGguIEknbSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBwcmltaXRpdmVzLCBhbmQgbWF5YmUgc29tZSBraW5kIG9mIHNlY3Rpb24gbWV0YWRhdGEgbWFuYWdlbWVudC4gSG9wZWZ1bGx5LCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBkZWNlbnQgZW5vdWdoIHRvIHByb3ZpZGUgc29tZSB1c2VmdWwgaGludHMuIEl0IGNvdWxkIGJlIHNvbWV0aGluZyBhcyBzaW1wbGUgYXMgZW5zdXJpbmcgdGhlcmUncyBzcGFjZSBmb3IgYSBuZXcgbW9kdWxlIG9yIGFzIGludHJpY2F0ZSBhcyBoYW5kbGluZyBzaGFyZWQgY29kZSBzZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEyNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MTkuOTEzNDI3MjQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ4Njk3NjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY29kZXRhZy5oPTkyPWJvb2wgY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTMtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNpemUpO1xcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk0OnZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTk1LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD0xMDc9c3RhdGljIGlubGluZSB2b2lkICpcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMDg6Y29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTA5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgcHJlcGVuZCxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI3ODg9c3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODIyLVxcdFxcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXFx1MDAzZXNoX3NpemUpKSB7XFxua2VybmVsL21vZHVsZS9tYWluLmM6MjgyMzpcXHRcXHRcXHRkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4MjQtXFx0XFx0XFx0XFx0XFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXFx1MDAzZXNoX2FkZHJhbGlnbik7XFxuLS1cXG5saWIvY29kZXRhZy5jPTI1Mz1ib29sIGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubGliL2NvZGV0YWcuYy0yODAtXFxubGliL2NvZGV0YWcuYzoyODE6dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxubGliL2NvZGV0YWcuYy0yODItXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgcHJlcGVuZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6MjIuNTYyMTI5NDg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzI0NDcxODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RldGFnIEFsbG9jYXRpb24gTW9kdWxlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoZSBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAgZnVuY3Rpb24gd2l0aGluIGBsaWIvY29kZXRhZy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGNvZGV0YWcgbW9kdWxlIGlzIGFsbG9jYXRpbmcgaXRzIHJlc291cmNlcy4gVGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsLCBiZWNhdXNlIHByb3BlciBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IGFyZSBmdW5kYW1lbnRhbCB0byBtZW1vcnkgc2FmZXR5IGFuZCBwZXJmb3JtYW5jZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGFsbG9jYXRpb24gc3RyYXRlZ2llcyB1c2VkOiBhcmUgd2UgZGVhbGluZyB3aXRoIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJsb2NrcywgZHluYW1pYyBhbGxvY2F0aW9uIHdpdGggYG1hbGxvY2AsIGEgY3VzdG9tIGFsbG9jYXRvciwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEkgYWxzbyBuZWVkIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg1NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjI1LjU5NDU4MDkzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL2NvZGV0YWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODE6XFx0dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuIDI4MjpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBwcmVwZW5kLFxcbiAyODM6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhbGlnbilcXG4gMjg0OlxcdHtcXG4gMjg1OlxcdFxcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IG5hbWUgKyBzdHJsZW4oQ09ERVRBR19TRUNUSU9OX1BSRUZJWCk7XFxuIDI4NjpcXHRcXHRzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGU7XFxuIDI4NzpcXHRcXHR2b2lkICpyZXQgPSBFUlJfUFRSKC1FSU5WQUwpO1xcbiAyODg6XFx0XFxuIDI4OTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZjb2RldGFnX2xvY2spO1xcbiAyOTA6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFxcdTAwMjZjb2RldGFnX3R5cGVzLCBsaW5rKSB7XFxuIDI5MTpcXHRcXHRcXHRpZiAoc3RyY21wKHR5cGVfbmFtZSwgY3R0eXBlLVxcdTAwM2VkZXNjLnNlY3Rpb24pID09IDApIHtcXG4gMjkyOlxcdFxcdFxcdFxcdGlmIChXQVJOX09OKCFjdHR5cGUtXFx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW0pKVxcbiAyOTM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbiAyOTY6XFx0XFx0XFx0XFx0cmV0ID0gY3R0eXBlLVxcdTAwM2VkZXNjLmFsbG9jX3NlY3Rpb25fbWVtKG1vZCwgc2l6ZSwgcHJlcGVuZCwgYWxpZ24pO1xcbiAyOTc6XFx0XFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbiAyOTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDI5OTpcXHRcXHRcXHR9XFxuIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNvZGV0YWdfbG9jayk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHJldHVybiByZXQ7XFxuIDMwNDpcXHR9XFxuIDMwNTpcXHRcXG4gMzA2OlxcdHZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpXFxuIDMwNzpcXHR7XFxuIDMwODpcXHRcXHRzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGU7XFxuIDMwOTpcXHRcXG4gMzEwOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvZGV0YWdfbG9jayk7XFxuIDMxMTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0dHlwZSwgXFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcXG4gMzEyOlxcdFxcdFxcdGlmICghY3R0eXBlLVxcdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXFxuIDMxMzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzE0OlxcdFxcbiAzMTU6XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIDMxNjpcXHRcXHRcXHRjdHR5cGUtXFx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbShtb2QsIGZhbHNlKTtcXG4gMzE3OlxcdFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9sb2NrKTtcXG4gMzE4OlxcdFxcdH1cXG4gMzE5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29kZXRhZ19sb2NrKTtcXG4gMzIwOlxcdH1cXG4gMzIxOlxcdFxcbiAzMjI6XFx0dm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpXFxuIDMyMzpcXHR7XFxuIDMyNDpcXHRcXHRzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGU7XFxuIDMyNTpcXHRcXG4gMzI2OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvZGV0YWdfbG9jayk7XFxuIDMyNzpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0dHlwZSwgXFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcXG4gMzI4OlxcdFxcdFxcdGlmICghY3R0eXBlLVxcdTAwM2VkZXNjLm1vZHVsZV9yZXBsYWNlZClcXG4gMzI5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMzA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjI1LjU5NDczMTcyN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTc0MTUzODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gYGFsbG9jX3NlY3Rpb25fbWVtYCBoYXMgYmVlbiBjYWxsZWQuIFRoYXQncyBvdXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgdGhlIGNydWNpYWwgdGhpbmcgaXMgdG8gdW5kZXJzdGFuZCB3aGVyZSBhbmQgaG93IHRoaXMgYGFsbG9jX3NlY3Rpb25fbWVtYCBmdW5jdGlvbiBpcyBhY3R1YWxseSAqZGVmaW5lZCogb3IsIG1vcmUgcHJlY2lzZWx5LCAqc2V0Ki4gSXQncyBub3QgZW5vdWdoIHRvIGtub3cgaXQncyBiZWluZyBjYWxsZWQ7IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIGl0cyBvcmlnaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgYWxsb2NhdGlvbiBpcyBoYXBwZW5pbmcuIFdoYXQncyBkcml2aW5nIHRoaXMgY2FsbD8gV2hlcmUgaXMgdGhlIG1lbW9yeSBhY3R1YWxseSBiZWluZyBtYW5hZ2VkPyBJcyB0aGlzIGR5bmFtaWMgYWxsb2NhdGlvbj8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBtZW1vcnkgbWFwPyBLbm93aW5nIHRoZSBsb2NhdGlvbiBvZiBpdHMgc2V0dXAgd2lsbCB1bmxvY2sgYSBmYXIgbW9yZSBjb21wcmVoZW5zaXZlIGdyYXNwIG9mIHRoZSBwcm9jZXNzLiBJIHdhbnQgdGhlIGJyZWFkY3J1bWJzOyBJIHdhbnQgdG8gZm9sbG93IHRoZSBjYWxsIHN0YWNrIHVwc3RyZWFtIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBwaWN0dXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMDozMC4xNjg4ODc2ODlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjQ3MjA4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2VjdGlvbl9tZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY29kZXRhZy5oPTM5PXN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC00OC1cXHRib29sICgqbmVlZHNfc2VjdGlvbl9tZW0pKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDo0OTpcXHR2b2lkICooKmFsbG9jX3NlY3Rpb25fbWVtKShzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC01MC1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcHJlcGVuZCwgdW5zaWduZWQgbG9uZyBhbGlnbik7XFxuLS1cXG5saWIvYWxsb2NfdGFnLmM9OTgzPXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXFxuLS1cXG5saWIvYWxsb2NfdGFnLmMtOTg5LVxcdFxcdC5uZWVkc19zZWN0aW9uX21lbVxcdD0gbmVlZHNfc2VjdGlvbl9tZW0sXFxubGliL2FsbG9jX3RhZy5jOjk5MDpcXHRcXHQuYWxsb2Nfc2VjdGlvbl9tZW1cXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXFxubGliL2FsbG9jX3RhZy5jLTk5MS1cXHRcXHQuZnJlZV9zZWN0aW9uX21lbVxcdD0gcmVsZWFzZV9tb2R1bGVfdGFncyxcXG4tLVxcbmxpYi9jb2RldGFnLmM9MjgxPXZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubGliL2NvZGV0YWcuYy0yOTEtXFx0XFx0aWYgKHN0cmNtcCh0eXBlX25hbWUsIGN0dHlwZS1cXHUwMDNlZGVzYy5zZWN0aW9uKSA9PSAwKSB7XFxubGliL2NvZGV0YWcuYzoyOTI6XFx0XFx0XFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cXHUwMDNlZGVzYy5hbGxvY19zZWN0aW9uX21lbSkpXFxubGliL2NvZGV0YWcuYy0yOTMtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5saWIvY29kZXRhZy5jLTI5NS1cXHRcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9sb2NrKTtcXG5saWIvY29kZXRhZy5jOjI5NjpcXHRcXHRcXHRyZXQgPSBjdHR5cGUtXFx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW0obW9kLCBzaXplLCBwcmVwZW5kLCBhbGlnbik7XFxubGliL2NvZGV0YWcuYy0yOTctXFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9MTMyND1zdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMTMzMC1cXHRcXHQubmVlZHNfc2VjdGlvbl9tZW1cXHQ9IG5lZWRzX3NlY3Rpb25fbWVtLFxcbm1tL2FsbG9jX3RhZy5jOjEzMzE6XFx0XFx0LmFsbG9jX3NlY3Rpb25fbWVtXFx0PSByZXNlcnZlX21vZHVsZV90YWdzLFxcbm1tL2FsbG9jX3RhZy5jLTEzMzItXFx0XFx0LmZyZWVfc2VjdGlvbl9tZW1cXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjMyLjc5MzYxNTI4NFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUxODQxNTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRoZSBrZXkgY2hhbmdlIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHJlbGF0ZWQgdG8gYHJlc2VydmVfbW9kdWxlX3RhZ3NgLiBSaWdodCwgdGhhdCBmdW5jdGlvbiBuYW1lIGNsaWNrcy4gQW5kIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIHRvIHJldHVybiBgRVJSX1BUUigtRUFHQUlOKWAgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb24uIExldCBtZSBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgLSBpZiBgIXRhZ3NfYWRkcmVzc2FibGUoKWAsIGl0IHJldHVybnMgYW4gZXJyb3IuIFRoZSBwYXRjaCBpcyB3b3JraW5nIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLCB3aGljaCBpcyB0aGUgY29ycmVjdCBmaWxlLiBOb3cgbGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24gYHJlc2VydmVfbW9kdWxlX3RhZ3NgIHRvIHByb3Blcmx5IGFzc2VzcyB0aGUgZWZmZWN0cyBvZiB0aGUgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjM2LjI0NTQ1OTcyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vYWxsb2NfdGFnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQ1OlxcdFxcbiA5NDY6XFx0XFx0aWYgKElTX0VSUihyZXQpKVxcbiA5NDc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gOTQ4OlxcdFxcbiA5NDk6XFx0XFx0aWYgKG1vZHVsZV90YWdzLnNpemUgXFx1MDAzYyBvZmZzZXQgKyBzaXplKSB7XFxuIDk1MDpcXHRcXHRcXHRpbnQgZ3Jvd19yZXM7XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdFxcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xcbiA5NTM6XFx0XFx0XFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcXG4gOTU0OlxcdFxcdFxcdFxcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XFxuIDk1NTpcXHRcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcIldpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcXFxuXFxcIixcXG4gOTU2OlxcdFxcdFxcdFxcdFxcdCAgICAgbW9kLVxcdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XFxuIDk1NzpcXHRcXHRcXHRcXHRyZWxlYXNlX21vZHVsZV90YWdzKG1vZCwgZmFsc2UpO1xcbiA5NTg6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XFxuIDk1OTpcXHRcXHRcXHR9XFxuIDk2MDpcXHRcXG4gOTYxOlxcdFxcdFxcdGdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTtcXG4gOTYyOlxcdFxcdFxcdGlmIChncm93X3Jlcykge1xcbiA5NjM6XFx0XFx0XFx0XFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcXG4gOTY0OlxcdFxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuIDk2NTpcXHRcXHRcXHRcXHQgICAgICAgbW9kLVxcdTAwM2VuYW1lKTtcXG4gOTY2OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGdyb3dfcmVzKTtcXG4gOTY3OlxcdFxcdFxcdH1cXG4gOTY4OlxcdFxcdH1cXG4gOTY5OlxcdFxcbiA5NzA6XFx0XFx0cmV0dXJuIChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBvZmZzZXQpO1xcbiA5NzE6XFx0fVxcbiA5NzI6XFx0XFxuIDk3MzpcXHRzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcXG4gOTc0OlxcdHtcXG4gOTc1OlxcdFxcdC8qIEFsbG9jYXRlIG1vZHVsZSBhbGxvY190YWcgcGVyY3B1IGNvdW50ZXJzICovXFxuIDk3NjpcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XFxuIDk3NzpcXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdG9wX3RhZztcXG4gOTc4OlxcdFxcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcXG4gOTc5OlxcdFxcbiA5ODA6XFx0XFx0LyogcGVyY3B1IGNvdW50ZXJzIGZvciBjb3JlIGFsbG9jYXRpb25zIGFyZSBhbHJlYWR5IHN0YXRpY2FsbHkgYWxsb2NhdGVkICovXFxuIDk4MTpcXHRcXHRpZiAoIW1vZClcXG4gOTgyOlxcdFxcdFxcdHJldHVybiAwO1xcbiA5ODM6XFx0XFxuIDk4NDpcXHRcXHRzdGFydF90YWcgPSBjdF90b19hbGxvY190YWcoc3RhcnQpO1xcbiA5ODU6XFx0XFx0c3RvcF90YWcgPSBjdF90b19hbGxvY190YWcoc3RvcCk7XFxuIDk4NjpcXHRcXHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFxcdTAwM2Mgc3RvcF90YWc7IHRhZysrKSB7XFxuIDk4NzpcXHRcXHRcXHRXQVJOX09OKHRhZy1cXHUwMDNlY291bnRlcnMpO1xcbiA5ODg6XFx0XFx0XFx0dGFnLVxcdTAwM2Vjb3VudGVycyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzKTtcXG4gOTg5OlxcdFxcdFxcdGlmICghdGFnLVxcdTAwM2Vjb3VudGVycykge1xcbiA5OTA6XFx0XFx0XFx0XFx0d2hpbGUgKC0tdGFnIFxcdTAwM2U9IHN0YXJ0X3RhZykge1xcbiA5OTE6XFx0XFx0XFx0XFx0XFx0ZnJlZV9wZXJjcHUodGFnLVxcdTAwM2Vjb3VudGVycyk7XFxuIDk5MjpcXHRcXHRcXHRcXHRcXHR0YWctXFx1MDAzZWNvdW50ZXJzID0gTlVMTDtcXG4gOTkzOlxcdFxcdFxcdFxcdH1cXG4gOTk0OlxcdFxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWcgcGVyY3B1IGNvdW50ZXJzIGluIHRoZSBtb2R1bGUgJXNcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjM2LjI0NTcwMDE4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTAyNDAyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1vZHVsZSBMb2FkaW5nIEJlaGF2aW9yIHdpdGggTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIHRoaXMgY2hhbmdlIGluIHRoZSBtb2R1bGUgbG9hZGVyLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gaXMgc2V0IHVwIHNvIHRoYXQgaWYgYCF0YWdzX2FkZHJlc3NhYmxlKClgIHJldHVybnMgdHJ1ZSwgbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZCBhbmQgYW4gYC1FQUdBSU5gIGVycm9yIGlzIHJldHVybmVkLiBUaGF0J3MgYSBrZXkgcG9pbnQuIFRoaXMgYC1FQUdBSU5gIGdldHMgcGFzc2VkIGJhY2sgdXAgdGhlIGNhbGwgc3RhY2ssIHNwZWNpZmljYWxseSB0aHJvdWdoIGBtb3ZlX21vZHVsZWAuIFRoZW4sIGRvd24gaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgLCB0aGUgY29kZSBhY3RpdmVseSAqY2F0Y2hlcyogdGhhdCBgLUVBR0FJTmAgZXJyb3IsIHJlc2V0cyBzb21lIGludGVybmFsIHN0YXRlLCBhbmQgdGhlbiAqcmV0cmllcyogdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gVGhhdCdzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBpc24ndCBpdD8gSXQgZXNzZW50aWFsbHkgaW50cm9kdWNlcyBhIHJldHJ5IG1lY2hhbmlzbSBpbiByZXNwb25zZSB0byBhIHNwZWNpZmljIGNvbmRpdGlvbi5cblxuVGhlIG5leHQgcXVlc3Rpb24gaXMsIFwiV2hlbiBpcyB0aGlzIGFjdHVhbGx5IGhpdD9cIiBJdCdzIHJlYWNoYWJsZSBpZiBhIG1vZHVsZSBpcyBsb2FkZWQgYW5kIGAhdGFnc19hZGRyZXNzYWJsZSgpYCBpcyB0cnVlIGF0IGFueSBwb2ludC4gVGhlbiBJIHJlbWVtYmVyIHRoYXQgYHRhZ3NfYWRkcmVzc2FibGUoKWAgaXRzZWxmIGlzIGNoZWNraW5nIGlmIHRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBjYW4gZml0IHdpdGhpbiB0aGUgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLiBUaGF0IGltcGxpZXMgdGhpcyBpcyBkaXJlY3RseSByZWxhdGVkIHRvIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQuIFJpZ2h0LCB0aGUgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBjb25maWcgb3B0aW9uLiBTbywgdGhpcyByZXRyeSBiZWhhdmlvciBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBhY3RpdmUgYW5kIHRoZSB0YWdzIGFyZSB0b28gYmlnIHRvIGZpdCBpbiB0aGUgcGFnZSBmbGFncywgdGhlbiBpdCBzaG91bGQgdHJpZ2dlciBgLUVBR0FJTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQ0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6NDEuMzQ4MTA1NzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDAyODU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMxMT1jb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMyMy1cXG5tbS9LY29uZmlnLmRlYnVnOjMyNDpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL0tjb25maWcuZGVidWctMzI1LVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMzNy1cXG5tbS9LY29uZmlnLmRlYnVnOjMzODpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG5tbS9LY29uZmlnLmRlYnVnLTMzOS1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDAtXFx0ZGVmYXVsdCB5XFxubW0vS2NvbmZpZy5kZWJ1ZzozNDE6XFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDM6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTM0NC1cXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDUtXFx0ZGVmYXVsdCBuXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDY6XFx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDc6XFx0c2VsZWN0IE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDgtXFx0aGVscFxcbi0tXFxubW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xcbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgKz0gYWxsb2NfdGFnLm9cXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTI4LVxcbm1tL2FsbG9jX3RhZy5jOjI5OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG5tbS9hbGxvY190YWcuYy0zMC1zdGF0aWMgYm9vbCBtZW1fcHJvZmlsaW5nX3N1cHBvcnQgPSB0cnVlO1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9NDg9RVhQT1JUX1NZTUJPTChfc2hhcmVkX2FsbG9jX3RhZyk7XFxuLS1cXG5tbS9hbGxvY190YWcuYy01MC1cXG5tbS9hbGxvY190YWcuYzo1MTpERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXFxubW0vYWxsb2NfdGFnLmMtNTItXFx0XFx0XFx0bWVtX2FsbG9jX3Byb2ZpbGluZ19rZXkpO1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9MTExNj1zdGF0aWMgX19pbml0IGJvb2wgbmVlZF9wYWdlX2FsbG9jX3RhZ2dpbmcodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTExMjMtXFxubW0vYWxsb2NfdGFnLmM6MTEyNDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9hbGxvY190YWcuYy0xMTI1LS8qXFxuLS1cXG5tbS9hbGxvY190YWcuYz0xMjAyPXN0YXRpYyB2b2lkIF9faW5pdCBjbGVhcl9lYXJseV9hbGxvY19wZm5fdGFnX3JlZnModm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEyNTUtfVxcbm1tL2FsbG9jX3RhZy5jOjEyNTY6I2Vsc2UgLyogIUNPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxubW0vYWxsb2NfdGFnLmMtMTI1Ny1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNsZWFyX2Vhcmx5X2FsbG9jX3Bmbl90YWdfcmVmcyh2b2lkKSB7fVxcbm1tL2FsbG9jX3RhZy5jOjEyNTg6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxubW0vYWxsb2NfdGFnLmMtMTI1OS1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEyNzc9c3RhdGljIGludCBwcm9jX21lbV9wcm9maWxpbmdfaGFuZGxlcihjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLFxcbi0tXFxubW0vYWxsb2NfdGFnLmMtMTI4OC1cXG5tbS9hbGxvY190YWcuYzoxMjg5OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbm1tL2FsbG9jX3RhZy5jLTEyOTAtXFx0XFx0LyogVXNlciBjYW4ndCB0b2dnbGUgcHJvZmlsaW5nIHdoaWxlIGRlYnVnZ2luZyAqL1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEyMjA9c3RhdGljIHZvaWQgY2xlYXJfaGlnaHBhZ2VzX2thc2FuX3RhZ2dlZChzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTEyMzQtXFxubW0vcGFnZV9hbGxvYy5jOjEyMzU6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vcGFnZV9hbGxvYy5jLTEyMzYtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTMwMT1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTEzMDYtXFxubW0vcGFnZV9hbGxvYy5jOjEzMDc6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cXG5tbS9wYWdlX2FsbG9jLmMtMTMwOC1cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMzEyPXN0YXRpYyBpbmxpbmUgdm9pZCBwZ2FsbG9jX3RhZ19zdWJfcGFnZXMoc3RydWN0IGFsbG9jX3RhZyAqdGFnLCB1bnNpZ25lZCBpbnQgbnIpIHt9XFxubW0vcGFnZV9hbGxvYy5jLTEzMTMtXFxubW0vcGFnZV9hbGxvYy5jOjEzMTQ6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vcGFnZV9hbGxvYy5jLTEzMTUtXFxuLS1cXG5tbS9wYWdlX2V4dC5jPTgwPXN0YXRpYyBzdHJ1Y3QgcGFnZV9leHRfb3BlcmF0aW9ucyAqcGFnZV9leHRfb3BzW10gX19pbml0ZGF0YSA9IHtcXG4tLVxcbm1tL3BhZ2VfZXh0LmMtODYtI2VuZGlmXFxubW0vcGFnZV9leHQuYzo4NzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9wYWdlX2V4dC5jLTg4LVxcdFxcdTAwMjZwYWdlX2FsbG9jX3RhZ2dpbmdfb3BzLFxcbi0tXFxubW0vcGFnZV9leHQuYz0xMDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXNhZ2U7XFxubW0vcGFnZV9leHQuYy0xMDEtXFxubW0vcGFnZV9leHQuYzoxMDI6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vcGFnZV9leHQuYy0xMDMtLypcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTM1PXN0cnVjdCBwY3B1b2JqX2V4dCB7XFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0zOC0jZW5kaWZcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDozOTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00MC1cXHR1bmlvbiBjb2RldGFnX3JlZlxcdHRhZztcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQzLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjQ0OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgfHwgZGVmaW5lZChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORylcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00NS0jZGVmaW5lIE5FRURfUENQVU9CSl9FWFRcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTkwPXN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3BjcHVvYmpfZXh0KHZvaWQpXFxubW0vcGVyY3B1LWludGVybmFsLmgtOTEte1xcbm1tL3BlcmNwdS1pbnRlcm5hbC5oOjkyOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSlcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3BlcmNwdS5jPTE2OTA9c3RhdGljIHZvaWQgcGNwdV9tZW1jZ19mcmVlX2hvb2soc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL3BlcmNwdS5jLTE2OTQtXFxubW0vcGVyY3B1LmM6MTY5NTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9wZXJjcHUuYy0xNjk2LXN0YXRpYyB2b2lkIHBjcHVfYWxsb2NfdGFnX2FsbG9jX2hvb2soc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLFxcbi0tXFxubW0vc2hvd19tZW0uYz00MDg9dm9pZCBfX3Nob3dfbWVtKHVuc2lnbmVkIGludCBmaWx0ZXIsIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrLFxcbi0tXFxubW0vc2hvd19tZW0uYy00MzQtI2VuZGlmXFxubW0vc2hvd19tZW0uYzo0MzU6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2hvd19tZW0uYy00MzYtXFx0c3RhdGljIERFRklORV9TUElOTE9DSyhtZW1fYWxsb2NfcHJvZmlsaW5nX3NwaW5sb2NrKTtcXG4tLVxcbm1tL3NsdWIuYz0yMDQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtMjA2My1cXG5tbS9zbHViLmM6MjA2NDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9zbHViLmMtMjA2NS1cXG4tLVxcbm1tL3NsdWIuYz0yMDk3PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tLVxcbm1tL3NsdWIuYy0yMTEyLVxcbm1tL3NsdWIuYzoyMTEzOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxubW0vc2x1Yi5jLTIxMTQtXFxuLS1cXG5tbS9zbHViLmM9MjExNz1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuLS1cXG5tbS9zbHViLmMtMjExOS1cXG5tbS9zbHViLmM6MjEyMDojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG5tbS9zbHViLmMtMjEyMS1cXG4tLVxcbm1tL3NsdWIuYz0yMzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIzMjAtXFxubW0vc2x1Yi5jOjIzMjE6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2x1Yi5jLTIzMjItXFxuLS1cXG5tbS9zbHViLmM9MjQwOT1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQxNS1cXG5tbS9zbHViLmM6MjQxNjojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3NsdWIuYy0yNDE3LVxcbi0tXFxubW0vc2x1Yi5jPTI0MjU9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbi0tXFxubW0vc2x1Yi5jLTI0MjktXFxubW0vc2x1Yi5jOjI0MzA6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vc2x1Yi5jLTI0MzEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjQxLjQ2MjE0MDYzOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYxOTQ3MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqXG5cbk9rYXksIHNvIEkndmUgc3BvdHRlZCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGluIHRoZSBjb25maWcg4oCTIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYW5kIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgdG8gc2V0IHVwIGZ1enppbmcgYWdhaW5zdCBpdD8gSXQgbG9va3MgbGlrZSBpdCBpbnRyb2R1Y2VzIGEgcmV0cnkgbG9vcCB3aXRoaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgLiBUaGUgY29kZSBub3cgcmV0cmllcyB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIGlmIGBtb3ZlX21vZHVsZWAgcmV0dXJucyBgLUVBR0FJTmAuIFRoaXMgbmV3IGhhbmRsaW5nIHNlZW1zIHRvIGFkZHJlc3MgYSBzcGVjaWZpYyBlZGdlIGNhc2Ugd2hlcmUgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIG1pZ2h0IGZhaWwgZHVlIHRvIHRoZSBudW1iZXIgb2YgdGFncyBleGNlZWRpbmcgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLlxuXG5MZXQgbWUganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5LCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgaXMgbG9jYXRlZCBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLCByaWdodD8gT2theSwganVzdCB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgY29ycmVjdC4gVGltZSB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYGxheW91dF9hbmRfYWxsb2NhdGVgIGFnYWluLiBOZWVkIHRvIGJlIGNlcnRhaW4gYmVmb3JlIEkgZ28gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTA6NDkuMDI0MDkxMjQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0Njg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvbW9kdWxlL21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTQ0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyOTQ0OlxcdHtcXG4yOTQ1OlxcdFxcdHN0cnVjdCBtb2R1bGUgKm1vZDtcXG4yOTQ2OlxcdFxcdGludCBlcnI7XFxuMjk0NzpcXHRcXHR1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107XFxuMjk0ODpcXHRcXG4yOTQ5OlxcdFxcdC8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi9cXG4yOTUwOlxcdFxcdGVyciA9IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLFxcbjI5NTE6XFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cXHUwMDNlbW9kKTtcXG4yOTUyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI5NTM6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTU0OlxcdFxcbjI5NTU6XFx0XFx0ZXJyID0gbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKGluZm8tXFx1MDAzZWhkciwgaW5mby1cXHUwMDNlc2VjaGRycyxcXG4yOTU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cXHUwMDNlbW9kKTtcXG4yOTU3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI5NTg6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTU5OlxcdFxcbjI5NjA6XFx0XFx0LyogV2Ugd2lsbCBkbyBhIHNwZWNpYWwgYWxsb2NhdGlvbiBmb3IgcGVyLWNwdSBzZWN0aW9ucyBsYXRlci4gKi9cXG4yOTYxOlxcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcXG4yOTYyOlxcdFxcbjI5NjM6XFx0XFx0LypcXG4yOTY0OlxcdFxcdCAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuXFxuMjk2NTpcXHRcXHQgKiBwdXQgdGhlbSBpbiB0aGUgcmlnaHQgcGxhY2UuXFxuMjk2NjpcXHRcXHQgKiBOb3RlOiByb19hZnRlcl9pbml0IHNlY3Rpb25zIGFsc28gaGF2ZSBTSEZfe1dSSVRFLEFMTE9DfSBzZXQuXFxuMjk2NzpcXHRcXHQgKi9cXG4yOTY4OlxcdFxcdG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLCBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzKTtcXG4yOTY5OlxcdFxcbjI5NzA6XFx0XFx0LypcXG4yOTcxOlxcdFxcdCAqIFNhdmUgdGhlIHNpemVzIHJlc2VydmVkIGJ5IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoKSBzbyB0aGV5IGNhblxcbjI5NzI6XFx0XFx0ICogYmUgcmVzdG9yZWQgaWYgd2UgcmV0cnkgYmVsb3cuXFxuMjk3MzpcXHRcXHQgKi9cXG4yOTc0OlxcdFxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxcbjI5NzU6XFx0XFx0XFx0ZnJvYl9zaXplW3R5cGVdID0gaW5mby1cXHUwMDNlbW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZTtcXG4yOTc2OlxcdFxcbjI5Nzc6XFx0XFx0LypcXG4yOTc4OlxcdFxcdCAqIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93XFxuMjk3OTpcXHRcXHQgKiB0aGlzIGlzIGRvbmUgZ2VuZXJpY2FsbHk7IHRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGFueVxcbjI5ODA6XFx0XFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXFxuMjk4MTpcXHRcXHQgKi9cXG4yOTgyOlxcdHJldHJ5OlxcbjI5ODM6XFx0XFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuMjk4NDpcXHRcXHRsYXlvdXRfc3ltdGFiKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuMjk4NTpcXHRcXG4yOTg2OlxcdFxcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xcbjI5ODc6XFx0XFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG4yOTg4OlxcdFxcdGlmIChlcnIpIHtcXG4yOTg5OlxcdFxcdFxcdGlmIChlcnIgIT0gLUVBR0FJTilcXG4yOTkwOlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMjk5MTpcXHRcXHRcXHQvKlxcbjI5OTI6XFx0XFx0XFx0ICogLUVBR0FJTiBtZWFucyBwcm9maWxpbmcgd2FzIGRpc2FibGVkIGJ1dCB0aGUgbW9kdWxlXFxuMjk5MzpcXHRcXHRcXHQgKiBjYW4gc3RpbGwgbG9hZCB3aXRob3V0IGl0LiBSZXNldCBzdGF0ZSBhbmQgcmV0cnkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjQ5LjAyNDQ0MDMzOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjM4NzEzOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE1vZHVsZSBMb2FkaW5nIFJldHJ5IExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBrZXJuZWwgY29kZSBzbmlwcGV0LCBzcGVjaWZpY2FsbHkgdGhlIHJldHJ5IGxvZ2ljIGluIG1vZHVsZSBsb2FkaW5nLCB0cmlnZ2VyZWQgd2hlbiBhIGAtRUFHQUlOYCBlcnJvciBpcyBlbmNvdW50ZXJlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQncyB0b3VjaGluZyBjb3JlIG1vZHVsZSBsb2FkaW5nIGxvZ2ljLCBhbmQgYW55IGRldmlhdGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGhlcmUgY291bGQgaGF2ZSBwcmV0dHkgc2VyaW91cyBpbXBsaWNhdGlvbnMuXG5cblRoZSBjb2RlJ3MgcHVycG9zZSBpcyB0byByZXRyeSBhZnRlciBoYW5kbGluZyBhIGAtRUFHQUlOYCBlcnJvciwgd2hpY2ggc2lnbmlmaWVzIHRoYXQgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgYnV0IHRoZSBtb2R1bGUgY2FuIHN0aWxsIGJlIGxvYWRlZC4gSXQgcmV3cml0ZXMgc2VjdGlvbiBoZWFkZXJzLCBhZGp1c3RzIG1lbW9yeSBzaXplcyBmb3IgZGlmZmVyZW50IHR5cGVzLCBhbmQgY2xlYXJzIHRoZSBgU0hGX0FMTE9DYCBmbGFnIGZvciBzeW1ib2wgYW5kIHN0cmluZyB0YWJsZSBzZWN0aW9ucywgdGhlbiByZXRyaWVzLiBUaGlzIHJlc2V0IGFuZCByZXRyeSBtZWNoYW5pc20gc2NyZWFtcyBwb3RlbnRpYWwgZm9yIHN1YnRsZSBidWdzLCBlc3BlY2lhbGx5IGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhhdCBtb2R1bGUgbG9hZGluZyBpcyByZWFjaGVkIHZpYSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXNjYWxscywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aC4gVGhlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBjb25maWcgb3B0aW9uIGlzIHRoZSBrZXkgdG8gdHJpZ2dlciBpdC5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgdGFyZ2V0cyBoZXJlPyBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAsIGBtb3ZlX21vZHVsZWAsIGFuZCBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYXJlIGltbWVkaWF0ZWx5IG9uIG15IHJhZGFyLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCBhbGwgdGhyZWUgYXJlIHN0YXRpYyBmdW5jdGlvbnMuIFdoaWxlIHN0YXRpYyBmdW5jdGlvbnMgY2FuIHN0aWxsIGJlIHZhbHVhYmxlIHRhcmdldHMsIEkgbmVlZCB0byBsb29rIGZvciBhbnkgcHVibGljIGludGVyZmFjZXMgdGhhdCBjYWxsIHRoZW0sIGJlY2F1c2UgdGhlc2UgYXJlIGhhcmRlciB0byB0YXJnZXQgZGlyZWN0bHkuIFRoZSBgbG9hZF9tb2R1bGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgY2FsbGVkLCBJIGJlbGlldmUsIHdoZW4gY2FsbGluZyBgaW5pdF9tb2R1bGVgLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBlbnRyeXBvaW50LiBJIGFsc28gc2hvdWxkIG5vdGUgdGhhdCB0aGUgc3lzdGVtIGNhbGwgdG8gdHJpZ2dlciB0aGlzIGlzIGBzeXNfaW5pdF9tb2R1bGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDYwNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjU3LjI2MzE1NzA4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4NjIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKmluaXRfbW9kdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9tb2R1bGUvbWFpbi5jPTM0NDM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjU0LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM2NTU6U1lTQ0FMTF9ERUZJTkUzKGluaXRfbW9kdWxlLCB2b2lkIF9fdXNlciAqLCB1bW9kLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM2NTYtXFx0XFx0dW5zaWduZWQgbG9uZywgbGVuLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1YXJncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM4MDE9c3RhdGljIGludCBpZGVtcG90ZW50X2luaXRfbW9kdWxlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqIHVhcmdzLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zODE5LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM4MjA6U1lTQ0FMTF9ERUZJTkUzKGZpbml0X21vZHVsZSwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgdWFyZ3MsIGludCwgZmxhZ3MpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzgyMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjEwOjU3LjM1NTAyOTg5N1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM3NDU3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNb2R1bGUgSW5pdGlhbGl6YXRpb24gYW5kIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCDigJMgdGhvc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMsIHJpZ2h0PyBCdXQgaG9sZCBvbiwgdGhlIGNhbGwgY2hhaW4gaXMgYSBiaXQgbW9yZSBpbnRyaWNhdGUuIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCBnZXRzIGNhbGxlZCBieSBgbG9hZF9tb2R1bGVgLiBBbmQgYGxvYWRfbW9kdWxlYCwgaW4gdHVybiwgaXMgdHJpZ2dlcmVkIGJ5IGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpczogd2hpY2ggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZD8gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgYSBmb2N1cy4gQXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IEkgY2FuIGRpZyBpbnRvPyBOb3BlLCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGByZXNlcnZlX21vZHVsZV90YWdzYCBhcmUgYm90aCBzdGF0aWMuIEhtbSwgaGFuZyBvbiwgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGlzIGJlaW5nIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgYGFsbG9jX3NlY3Rpb25fbWVtYCB3aXRoaW4gYGFsbG9jX3RhZ19pbml0YC4gVGhhdCdzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQuXG5cbkxldCdzIHJldGhpbmsgdGhpcy4gQmFjayB0byB0aGUgaHVudCBmb3Igc29tZXRoaW5nIG5vbi1zdGF0aWMuIGBsb2FkX21vZHVsZWAgaXMgc3RhdGljLiBUaGF0IGRvZXNuJ3QgaGVscC4gU28sIGl0IGxvb2tzIGxpa2UgaXQgd2lsbCBjb21lIGRvd24gdG8gYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYC4gSSdsbCBnbyBjaGVjayBga2VybmVsL21vZHVsZS9tYWluLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIG9mIGludGVyZXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU2OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTowMi45OTI0OTA3NjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMzk5NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgLiptb2R1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL21vZHVsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9MjA3PXN0YXRpYyBzc2l6ZV90IG1vZHVsZV96c3RkX2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI5My1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyOTQ6aW50IG1vZHVsZV9kZWNvbXByZXNzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjk1LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0xMjA9aW50IG1vZF92ZXJpZnlfc2lnKGNvbnN0IHZvaWQgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjEyMTppbnQgdHJ5X3RvX2ZvcmNlX2xvYWQoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpyZWFzb24pO1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xMjItYm9vbCBmaW5kX3N5bWJvbChzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnICpmc2EpO1xcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTEzNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcga2VybmVsX3N5bWJvbF92YWx1ZShjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltKVxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTE0NC0jaWZkZWYgQ09ORklHX0xJVkVQQVRDSFxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDoxNDU6aW50IGNvcHlfbW9kdWxlX2VsZihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pO1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xNDYtdm9pZCBmcmVlX21vZHVsZV9lbGYoc3RydWN0IG1vZHVsZSAqbW9kKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0yMDk9c3RydWN0IG1vZF9mYWlsX2xvYWQge1xcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTIxNS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MjE2OmludCB0cnlfYWRkX2ZhaWxlZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgZW51bSBmYWlsX2R1cF9tb2RfcmVhc29uIHJlYXNvbik7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTIxNy12b2lkIG1vZF9zdGF0X2J1bXBfaW52YWxpZChzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpO1xcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTI1Nj1zdHJ1Y3QgbW9kX3VubG9hZF90YWludCB7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjYyLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDoyNjM6aW50IHRyeV9hZGRfdGFpbnRlZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjY0LXZvaWQgcHJpbnRfdW5sb2FkZWRfdGFpbnRlZF9tb2R1bGVzKHZvaWQpO1xcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTI3MT1zdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfdW5sb2FkZWRfdGFpbnRlZF9tb2R1bGVzKHZvaWQpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjc2LSNpZmRlZiBDT05GSUdfTU9EVUxFX0RFQ09NUFJFU1NcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6Mjc3OmludCBtb2R1bGVfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKTtcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMjc4LXZvaWQgbW9kdWxlX2RlY29tcHJlc3NfY2xlYW51cChzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zMTU9c3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICptb2RfZmluZCh1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBtb2RfdHJlZV9yb290ICp0cmVlKVxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTMyOC1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzI5OmludCBtb2R1bGVfZW5hYmxlX3JvZGF0YV9ybyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpO1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozMzA6aW50IG1vZHVsZV9lbmFibGVfcm9kYXRhX3JvX2FmdGVyX2luaXQoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTtcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzMxOmludCBtb2R1bGVfZW5hYmxlX2RhdGFfbngoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKTtcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzMyOmludCBtb2R1bGVfZW5hYmxlX3RleHRfcm94KGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjMzMzppbnQgbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKGNvbnN0IEVsZl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLFxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zMzQtXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqc2Vjc3RyaW5ncyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zMzY9dm9pZCBtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGNvbnN0IEVsZl9FaGRyICpoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTMzOS0jaWZkZWYgQ09ORklHX01PRFVMRV9TSUdcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MzQwOmludCBtb2R1bGVfc2lnX2NoZWNrKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncyk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM0MS0jZWxzZSAvKiAhQ09ORklHX01PRFVMRV9TSUcgKi9cXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zNjc9c3RhdGljIGlubGluZSB2b2lkIGFkZF9rYWxsc3ltcyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pIHsgfVxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM3MC0jaWZkZWYgQ09ORklHX1NZU0ZTXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM3MTppbnQgbW9kX3N5c2ZzX3NldHVwKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMzcyLVxcdFxcdCAgICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcGFyYW0sIHVuc2lnbmVkIGludCBudW1fcGFyYW1zKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0zOTE9dm9pZCBtb2R1bGVfbGF5b3V0KHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHZlcnNpb25faW5mbyAqdmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCxcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgtMzkyLVxcdFxcdCAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHApO1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaDozOTM6aW50IGNoZWNrX21vZHN0cnVjdF92ZXJzaW9uKGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIHN0cnVjdCBtb2R1bGUgKm1vZCk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM5NC1pbnQgc2FtZV9tYWdpYyhjb25zdCBjaGFyICphbWFnaWMsIGNvbnN0IGNoYXIgKmJtYWdpYywgYm9vbCBoYXNfY3Jjcyk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM9MzExPXZvaWQgKiBfX3dlYWsgZGVyZWZlcmVuY2VfbW9kdWxlX2Z1bmN0aW9uX2Rlc2NyaXB0b3Ioc3RydWN0IG1vZHVsZSAqbW9kLFxcbi0tXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTMyMC0gKi9cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MzIxOmludCBtb2R1bGVfYWRkcmVzc19sb29rdXAodW5zaWduZWQgbG9uZyBhZGRyLFxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0zMjItXFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nICpzaXplLFxcbi0tXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTM0Ny1cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MzQ4OmludCBsb29rdXBfbW9kdWxlX3N5bWJvbF9uYW1lKHVuc2lnbmVkIGxvbmcgYWRkciwgY2hhciAqc3ltbmFtZSlcXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMzQ5LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0zNzAtXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjM3MTppbnQgbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLFxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0zNzItXFx0XFx0ICAgICAgIGNoYXIgKm5hbWUsIGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgKmV4cG9ydGVkKVxcbi0tXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jPTQ0Nz11bnNpZ25lZCBsb25nIGZpbmRfa2FsbHN5bXNfc3ltYm9sX3ZhbHVlKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy00NTItXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjQ1MzppbnQgbW9kdWxlX2thbGxzeW1zX29uX2VhY2hfc3ltYm9sKGNvbnN0IGNoYXIgKm1vZG5hbWUsXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTQ1NC1cXHRcXHRcXHRcXHQgICBpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcpLFxcbi0tXFxua2VybmVsL21vZHVsZS9rbW9kLmM9NzI9c3RhdGljIGludCBjYWxsX21vZHByb2JlKGNoYXIgKm9yaWdfbW9kdWxlX25hbWUsIGludCB3YWl0KVxcbi0tXFxua2VybmVsL21vZHVsZS9rbW9kLmMtMTMxLSAqL1xcbmtlcm5lbC9tb2R1bGUva21vZC5jOjEzMjppbnQgX19yZXF1ZXN0X21vZHVsZShib29sIHdhaXQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbmtlcm5lbC9tb2R1bGUva21vZC5jLTEzMy17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTE3LSAqL1xcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmM6MTg6aW50IGNvcHlfbW9kdWxlX2VsZihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYy0xOS17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xNjQ9c3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQobW9kdWxlX25vdGlmeV9saXN0KTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNjUtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTY2OmludCByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNjcte1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MTcwPUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNzEtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTcyOmludCB1bnJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE3My17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz03NzI9c3RhdGljIGludCB0cnlfc3RvcF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBpbnQgZmxhZ3MsIGludCAqZm9yY2VkKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtNzk0LSAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjc5NTppbnQgbW9kdWxlX3JlZmNvdW50KHN0cnVjdCBtb2R1bGUgKm1vZClcXG5rZXJuZWwvbW9kdWxlL21haW4uYy03OTYte1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MTEwNT1zdGF0aWMgY29uc3QgY2hhciB2ZXJtYWdpY1tdID0gVkVSTUFHSUNfU1RSSU5HO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExMDYtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTEwNzppbnQgdHJ5X3RvX2ZvcmNlX2xvYWQoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpyZWFzb24pXFxua2VybmVsL21vZHVsZS9tYWluLmMtMTEwOC17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTA5PWJvb2wgX193ZWFrIG1vZHVsZV9lbGZfY2hlY2tfYXJjaChFbGZfRWhkciAqaGRyKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkxMy1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTE0OmludCBfX3dlYWsgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MTUtXFx0XFx0XFx0XFx0ICAgICBFbGZfU2hkciAqc2VjaGRycyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTMwMTI9c3RhdGljIHZvaWQgbW9kdWxlX2RlYWxsb2NhdGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAyMC1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMDIxOmludCBfX3dlYWsgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAyMi1cXHRcXHRcXHQgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc2lnbmluZy5jPTQzPWludCBtb2RfdmVyaWZ5X3NpZyhjb25zdCB2b2lkICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3NpZ25pbmcuYy02OS1cXG5rZXJuZWwvbW9kdWxlL3NpZ25pbmcuYzo3MDppbnQgbW9kdWxlX3NpZ19jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxua2VybmVsL21vZHVsZS9zaWduaW5nLmMtNzEte1xcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jPTIzMD12b2lkIG1vZF9zdGF0X2J1bXBfYmVjb21pbmcoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTIzOS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MjQwOmludCB0cnlfYWRkX2ZhaWxlZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgZW51bSBmYWlsX2R1cF9tb2RfcmVhc29uIHJlYXNvbilcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjQxLXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jPTE1PXN0YXRpYyBpbnQgbW9kdWxlX3NldF9tZW1vcnkoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlLFxcbi0tXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtMzItICovXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmM6MzM6aW50IG1vZHVsZV9lbmFibGVfdGV4dF9yb3goY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTM0LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTUwLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjUxOmludCBtb2R1bGVfZW5hYmxlX3JvZGF0YV9ybyhjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNTIte1xcbi0tXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtNjctXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmM6Njg6aW50IG1vZHVsZV9lbmFibGVfcm9kYXRhX3JvX2FmdGVyX2luaXQoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTY5LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTc1LVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjc2OmludCBtb2R1bGVfZW5hYmxlX2RhdGFfbngoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTc3LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jLTg5LVxcbmtlcm5lbC9tb2R1bGUvc3RyaWN0X3J3eC5jOjkwOmludCBtb2R1bGVfZW5mb3JjZV9yd3hfc2VjdGlvbnMoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsXFxua2VybmVsL21vZHVsZS9zdHJpY3Rfcnd4LmMtOTEtXFx0XFx0XFx0XFx0Y29uc3QgY2hhciAqc2Vjc3RyaW5ncyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYz0zMzI9c3RhdGljIGludCBtb2Rfc3lzZnNfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMzYzLVxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYzozNjQ6aW50IG1vZF9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsXFxua2VybmVsL21vZHVsZS9zeXNmcy5jLTM2NS1cXHRcXHQgICAgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvdHJhY2tpbmcuYz0xOD1leHRlcm4gc3RydWN0IGRlbnRyeSAqbW9kX2RlYnVnZnNfcm9vdDtcXG5rZXJuZWwvbW9kdWxlL3RyYWNraW5nLmMtMTktXFxua2VybmVsL21vZHVsZS90cmFja2luZy5jOjIwOmludCB0cnlfYWRkX3RhaW50ZWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcXG5rZXJuZWwvbW9kdWxlL3RyYWNraW5nLmMtMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTowMy4wNzU4OTUwMTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg0NzQyNjMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTW9kdWxlIExvYWRpbmcgRW50cnkgUG9pbnRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBtb2R1bGUgbG9hZGluZyBjaGFuZ2VzLCBhbmQgdGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBmdW5jdGlvbnMgd2hlcmUgdGhlIGFjdHVhbCBtb2RpZmljYXRpb25zIHNlZW0gdG8gYmUsIHdoaWNoIGFyZSBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAsIGByZXNlcnZlX21vZHVsZV90YWdzYCwgYW5kIGByZWxlYXNlX21vZHVsZV90YWdzYC4gQnV0IHRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCBpbnRlcm5hbCBoZWxwZXJzLCBub3Qgd2hhdCB3ZSdyZSBsb29raW5nIGZvciwgSSBuZWVkIHRoZSBhY3R1YWwgQVBJIGVudHJ5IHBvaW50cy4gVGhhdCdzIGEga2V5IGRldGFpbCFcblxuUmlnaHQsIHNvIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LCB0aGUgc3lzY2FsbHMgdGhlbXNlbHZlcy4gVGhlIGluaXRpYWwgaWRlYSB3YXMgdG8gZm9jdXMgb24gYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLCBhbmQgdGhlbiBJIHdhcyBnZXR0aW5nIHNsaWdodGx5IHRocm93biBieSB0aGUgaW50ZXJuYWwgYGxvYWRfbW9kdWxlYCBiZWluZyBzdGF0aWMgYW5kIHRoZSBtYWluIHdvcmsgaGFwcGVuaW5nIHRoZXJlLiBCdXQsIHdhaXQsIG5vLCBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBhcmUgdGhlIHN5c2NhbGxzLCBhbmQgdGhleSdyZSB3aGF0IFN5emthbGxlciBzaG91bGQgYmUgdXNpbmcgaW4gdGhlIHRlc3QgaGFybmVzcy4gTGV0J3MgbWFrZSBzdXJlIEknbSB1c2luZyB0aGUgY29ycmVjdCBuYW1lcyBmb3IgdGhlIHN5c2NhbGxzLlxuXG5BaCwgeWVzLCBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgLCBvciBzb21ldGltZXMganVzdCBgaW5pdF9tb2R1bGVgIG9yIGBmaW5pdF9tb2R1bGVgLCBhcmUgd2hhdCBTeXprYWxsZXIgd291bGQgYmUgbG9va2luZyBmb3IuIFRoYXQgc2VlbXMgcmlnaHQuIFBlcmZlY3QuIExldCdzIGNvbmZpcm0gdGhhdCB0aGVzZSBhcmUgdGhlIHByb3BlciBuYW1lcy4gWWVzLCBTeXprYWxsZXIgdXNlcyBgc3lzX2luaXRfbW9kdWxlYC4gT2theSwgdGhhdCdzIGdvb2QuIFJlbWVtYmVyIHRoZSBwcm9tcHQ6IHdlJ3JlIGZhdm9yaW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuXG5cblNvLCBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIGFyZSBkZWZpbml0ZWx5IHRoZSBwcmVmZXJyZWQgZW50cnkgcG9pbnRzLiBOb3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW52b2x2ZWQgaGVyZSB0aGF0IEknbSBtaXNzaW5nLiBgYWxsb2NfdGFnX2luaXRgIGlzIGBfX2luaXRgIGFuZCBzdGF0aWMuIGByZXNlcnZlX21vZHVsZV90YWdzYCBhbmQgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgIGFyZSBzdGF0aWMgYXMgd2VsbCwgc28gdGhhdCBjb25maXJtcyBpdC4gVGhlIG9ubHkgZW50cnkgcG9pbnRzIGFyZSBkZWZpbml0ZWx5IHRoZSBtb2R1bGUgbG9hZGluZyBzeXNjYWxscywgYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgTUVNX0FMTE9DX1BST0ZJTElOR2AgbmVlZHMgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHRvIGJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTU3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjExOjExLjkyMzMyNDkyNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAzNDMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MzExPWNvbmZpZyBQRVJfVk1BX0xPQ0tfU1RBVFNcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzIzLVxcbm1tL0tjb25maWcuZGVidWc6MzI0OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjUtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzM3LVxcbm1tL0tjb25maWcuZGVidWc6MzM4OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbm1tL0tjb25maWcuZGVidWctMzM5LVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzQyLVxcbm1tL0tjb25maWcuZGVidWc6MzQzOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDQtXFx0Ym9vbCBcXFwiTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMToxMi4wMTM2ODMwMDVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzNTY4MTg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCB3aGVyZSdzIHRoZSBiZXN0IHBsYWNlIHRvIGRpZyBpbnRvIHRoZXNlIGRlYnVnIG9wdGlvbnM/IE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBtbS9LY29uZmlnLmRlYnVnYC4gVGhhdCdzIHVzdWFsbHkgdGhlIGdvLXRvIHNwb3QgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LXJlbGF0ZWQgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb25zLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgY29yZSBtZW1vcnkgYXJlYXMuIEknbSBzcGVjaWZpY2FsbHkgYWltaW5nIGFyb3VuZCBsaW5lIDMyNDsgdGhhdCBmZWVscyBsaWtlIGEgbGlrZWx5IHBvaW50IHRvIHN0YXJ0IHVucmF2ZWxpbmcgd2hhdCdzIGVuYWJsZWQgYW5kIGRpc2FibGVkLiBNeSBob3BlIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGljaCBmZWF0dXJlcyBhcmUgYWN0aXZlIGluIHRoZSBjdXJyZW50IGJ1aWxkIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggZWFjaCBvdGhlciwgcmlnaHQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuIEkgYW50aWNpcGF0ZSB0aGVyZSdsbCBiZSBjb25kaXRpb25hbCBibG9ja3MgYW5kIHNvbWUgaW50ZXJlc3RpbmcgZGVwZW5kZW5jaWVzIGluIHRoYXQgYXJlYS4gSXQncyB0aW1lIHRvIGdldCBhIGJldHRlciBncmFzcCBvbiB3aGF0IGNhbiBiZSBhZGp1c3RlZCwgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBydW50aW1lIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDMyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjExOjE2LjU0OTM2ODM0MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdWNjZXNzLCByZXRyeSBhbmQgZmFpbHVyZSBjb3VudGVycyBvZiBwYWdlXFxuIDMxNjpcXHRcXHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcXG4gMzE3OlxcdFxcdCAgY291bnRlcnMgYXJlIGV4cG9zZWQgaW4gL3Byb2Mvdm1zdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3JcXG4gMzE4OlxcdFxcdCAga2VybmVsIGRldmVsb3BlcnMgdG8gZXZhbHVhdGUgZWZmZWN0aXZlbmVzcyBvZiBwZXItdm1hIGxvY2tzIGFuZCB0b1xcbiAzMTk6XFx0XFx0ICBpZGVudGlmeSBwYXRob2xvZ2ljYWwgY2FzZXMuIENvdW50aW5nIHRoZXNlIGV2ZW50cyBpbnRyb2R1Y2VzIGEgc21hbGxcXG4gMzIwOlxcdFxcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuIDMyMzpcXHRcXG4gMzI0OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDMyNTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbiAzMjY6XFx0XFx0ZGVmYXVsdCBuXFxuIDMyNzpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAzMjg6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDMyOTpcXHRcXHRkZXBlbmRzIG9uICFERUJVR19GT1JDRV9XRUFLX1BFUl9DUFVcXG4gMzMwOlxcdFxcdHNlbGVjdCBDT0RFX1RBR0dJTkdcXG4gMzMxOlxcdFxcdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxcbiAzMzI6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbiAzMzM6XFx0XFx0aGVscFxcbiAzMzQ6XFx0XFx0ICBUcmFjayBhbGxvY2F0aW9uIHNvdXJjZSBjb2RlIGFuZCByZWNvcmQgdG90YWwgYWxsb2NhdGlvbiBzaXplXFxuIDMzNTpcXHRcXHQgIGluaXRpYXRlZCBhdCB0aGF0IGNvZGUgbG9jYXRpb24uIFRoZSBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gdHJhY2tcXG4gMzM2OlxcdFxcdCAgbWVtb3J5IGxlYWtzIHdpdGggYSBsb3cgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBpbXBhY3QuXFxuIDMzNzpcXHRcXG4gMzM4OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbiAzMzk6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbiAzNDA6XFx0XFx0ZGVmYXVsdCB5XFxuIDM0MTpcXHRcXHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4gMzQyOlxcdFxcbiAzNDM6XFx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG4gMzQ0OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MTYuNTQ5NTAzMzExWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzg0MzczNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIFN5c2NhbGwgVmVyaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3Mgc2VlLiBJJ20gbG9va2luZyBhdCBlbmFibGluZyBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIHByZXR0eSBjbGVhcjogYE1NVWAsIGBQUk9DX0ZTYCwgYW5kIGltcG9ydGFudGx5LCBpdCBuZWVkcyB0byBiZSAqbm90KiBgREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVYC4gVGhhdCBtYWtlcyBzZW5zZS4gQW5kIHdoZW4gZW5hYmxlZCwgaXQgcHVsbHMgaW4gYENPREVfVEFHR0lOR2AsIGBQQUdFX0VYVEVOU0lPTmAsIGFuZCBgU0xBQl9PQkpfRVhUYC4gU28sIEkgdGhpbmsgd2Ugc2hvdWxkIGVuYWJsZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBkaXJlY3QgY29uZmlndXJhdGlvbiBpdGVtcy5cblxuQWgsIGdvb2QhIGBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVGAgaXMgYGRlZmF1bHQgeWAgYXMgbG9uZyBhcyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgc2V0LiBTbywganVzdCBzZXR0aW5nIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBzaG91bGQgYmUgZW5vdWdoLiBHcmVhdC5cblxuTm93LCBhIHF1aWNrIHZlcmlmaWNhdGlvbiBvbiB0aGUgc3lzY2FsbHMuIExldCdzIG1ha2Ugc3VyZSB0aGUgbmFtZXMgYXJlIHJpZ2h0LiBJIG5lZWQgdG8gY29uZmlybSBgc3lzX2luaXRfbW9kdWxlYCBhbmQgYHN5c19maW5pdF9tb2R1bGVgIGFyZSB0aGUgY29ycmVjdCBuYW1lcy4gVGhleSBhcmUgZGVmaW5lZCB3aXRoIGBTWVNDQUxMX0RFRklORTNgLCBhbmQgdGhleSBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBhcmNoaXRlY3R1cmUuIFNwZWNpZmljYWxseSBgX194NjRfc3lzX2luaXRfbW9kdWxlYCBvciBgc3lzX2luaXRfbW9kdWxlYCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gU3l6a2FsbGVyIHVzZXMgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAuIFNvLCBmb3IgYEZvY3VzU3ltYm9sc2AsIHdlJ2xsIHByb3ZpZGUgYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5XYWl0IGEgc2Vjb25kLCBob2xkIG9uLi4uIGBsb2FkX21vZHVsZWAuLi4gSXQncyB0aGUgbWFpbiBmdW5jdGlvbiwgZXZlbiB0aG91Z2ggaXQncyBzdGF0aWMuIEl0J3MgYSBodWdlIGZ1bmN0aW9uLCBhIGtleSBwaWVjZSBvZiB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGNoZWNrIGlmIGBsb2FkX21vZHVsZWAgaXMgaW5saW5lZCBiZWNhdXNlIHRoYXQgd291bGQgaW1wYWN0IHRoZSBzeW1ib2wgdmlzaWJpbGl0eSBhbmQgaG93IGl0J3MgaGFuZGxlZC4gVGhhdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMDIxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MjIuODg3OTQ0MDU4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc4NDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2FkX21vZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvbW9kdWxlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMTEtXFxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjEyOnZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLFxcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xMy1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg9NjI9c3RydWN0IGxvYWRfaW5mbyB7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTYzLVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjY0OlxcdC8qIHBvaW50ZXIgdG8gbW9kdWxlIGluIHRlbXBvcmFyeSBjb3B5LCBmcmVlZCBhdCBlbmQgb2YgbG9hZF9tb2R1bGUoKSAqL1xcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC02NS1cXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg9MzQyPXN0YXRpYyBpbmxpbmUgaW50IG1vZHVsZV9zaWdfY2hlY2soc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM0OC0jaWZkZWYgQ09ORklHX0RFQlVHX0tNRU1MRUFLXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM0OTp2b2lkIGttZW1sZWFrX2xvYWRfbW9kdWxlKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyk7XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTM1MC0jZWxzZSAvKiAhQ09ORklHX0RFQlVHX0tNRU1MRUFLICovXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oOjM1MTpzdGF0aWMgaW5saW5lIHZvaWQga21lbWxlYWtfbG9hZF9tb2R1bGUoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kLFxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0zNTItXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykgeyB9XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xNDE3PXN0YXRpYyB2b2lkIGZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE0MjAtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTQyMTpcXHRjb2RldGFnX3VubG9hZF9tb2R1bGUobW9kKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNDIyLVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDA0LVxcdG1vZCA9ICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9tYWluLmM6MzAwNTpcXHRrbWVtbGVha19sb2FkX21vZHVsZShtb2QsIGluZm8pO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMwMDYtXFx0Y29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoaW5mby1cXHUwMDNlbW9kLCBtb2QpO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MzQwNz1zdGF0aWMgaW50IGVhcmx5X21vZF9jaGVjayhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNDQyLSAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM0NDM6c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzQ0NC1cXHRcXHQgICAgICAgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzU5MS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzozNTkyOlxcdGlmIChjb2RldGFnX2xvYWRfbW9kdWxlKG1vZCkpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzU5My1cXHRcXHRnb3RvIHN5c2ZzX2NsZWFudXA7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zNjU1PVNZU0NBTExfREVGSU5FMyhpbml0X21vZHVsZSwgdm9pZCBfX3VzZXIgKiwgdW1vZCxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM2NzQtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MzY3NTpcXHRyZXR1cm4gbG9hZF9tb2R1bGUoXFx1MDAyNmluZm8sIHVhcmdzLCAwKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjc2LX1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM3NjI9c3RhdGljIGludCBpbml0X21vZHVsZV9mcm9tX2ZpbGUoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICogdWFyZ3MsIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM3OTctXFxua2VybmVsL21vZHVsZS9tYWluLmM6Mzc5ODpcXHRyZXR1cm4gbG9hZF9tb2R1bGUoXFx1MDAyNmluZm8sIHVhcmdzLCBmbGFncyk7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMzc5OS19XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM9MTAwPXN0YXRpYyBMSVNUX0hFQUQoZHVwX2ZhaWxlZF9tb2R1bGVzKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0xODMtICogICAgY2FsbCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIGl0Llxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzoxODQ6ICogICogZmFpbGVkX2xvYWRfbW9kdWxlczogaG93IG1hbnkgbW9kdWxlcyBmYWlsZWQgb25jZSB3ZSd2ZSBhbGxvY2F0ZWQgb3VyXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4NS0gKiAgICBwcml2YXRlIHNwYWNlIGZvciBvdXIgbW9kdWxlIHVzaW5nIGxheW91dF9hbmRfYWxsb2NhdGUoKS4gVGhlc2UgZmFpbHVyZXNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yMDU9c3RhdGljIGF0b21pY190IGZhaWxlZF9iZWNvbWluZztcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MjA2OnN0YXRpYyBhdG9taWNfdCBmYWlsZWRfbG9hZF9tb2R1bGVzO1xcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yMDctXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM9MjIwPXZvaWQgbW9kX3N0YXRfYnVtcF9pbnZhbGlkKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0yMjItXFx0YXRvbWljX2xvbmdfYWRkKGluZm8tXFx1MDAzZWxlbiAqIDIsIFxcdTAwMjZpbnZhbGlkX21vZF9ieXRlcyk7XFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjIyMzpcXHRhdG9taWNfaW5jKFxcdTAwMjZmYWlsZWRfbG9hZF9tb2R1bGVzKTtcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjI0LSNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfREVDT01QUkVTUylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0yNzM9c3RhdGljIHNzaXplX3QgcmVhZF9maWxlX21vZF9zdGF0cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLFxcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTI4Ny1cXHRmYmVjb21pbmcgPSBhdG9taWNfcmVhZChcXHUwMDI2ZmFpbGVkX2JlY29taW5nKTtcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6Mjg4OlxcdGZsb2FkcyA9IGF0b21pY19yZWFkKFxcdTAwMjZmYWlsZWRfbG9hZF9tb2R1bGVzKTtcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMjg5LVxcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jPTQxMT1zdGF0aWMgaW50IF9faW5pdCBtb2R1bGVfc3RhdHNfaW5pdCh2b2lkKVxcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQyMy1cXHRtb2RfZGVidWdfYWRkX2F0b21pYyhmYWlsZWRfYmVjb21pbmcpO1xcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzo0MjQ6XFx0bW9kX2RlYnVnX2FkZF9hdG9taWMoZmFpbGVkX2xvYWRfbW9kdWxlcyk7XFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQyNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MjIuOTY4NzM2NDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY1ODA4OTY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTW9kdWxlIExvYWRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gVGhlIGNvZGUncyBpbnRlcmVzdGluZyBiZWNhdXNlIGBsb2FkX21vZHVsZWAgaXMgc3RhdGljIGJ1dCBlbm9ybW91cy4gVGhlIHByb21wdCBleHBsaWNpdGx5IGZhdm9ycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNpbmNlIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAgYXJlIHRoZSB0cnVlIGVudHJ5IHBvaW50cywgYW5kIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZCwgSSBzaG91bGQgYmUgdXNpbmcgdGhlbS4gV2FpdCwgaG9sZCBvbiwgYHN5c19pbml0X21vZHVsZWAgaXMgYSBtYWNybywgc28gaXQgY291bGQgYmUgYF9feDY0X3N5c19pbml0X21vZHVsZWAgb3IgYHN5c19pbml0X21vZHVsZWAuIEl0IHNvdW5kcyBsaWtlIHN5emthbGxlciBnZW5lcmFsbHkgdW5kZXJzdGFuZHMgYHN5c19pbml0X21vZHVsZWAgYW5kIGBzeXNfZmluaXRfbW9kdWxlYCwgc28gdGhhdCBzaG91bGQgYmUgZmluZS4gSSdsbCBzdGljayB3aXRoIGBzeXNfaW5pdF9tb2R1bGVgIGFuZCBgc3lzX2Zpbml0X21vZHVsZWAuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYC4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYW5kIGByZWxlYXNlX21vZHVsZV90YWdzYC4gVGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHNvIEknbSBub3QgZGlyZWN0bHkgdGFyZ2V0aW5nIHRoZW0sIGJ1dCB0aGV5J3JlIGltcG9ydGFudC4gVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGNsZWFybHkgcmVsZXZhbnQgaGVyZS5cblxuSXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZz8gVGhlIG9idmlvdXMgcmVxdWlyZW1lbnQgaXMgYE1PRFVMRVNgLCBidXQgdGhhdCdzIHR5cGljYWxseSBlbmFibGVkIGluIG1vc3QgZnV6emluZyBzZXR1cHMsIHNvIEkgd29uJ3Qgd29ycnkgYWJvdXQgaXQuIEkgKndpbGwqIGJlIGluY2x1ZGluZyBgTUVNX0FMTE9DX1BST0ZJTElOR2AsIHRob3VnaC5cblxuU28sIGhlcmUncyBteSBzdW1tYXJ5OlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSDigJMgdGhpcyBpcyBhIGNvcmUgbW9kdWxlIGxvYWRlciBjaGFuZ2UuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYHN5c19pbml0X21vZHVsZWAsIGBzeXNfZmluaXRfbW9kdWxlYCDigJMgdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMuXG4qICAgKipFbmFibGVDb25maWdzOioqIGBNRU1fQUxMT0NfUFJPRklMSU5HYCDigJMgdGhpcyBlbmFibGVzIHRoZSByZWxldmFudCBjb2RlIHBhdGguXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtb2R1bGUgbG9hZGluZyBsb2dpYyB0byBoYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3Mgd2hlbiB0aGV5IGNhbm5vdCBmaXQgaW4gcGFnZSBmbGFnIGJpdHMuIEl0IGFkZHMgYSByZXRyeSBsb29wIHRvIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCB3aGVuIGBtb3ZlX21vZHVsZWAgcmV0dXJucyBgLUVBR0FJTmAuIFRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtb2R1bGUgbG9hZGVyLCByZWFjaGFibGUgdmlhIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIHN5c2NhbGxzIHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzE4MCwiT3V0cHV0VG9rZW5zIjoxNDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MzEuNjI2ODI5ODI1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MTY1MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3lzX2luaXRfbW9kdWxlXCIsXG4gICAgXCJzeXNfZmluaXRfbW9kdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vZHVsZSBsb2FkaW5nIGxvZ2ljIHRvIGhhbmRsZSBhIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgY2Fubm90IGZpdCBpbiBwYWdlIGZsYWcgYml0cy4gSXQgYWRkcyBhIHJldHJ5IGxvb3AgaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgIHdoZW4gYG1vdmVfbW9kdWxlYCByZXR1cm5zIGAtRUFHQUlOYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1vZHVsZSBsb2FkZXIgdGhhdCBpcyByZWFjaGFibGUgdmlhIGBpbml0X21vZHVsZWAgYW5kIGBmaW5pdF9tb2R1bGVgIHN5c2NhbGxzIHdoZW4gYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfaW5pdF9tb2R1bGVcIixcbiAgICBcInN5c19maW5pdF9tb2R1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbW9kdWxlIGxvYWRpbmcgbG9naWMgdG8gaGFuZGxlIGEgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBjYW5ub3QgZml0IGluIHBhZ2UgZmxhZyBiaXRzLiBJdCBhZGRzIGEgcmV0cnkgbG9vcCBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgd2hlbiBgbW92ZV9tb2R1bGVgIHJldHVybnMgYC1FQUdBSU5gLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbW9kdWxlIGxvYWRlciB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgc3lzY2FsbHMgd2hlbiBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjExOjMxLjc2MzAwMzAxMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyNjY2MTQ5MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTozMS43NjM1MjYyOTFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzIyNjYwODUwODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFncyBleGNlZWQgdGhlIGF2YWlsYWJsZSBwYWdlIGZsYWcgYml0cy4gSXQgaW50cm9kdWNlcyBhIHJldHJ5IG1lY2hhbmlzbSBpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYCBieSByZXR1cm5pbmcgYC1FQUdBSU5gIGZyb20gYG1vdmVfbW9kdWxlKClgICh2aWEgYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWApLiBUaGUgc3RhdGUgaXMgc2F2ZWQgaW4gYSBsb2NhbCBzdGFjayBhcnJheSBgZnJvYl9zaXplYCB3aGljaCBpcyBmdWxseSBpbml0aWFsaXplZCB1c2luZyB0aGUgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgbWFjcm8gKGl0ZXJhdGluZyBvdmVyIGFsbCB2YWxpZCBtb2R1bGUgbWVtb3J5IHR5cGVzKS4gVGhlIHBhdGNoIGFsc28gbW92ZXMgYHJlbGVhc2VfbW9kdWxlX3RhZ3MoKWAgZWFybGllciBpbiB0aGUgZmlsZSB0byBiZSBjYWxsZWQgZHVyaW5nIHRoZSBlcnJvciBwYXRoLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggdW5pbml0aWFsaXplZCBkYXRhIHN0cnVjdHVyZXMsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5ZjIwNDg0NzljNWM1YWUxODRjZjRiMThjMzI4Yzg4ZjAyNzQ4ZjVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDY6MDk6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCA0NmRkOGQyNWE2MDU4Li5lZDI2ZjE2N2JlODRkIDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbisrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMjk0NCw2ICsyOTQ0LDcgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBtb2R1bGUgKm1vZDtcbiBcdGludCBlcnI7XG4rXHR1bnNpZ25lZCBsb25nIGZyb2Jfc2l6ZVtNT0RfTUVNX05VTV9UWVBFU107XG4gXG4gXHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG4gXHRlcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsXG5AQCAtMjk2NiwxOCArMjk2NywzOCBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4gXHQgKi9cbiBcdG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoaW5mby1cdTAwM2VoZHIsIGluZm8tXHUwMDNlc2VjaGRycywgaW5mby1cdTAwM2VzZWNzdHJpbmdzKTtcbiBcbitcdC8qXG4rXHQgKiBTYXZlIHRoZSBzaXplcyByZXNlcnZlZCBieSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKCkgc28gdGhleSBjYW5cbitcdCAqIGJlIHJlc3RvcmVkIGlmIHdlIHJldHJ5IGJlbG93LlxuK1x0ICovXG4rXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcbitcdFx0ZnJvYl9zaXplW3R5cGVdID0gaW5mby1cdTAwM2Vtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemU7XG4rXG4gXHQvKlxuIFx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbiBcdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55XG4gXHQgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy5cbiBcdCAqL1xuK3JldHJ5OlxuIFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuIFxuIFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4gXHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1x0aWYgKGVycikge1xuK1x0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG4rXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdFx0LypcbitcdFx0ICogLUVBR0FJTiBtZWFucyBwcm9maWxpbmcgd2FzIGRpc2FibGVkIGJ1dCB0aGUgbW9kdWxlXG4rXHRcdCAqIGNhbiBzdGlsbCBsb2FkIHdpdGhvdXQgaXQuIFJlc2V0IHN0YXRlIGFuZCByZXRyeS5cbitcdFx0ICovXG4rXHRcdHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKGluZm8sIGZsYWdzKTtcbitcdFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG4rXHRcdFx0aW5mby1cdTAwM2Vtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUgPSBmcm9iX3NpemVbdHlwZV07XG4rXHRcdGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnN5bV0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuK1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5zdHJdLnNoX2ZsYWdzIFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcbitcdFx0Z290byByZXRyeTtcbitcdH1cbiBcbiBcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xuIFx0bW9kID0gKHZvaWQgKilpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggYjMzNDEwMzEwNDc3OS4uMTEyYTAxNGQ0Yjg5MCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTgzNSw2ICs4MzUsNTIgQEAgc3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4re1xuK1x0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuK1x0c3RydWN0IG1vZHVsZSAqdmFsO1xuK1xuK1x0bWFzX2xvY2soXHUwMDI2bWFzKTtcbitcdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4rXHRcdGlmICh2YWwgPT0gbW9kKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIXVzZWQpXG4rXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuK1xuK1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XG4rXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcbitcdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbitcdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuK1xuK1x0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcbitcdFx0XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XG4rXG4rXHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbitcdFx0XHRwcl9pbmZvKFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cIixcbitcdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4rXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHR1c2VkID0gZmFsc2U7XG4rXHR9XG4rcmVsZWFzZV9hcmVhOlxuK1x0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuK1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbitcdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4rXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuK291dDpcbitcdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkwNCwxMCArOTUwLDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRpbnQgZ3Jvd19yZXM7XG4gXG4gXHRcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xuLVx0XHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbitcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbi1cdFx0XHRcdG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cHJfd2Fybl9vbmNlKFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCIsXG4rXHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiBcdFx0fVxuIFxuIFx0XHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XG5AQCAtOTIyLDUyICs5NzAsNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgb2Zmc2V0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcbi17XG4tXHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbi1cdHN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZztcbi1cdHN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7XG4tXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4tXG4tXHRtYXNfbG9jayhcdTAwMjZtYXMpO1xuLVx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbi1cdFx0aWYgKHZhbCA9PSBtb2QpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqL1xuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGlmICghdXNlZClcbi1cdFx0Z290byByZWxlYXNlX2FyZWE7XG4tXG4tXHRzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmluZGV4KTtcbi1cdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmxhc3QpO1xuLVx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xuLVx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4tXG4tXHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjPSBlbmRfdGFnOyB0YWcrKykge1xuLVx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcbi1cbi1cdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycylcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xuLVx0XHRcdHByX2luZm8oXCIlczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwiLFxuLVx0XHRcdFx0dGFnLVx1MDAzZWN0LmZpbGVuYW1lLCB0YWctXHUwMDNlY3QubGluZW5vLCB0YWctXHUwMDNlY3QubW9kbmFtZSxcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHVzZWQgPSBmYWxzZTtcbi1cdH1cbi1yZWxlYXNlX2FyZWE6XG4tXHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4tXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcdTAwMjZtYXMsIDApO1xuLVx0aWYgKHZhbCA9PSBcdTAwMjZwcmVwZW5kX21vZClcbi1cdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4tb3V0OlxuLVx0bWFzX3VubG9jayhcdTAwMjZtYXMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbiB7XG4gXHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTE6MzEuNzYzNTI2OTgxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NjI4NjE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTW9kdWxlIExvYWRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGhvdyBtb2R1bGVzIGFyZSBsb2FkZWQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYC1FQUdBSU5gIGVycm9ycyB0aGF0IGNhbiBwb3AgdXAgZHVyaW5nIHRhZyBhbGxvY2F0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWAgY2FuIGZhaWwgYmVjYXVzZSB3ZSdyZSB0cnlpbmcgdG8gY3JhbSB0b28gbWFueSB0YWdzIGludG8gdGhlIHBhZ2UgZmxhZyBiaXRzLiBXaGVuIHRoYXQgaGFwcGVucywgdGhlIHBhdGNoIGRpc2FibGVzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZywgcmVsZWFzZXMgdGhlIHRhZ3MsIGFuZCBiYWlscyBvdXQgd2l0aCBgLUVBR0FJTmAuIGBsYXlvdXRfYW5kX2FsbG9jYXRlKClgIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgdGhlbiBjYXRjaGVzIHRoZSBlcnJvciwgcmVzZXRzIHRoaW5ncywgYW5kIHRyaWVzIGFnYWluIHdpdGhvdXQgdXNpbmcgdGFncy4gVGhhdCdzIHRoZSBiYXNpYyBmbG93LlxuXG5CdXQgbm93LCBJIHNlZSBzb21ldGhpbmcgbmV3OiB0aGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGBmcm9iX3NpemVgIGFycmF5IHdpdGhpbiBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYC4gSXQncyBhbiBgdW5zaWduZWQgbG9uZ2AgYXJyYXkgb2YgYE1PRF9NRU1fTlVNX1RZUEVTYCAod2hpY2ggSSBrbm93IGlzIDcgZnJvbSBwYXN0IGV4cGVyaWVuY2UpIGVsZW1lbnRzLiBUaGUgY29kZSBpcyBzYXZpbmcgYGluZm8tXHUwMDNlbW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplYCBpbnRvIGBmcm9iX3NpemVgICpiZWZvcmUqIGBsYXlvdXRfc2VjdGlvbnMoKWAgaXMgY2FsbGVkLiBUaGVuLCBpZiBgbW92ZV9tb2R1bGUoKWAgcmV0dXJucyBgLUVBR0FJTmAsIGl0IHJlc3RvcmVzIGBpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZWAgZnJvbSBgZnJvYl9zaXplW3R5cGVdYCwgY2xlYXJzIGBTSEZfQUxMT0NgIGZyb20gc29tZSBzZWN0aW9ucywgYW5kIGp1bXBzIHRvIGByZXRyeWAuIE1ha2VzIHNlbnNlLCB0aGUgc2l6ZSBvZiBtZW1vcnkgcmVnaW9ucyBhcmUgc2F2ZWQgcHJpb3IgdG8gcG90ZW50aWFsIGZhaWx1cmUsIHRoZW4gcmVzdG9yZWQgYWZ0ZXIgZmFpbHVyZSB0byByZXN0YXJ0IGxheW91dC5cblxuVGhlIHJlZCBmbGFnIGlzIGFsd2F5cyB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXMgdGhpcyBgZnJvYl9zaXplYCBpbml0aWFsaXplZCBjb3JyZWN0bHk/IEl0IGlzIGZpbGxlZCBpbiBhIGxvb3A6XG5cbmBgYGNcblx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXG5cdFx0ZnJvYl9zaXplW3R5cGVdID0gaW5mby1cdTAwM2Vtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemU7XG5gYGBcblxuSSBoYXZlIHRvIGJlIGNhcmVmdWwgaGVyZS4uLiBUaGUgbG9vcCBpdGVyYXRlcyBvdmVyIGFsbCBcInZhbGlkXCIgbW9kdWxlIG1lbW9yeSB0eXBlcy4gV2hhdCBjb25zdGl0dXRlcyBcInZhbGlkXCIgaW4gdGhpcyBjb250ZXh0PyBJZiBzb21lIG9mIHRob3NlIDcgZWxlbWVudHMgYXJlbid0IGluaXRpYWxpemVkLCB3ZSBjb3VsZCBiZSByZWFkaW5nIGdhcmJhZ2Ugd2hlbiByZXN0b3JpbmcgdGhlIHNpemVzISBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgbWFjcm8gZGVmaW5pdGlvbiB0byBtYWtlIGFic29sdXRlbHkgc3VyZS4gQW55IHZ1bG5lcmFiaWxpdHkgaGVyZSB3b3VsZCBjcmVhdGUgYSBzZXJpb3VzIHNlY3VyaXR5IHJpc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MjQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTozOS4zMjYzOTMxMloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MTk5MDcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGZvcl9lYWNoX21vZF9tZW1fdHlwZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21vZHVsZS5oPTMxOD1lbnVtIG1vZF9tZW1fdHlwZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM0Ny1cXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oOjM0ODojZGVmaW5lIGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM0OS1cXHRmb3IgKGVudW0gbW9kX21lbV90eXBlICh0eXBlKSA9IDA7XFx0XFx0XFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTo0MS44NjgzODg0ODVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4OTU2MDI4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgZm9yX2VhY2hfbW9kX21lbV90eXBlYCwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZSBvbiB0aGlzIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIGZ1bmN0aW9uIG9yIG1hY3JvIG9yIHdoYXRldmVyIGl0IGlzLiBJIGNhbid0IHJlYWxseSBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSBvciBob3cgSSBtaWdodCBsZXZlcmFnZSBpdCBlZmZlY3RpdmVseSB3aXRob3V0IGEgcHJvcGVyIGRlZmluaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBwYXJhbWV0ZXJzLCBpdHMgcmV0dXJuIHR5cGUgKGlmIGFueSksIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGl0ICpkb2VzKiB1bmRlciB0aGUgaG9vZC4gV2hhdCBpcyBpdCBpdGVyYXRpbmcgb3Zlcj8gV2hhdCBraW5kIG9mIG1lbW9yeSB0eXBlcyBpcyBpdCBoYW5kbGluZz8gSXMgaXQgcmVsYXRlZCB0byBtb2R1bGVzIG9yIHNvbWUgc29ydCBvZiB1bmRlcmx5aW5nIG1lbW9yeSBtb2RlbD8gVGhpcyBpcyBwcm9iYWJseSBhIGxvdy1sZXZlbCByb3V0aW5lLCBzbyB0aGUgZGV0YWlscyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIGEgcHJvcGVyIHVuZGVyc3RhbmRpbmcuIEkgbmVlZCB0aGUgZnVsbCBjb250ZXh0IHRvIG1ha2UgYW55IHVzZWZ1bCBqdWRnbWVudHMgYWJvdXQgaXRzIHVzZWZ1bG5lc3MgYW5kIGFwcGxpY2F0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aGF0IGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTo0NS4zNTc5NTIxNVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5MzExODMxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb3JfZWFjaF9tb2RfbWVtX3R5cGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiLmNsYW5nLWZvcm1hdD03MT1Gb3JFYWNoTWFjcm9zOlxcbi0tXFxuLmNsYW5nLWZvcm1hdC0zMzYtICAtICdmb3JfZWFjaF9tbGVfc3ViZWxlbWVudCdcXG4uY2xhbmctZm9ybWF0OjMzNzogIC0gJ2Zvcl9lYWNoX21vZF9tZW1fdHlwZSdcXG4uY2xhbmctZm9ybWF0LTMzOC0gIC0gJ2Zvcl9lYWNoX21vbl9jYXBhYmxlX3JkdF9yZXNvdXJjZSdcXG4tLVxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmg9MzE4PWVudW0gbW9kX21lbV90eXBlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmgtMzQ3LVxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MzQ4OiNkZWZpbmUgZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmgtMzQ5LVxcdGZvciAoZW51bSBtb2RfbWVtX3R5cGUgKHR5cGUpID0gMDtcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM1Mi0jZGVmaW5lIGZvcl9jbGFzc19tb2RfbWVtX3R5cGUodHlwZSwgY2xhc3MpXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbW9kdWxlLmg6MzUzOlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21vZHVsZS5oLTM1NC1cXHRcXHRpZiAobW9kX21lbV90eXBlX2lzXyMjY2xhc3ModHlwZSkpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmM9MTI9dm9pZCBrbWVtbGVha19sb2FkX21vZHVsZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QsXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMTUtXFx0Lyogb25seSBzY2FuIHdyaXRhYmxlLCBub24tZXhlY3V0YWJsZSBzZWN0aW9ucyAqL1xcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxNjpcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xNy1cXHRcXHRpZiAodHlwZSAhPSBNT0RfREFUQSBcXHUwMDI2XFx1MDAyNiB0eXBlICE9IE1PRF9JTklUX0RBVEEgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTExOT1zdGF0aWMgdm9pZCBtb2RfdXBkYXRlX2JvdW5kcyhzdHJ1Y3QgbW9kdWxlICptb2QpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMTIwLXtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxMjE6XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xMjItXFx0XFx0c3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBcXHUwMDI2bW9kLVxcdTAwM2VtZW1bdHlwZV07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xMzk3PXN0YXRpYyB2b2lkIGZyZWVfbW9kX21lbShzdHJ1Y3QgbW9kdWxlICptb2QpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMTM5OC17XFxua2VybmVsL21vZHVsZS9tYWluLmM6MTM5OTpcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE0MDAtXFx0XFx0c3RydWN0IG1vZHVsZV9tZW1vcnkgKm1vZF9tZW0gPSBcXHUwMDI2bW9kLVxcdTAwM2VtZW1bdHlwZV07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNzg4PXN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjc5My1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNzk0OlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjc5NS1cXHRcXHRpZiAoIW1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemUpIHtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI4OTI9c3RhdGljIHZvaWQgZmx1c2hfbW9kdWxlX2ljYWNoZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODk4LVxcdCAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4OTk6XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTAwLVxcdFxcdGNvbnN0IHN0cnVjdCBtb2R1bGVfbWVtb3J5ICptb2RfbWVtID0gXFx1MDAyNm1vZC1cXHUwMDNlbWVtW3R5cGVdO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0Mz1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTczLVxcdCAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5NzQ6XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjk3NS1cXHRcXHRmcm9iX3NpemVbdHlwZV0gPSBpbmZvLVxcdTAwM2Vtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjk5NS1cXHRcXHRyZXdyaXRlX3NlY3Rpb25faGVhZGVycyhpbmZvLCBmbGFncyk7XFxua2VybmVsL21vZHVsZS9tYWluLmM6Mjk5NjpcXHRcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTk3LVxcdFxcdFxcdGluZm8tXFx1MDAzZW1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemUgPSBmcm9iX3NpemVbdHlwZV07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDk4PXN0YXRpYyBub2lubGluZSBpbnQgZG9faW5pdF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzEwNC1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMTA1OlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMzEwNi1cXHRcXHRjb25zdCBzdHJ1Y3QgbW9kdWxlX21lbW9yeSAqbW9kX21lbSA9IFxcdTAwMjZtb2QtXFx1MDAzZW1lbVt0eXBlXTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvcHJvY2ZzLmM9NjU9c3RhdGljIHVuc2lnbmVkIGludCBtb2R1bGVfdG90YWxfc2l6ZShzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3Byb2Nmcy5jLTY4LVxcbmtlcm5lbC9tb2R1bGUvcHJvY2ZzLmM6Njk6XFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpXFxua2VybmVsL21vZHVsZS9wcm9jZnMuYy03MC1cXHRcXHRzaXplICs9IG1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemU7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmM9Nzg9dm9pZCBtb2RfdHJlZV9pbnNlcnQoc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYy03OS17XFxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jOjgwOlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jLTgxLVxcdFxcdG1vZC1cXHUwMDNlbWVtW3R5cGVdLm10bi5tb2QgPSBtb2Q7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3RyZWVfbG9va3VwLmM9OTU9dm9pZCBtb2RfdHJlZV9yZW1vdmUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbmtlcm5lbC9tb2R1bGUvdHJlZV9sb29rdXAuYy05Ni17XFxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jOjk3OlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS90cmVlX2xvb2t1cC5jLTk4LVxcdFxcdGlmIChtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTo0Ny45NTEwNzcwNjlaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NDc3ODE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBNb2R1bGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIG1vZHVsZSBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgbW9kdWxlLmhgIGluIHRoZSBMaW51eCBrZXJuZWwgaGVhZGVycy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdvaW5nIHRvIGxpbmVzIDM0OCB0aHJvdWdoIDM1MSwgd2hpY2ggc2hvdWxkIGdldCBtZSBzdGFydGVkIG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBrZXJuZWwgbWFuYWdlcyBtb2R1bGUgbG9hZCBhbmQgdW5sb2FkIHJvdXRpbmVzLiBJJ20gaW50ZXJlc3RlZCBpbiB0aG9zZSBsaW5lcywgYmVjYXVzZSBJIGtub3cgdGhleSdyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIG1vZHVsZSBsaWZlY3ljbGUgZnJvbSB0aGUgZGV2ZWxvcGVyJ3MgcGVyc3BlY3RpdmUuIEkgZXhwZWN0IHRvIHNlZSB0aGUga2V5IHN0cnVjdHVyZXMgYW5kIG1hY3JvcyBpbnZvbHZlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwNjoxMTo1MS4xNDU4NTg4OTVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbW9kdWxlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzQ1OlxcdFxcdChtb2RfbWVtX3R5cGVfaXNfY29yZSh0eXBlKSBcXHUwMDI2XFx1MDAyNlxcdFxcXFxcXG4gMzQ2OlxcdFxcdCBtb2RfbWVtX3R5cGVfaXNfZGF0YSh0eXBlKSlcXG4gMzQ3OlxcdFxcbiAzNDg6XFx0I2RlZmluZSBmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcXHRcXHRcXHRcXFxcXFxuIDM0OTpcXHRcXHRmb3IgKGVudW0gbW9kX21lbV90eXBlICh0eXBlKSA9IDA7XFx0XFx0XFxcXFxcbiAzNTA6XFx0XFx0ICAgICAodHlwZSkgXFx1MDAzYyBNT0RfTUVNX05VTV9UWVBFUzsgKHR5cGUpKyspXFxuIDM1MTpcXHRcXG4gMzUyOlxcdCNkZWZpbmUgZm9yX2NsYXNzX21vZF9tZW1fdHlwZSh0eXBlLCBjbGFzcylcXHRcXHRcXFxcXFxuIDM1MzpcXHRcXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSlcXHRcXHRcXHRcXFxcXFxuIDM1NDpcXHRcXHRcXHRpZiAobW9kX21lbV90eXBlX2lzXyMjY2xhc3ModHlwZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDA2OjExOjUxLjE0NjAyMTk5NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg4MzU1MDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCByZWdhcmRpbmcgdGhlIGluaXRpYWwgY29uY2VybiBhYm91dCBgZnJvYl9zaXplYCwgaXQncyBjbGVhciBhZnRlciBleGFtaW5pbmcgdGhlIGNvZGUgdGhhdCBpdCdzIGEgbG9jYWwsIHN0YWNrLWFsbG9jYXRlZCBhcnJheS4gVGhlIGxvb3AgdXNpbmcgYGZvcl9lYWNoX21vZF9tZW1fdHlwZWAgKmRvZXMqIGluaXRpYWxpemUgYWxsIGVsZW1lbnRzIG9mIGBmcm9iX3NpemVgIGJlZm9yZSBpdCdzIHVzZWQuIFRoZXJlZm9yZSwgdGhlIHJlc3RvcmF0aW9uIG9mIGBpbmZvLVx1MDAzZW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZWAgdXNpbmcgYGZyb2Jfc2l6ZWAgaXMgcGVyZmVjdGx5IHNhZmUg4oCTIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGVyZS4gV2UncmUgZ29vZC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgYG1tL2FsbG9jX3RhZy5jYCBwYXRjaC4gVGhlIHByaW1hcnkgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBvbiBgcmVsZWFzZV9tb2R1bGVfdGFnc2AgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBgbW9kdWxlX3RhZ3NgIHN0cnVjdHVyZS4gVGhlIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggbW9kdWxlIHRhZ3MgdG8gY2xlYW4gdXAgdW51c2VkIGNvdW50ZXJzLCBhbmQgaXQgcmVhZHMgYHRhZy1cdTAwM2Vjb3VudGVyc2AgaW4gdGhlIHByb2Nlc3MsIHByaW50aW5nIGluZm9ybWF0aW9uIGlmIHRob3NlIGNvdW50ZXJzIGhhdmVuJ3QgYmVlbiBjbGVhbmVkIHVwLiBUaGUgY3J1Y2lhbCB0aGluZyBoZXJlIGlzIHRvIGNvbmZpcm0gdGhlcmUncyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkEgcXVpY2sgcmV2aWV3IG9mIHRoZSBkaWZmIHJldmVhbHMgdGhhdCBgcmVsZWFzZV9tb2R1bGVfdGFnc2Agd2FzIG1vdmVkIHVwIGluIHRoZSBmaWxlLiBUaGlzIG1vdmUgbWFrZXMgaXQgZWFzaWVyIHRvIGNhbGwgaXQgZnJvbSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuIEluIGByZXNlcnZlX21vZHVsZV90YWdzYCwgdGhlIHBhdGNoIGluY2x1ZGVzIGVycm9yIGhhbmRsaW5nLiBJZiB0aGUgbnVtYmVyIG9mIHRhZ3MgbmVlZGVkIGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSBiaXRzLCB0aGUgY29kZSBub3cgY2FsbHMgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgICpiZWZvcmUqIHJldHVybmluZyBgLUVBR0FJTmAuIFRoaXMgZWZmZWN0aXZlbHkgcmV0cmllcyBtb2R1bGUgbG9hZGluZyB3aXRob3V0IGFsbG9jYXRpb24gb2YgcHJvZmlsaW5nIHRhZ3MuXG5cbkNyaXRpY2FsbHksIHRoZSBjb3JlIGxvZ2ljIGhlcmUgaXMgYWJvdXQgKmZhaWxpbmcqIGdyYWNlZnVsbHkgd2hlbiByZXNvdXJjZXMgYXJlIGNvbnN0cmFpbmVkLiBUaGlzIHBhdGNoIHByaW1hcmlseSByZXN0b3JlcyBtb2R1bGUgc2l6ZXMgYW5kIHJldHJpZXMgd2l0aG91dCBhbGxvY2F0aW5nIHRhZ3MsIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkIGJ5IHRoaXMgY2hhbmdlLCBnaXZlbiB0aGUgbG9naWMuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGFkZHJlc3NlcyBtb2R1bGUgbG9hZGluZyByZXRyeSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGV4Y2VlZCBsaW1pdHMgYW5kIGRvZXMgbm90IGludm9sdmUgdXNlci1zcGFjZSBjb3BpZXMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIEkgY29uY2x1ZGUgdGhhdCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDksIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDY6MTI6MDQuMDI5NTc1OTI4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZ3MgZXhjZWVkIHRoZSBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIEl0IGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaW4gYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgYnkgcmV0dXJuaW5nIGAtRUFHQUlOYCBmcm9tIGBtb3ZlX21vZHVsZSgpYCAodmlhIGByZXNlcnZlX21vZHVsZV90YWdzKClgKS4gVGhlIHN0YXRlIGlzIHNhdmVkIGluIGEgbG9jYWwgc3RhY2sgYXJyYXkgYGZyb2Jfc2l6ZWAgd2hpY2ggaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdXNpbmcgdGhlIGBmb3JfZWFjaF9tb2RfbWVtX3R5cGVgIG1hY3JvIChpdGVyYXRpbmcgb3ZlciBhbGwgdmFsaWQgbW9kdWxlIG1lbW9yeSB0eXBlcykuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIGByZWxlYXNlX21vZHVsZV90YWdzKClgIGVhcmxpZXIgaW4gdGhlIGZpbGUgdG8gYmUgY2FsbGVkIGR1cmluZyB0aGUgZXJyb3IgcGF0aC4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBjb21wbGV4IHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgbGVha3MsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWdzIGV4Y2VlZCB0aGUgYXZhaWxhYmxlIHBhZ2UgZmxhZyBiaXRzLiBJdCBpbnRyb2R1Y2VzIGEgcmV0cnkgbWVjaGFuaXNtIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlKClgIGJ5IHJldHVybmluZyBgLUVBR0FJTmAgZnJvbSBgbW92ZV9tb2R1bGUoKWAgKHZpYSBgcmVzZXJ2ZV9tb2R1bGVfdGFncygpYCkuIFRoZSBzdGF0ZSBpcyBzYXZlZCBpbiBhIGxvY2FsIHN0YWNrIGFycmF5IGBmcm9iX3NpemVgIHdoaWNoIGlzIGZ1bGx5IGluaXRpYWxpemVkIHVzaW5nIHRoZSBgZm9yX2VhY2hfbW9kX21lbV90eXBlYCBtYWNybyAoaXRlcmF0aW5nIG92ZXIgYWxsIHZhbGlkIG1vZHVsZSBtZW1vcnkgdHlwZXMpLiBUaGUgcGF0Y2ggYWxzbyBtb3ZlcyBgcmVsZWFzZV9tb2R1bGVfdGFncygpYCBlYXJsaWVyIGluIHRoZSBmaWxlIHRvIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGVycm9yIHBhdGguIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcywgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGxlYWtzLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow9skjl[1] Phase: Succeeded StartedAt: 2026-08-12 06:12:15 +0000 UTC FinishedAt: 2026-08-12 06:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 06:12:15 +0000 UTC FinishedAt: 2026-08-12 06:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2] Phase: Succeeded StartedAt: 2026-08-12 06:12:15 +0000 UTC FinishedAt: 2026-08-12 10:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 06:12:15 +0000 UTC FinishedAt: 2026-08-12 10:01:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 06:12:15 +0000 UTC FinishedAt: 2026-08-12 06:12:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 06:12:15 +0000 UTC FinishedAt: 2026-08-12 06:12:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9skjl/series-workflow9skjl-convert-artifact-2699029325/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 06:12:25 +0000 UTC FinishedAt: 2026-08-12 06:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 06:12:25 +0000 UTC FinishedAt: 2026-08-12 06:30:25 +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:*be4bd52a-77d6-48ae-be6f-d5893af5a07e,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-workflow9skjl/series-workflow9skjl-convert-artifact-2699029325/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": "31ff6669-baf4-4ae4-98d1-933b32ed1e72", "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-workflow9skjl/series-workflow9skjl-build-action-584330179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 06:12:25 +0000 UTC FinishedAt: 2026-08-12 06:30:15 +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:*be4bd52a-77d6-48ae-be6f-d5893af5a07e,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-workflow9skjl/series-workflow9skjl-convert-artifact-2699029325/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": "31ff6669-baf4-4ae4-98d1-933b32ed1e72", "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-workflow9skjl/series-workflow9skjl-build-action-584330179/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 06:30:25 +0000 UTC FinishedAt: 2026-08-12 06:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 06:30:25 +0000 UTC FinishedAt: 2026-08-12 06:30:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 06:30:25 +0000 UTC FinishedAt: 2026-08-12 06:30:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 06:30:25 +0000 UTC FinishedAt: 2026-08-12 06:30:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9skjl/series-workflow9skjl-convert-artifact-4241831592/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 06:30:35 +0000 UTC FinishedAt: 2026-08-12 06:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 06:30:35 +0000 UTC FinishedAt: 2026-08-12 06:32:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*31ff6669-baf4-4ae4-98d1-933b32ed1e72,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-workflow9skjl/series-workflow9skjl-build-action-584330179/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-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 06:32:39 +0000 UTC FinishedAt: 2026-08-12 06:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 06:32:39 +0000 UTC FinishedAt: 2026-08-12 06:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 06:32:39 +0000 UTC FinishedAt: 2026-08-12 06:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 06:32:39 +0000 UTC FinishedAt: 2026-08-12 06:52:12 +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:*be4bd52a-77d6-48ae-be6f-d5893af5a07e,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-workflow9skjl/series-workflow9skjl-convert-artifact-4241831592/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": "a152b9d0-4f4b-4df4-b046-98d7efae33f1", "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-workflow9skjl/series-workflow9skjl-build-action-2887660628/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 06:32:39 +0000 UTC FinishedAt: 2026-08-12 06:52:02 +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:*be4bd52a-77d6-48ae-be6f-d5893af5a07e,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-workflow9skjl/series-workflow9skjl-convert-artifact-4241831592/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": "a152b9d0-4f4b-4df4-b046-98d7efae33f1", "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-workflow9skjl/series-workflow9skjl-build-action-2887660628/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 06:52:12 +0000 UTC FinishedAt: 2026-08-12 06:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 06:52:12 +0000 UTC FinishedAt: 2026-08-12 06:52:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 06:52:12 +0000 UTC FinishedAt: 2026-08-12 06:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 06:52:12 +0000 UTC FinishedAt: 2026-08-12 06:54:05 +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:*a152b9d0-4f4b-4df4-b046-98d7efae33f1,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-workflow9skjl/series-workflow9skjl-build-action-2887660628/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-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 06:54:15 +0000 UTC FinishedAt: 2026-08-12 10:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 06:54:15 +0000 UTC FinishedAt: 2026-08-12 10:01:43 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},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:*31ff6669-baf4-4ae4-98d1-933b32ed1e72,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a152b9d0-4f4b-4df4-b046-98d7efae33f1,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-workflow9skjl/series-workflow9skjl-build-action-584330179/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-workflow9skjl/series-workflow9skjl-build-action-2887660628/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 06:54:15 +0000 UTC FinishedAt: 2026-08-12 06:54:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 06:54:15 +0000 UTC FinishedAt: 2026-08-12 06:54:21 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},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-workflow9skjl/series-workflow9skjl-convert-artifact-839534049/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 06:54:15 +0000 UTC FinishedAt: 2026-08-12 06:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 06:54:15 +0000 UTC FinishedAt: 2026-08-12 06:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 06:54:16 +0000 UTC FinishedAt: 2026-08-12 06:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 06:54:26 +0000 UTC FinishedAt: 2026-08-12 10:01:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9skjl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_init_module","sys_finit_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING"],"series_id":"c1e16512-ce79-401e-a6fa-c2118a0032a3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 06:54:26 +0000 UTC FinishedAt: 2026-08-12 10:01:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*31ff6669-baf4-4ae4-98d1-933b32ed1e72,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a152b9d0-4f4b-4df4-b046-98d7efae33f1,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-workflow9skjl/series-workflow9skjl-build-action-584330179/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-workflow9skjl/series-workflow9skjl-build-action-2887660628/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-workflow9skjl/series-workflow9skjl-convert-artifact-839534049/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,}