Name: series-workflowkgp7c Phase: Succeeded StartedAt: 2026-08-10 19:36:12 +0000 UTC FinishedAt: 2026-08-10 23:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[0] Phase: Succeeded StartedAt: 2026-08-10 19:36:12 +0000 UTC FinishedAt: 2026-08-10 19:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 19:36:12 +0000 UTC FinishedAt: 2026-08-10 19:47:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6b8c8af514d739d0335f5579b585e02babe8a727", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "USERFAULTFD", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6b8c8af514d739d0335f5579b585e02babe8a727", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "USERFAULTFD", "SHMEM" ], "series_id": "e4858e98-a05e-4a6e-b7d9-4880a125695b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_get_folio", "read_swap_cache_async", "swapin_readahead", "swap_retry_table_alloc", "swp_swapcount", "swap_put_entries_direct", "zswap_store", "zswap_load" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG1lbV9nZXRfZm9saW8mIzM0OywKICAgICYjMzQ7cmVhZF9zd2FwX2NhY2hlX2FzeW5jJiMzNDssCiAgICAmIzM0O3N3YXBpbl9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7c3dhcF9yZXRyeV90YWJsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtzd3Bfc3dhcGNvdW50JiMzNDssCiAgICAmIzM0O3N3YXBfcHV0X2VudHJpZXNfZGlyZWN0JiMzNDssCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBhbiBlcnJvciBwb2ludGVyIChgRVJSX1BUUigtRUlOVkFMKWApIGZvciBtYWxmb3JtZWQgc3dhcCBlbnRyaWVzLCByYXRoZXIgdGhhbiBqdXN0IGBOVUxMYC4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL21lbW9yeS5jYCwgYG1tL21pbmNvcmUuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYG1tL3VzZXJmYXVsdGZkLmNgLCBgbW0venN3YXAuY2ApIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoKWAgYW5kIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAoZS5nLiwgcmV0dXJuaW5nIGBWTV9GQVVMVF9TSUdCVVNgIGluIGBkb19zd2FwX3BhZ2UoKWApLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYnVncyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZykuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQsIG5vIG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1N2Y2ZDc1ZjhkNzVhNjE3N2I5ZmI5Njc5OTdhOGM1ZDFhNjc3ZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxOTozODoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBkOWNmOTQxOTY3Y2YwLi4yODQyY2Q5NzZmMWQzIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtNDk1Niw4ICYjNDM7NDk1NiwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKVxuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiYjNDM7XHRcdC8qIEEgbWFsZm9ybWVkIGVudHJ5IG5ldmVyIGJlY29tZXMgdmFsaWQsIHNvIGRvbiYjMzk7dCByZXRyeSBpdC4gKi9cbiYjNDM7XHRcdGlmIChJU19FUlIoc2kpKVxuJiM0MztcdFx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRzaSA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0aWYgKGZvbGlvKVxuZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuY1xuaW5kZXggZmY0YWM4MjgxNzY4My4uYzA4NjgzNmJjNGJjYyAxMDA2NDRcbi0tLSBhL21tL21pbmNvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWluY29yZS5jXG5AQCAtNzEsNyAmIzQzOzcxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluY29yZV9zd2FwKHN3cF9lbnRyeV90IGVudHJ5LCBib29sIHNobWVtKVxuIFx0ICovXG4gXHRpZiAoc2htZW0pIHtcbiBcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRpZiAoIXNpKVxuJiM0MztcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA2NTU3MmNiZjFiZDNjLi5kMGE5ZjUyYmZlZDcxIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTIyNzYsNyAmIzQzOzIyNzYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpO1xuIFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKSB7XG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuIFx0XHRpZiAob3JkZXIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdGVsc2VcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDRiN2EzMzAzYzQ2M2IuLmYyZTg2ZDY2MjZlY2MgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTcxNSw3ICYjNDM7NzE1LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRtcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCBcdTAwMjZpbHgpO1xuQEAgLTk1MSw3ICYjNDM7OTUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF92bWFfcmVhZGFoZWFkKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIFx0XHQgKi9cbiBcdFx0aWYgKHN3cF90eXBlKGVudHJ5KSAhPSBzd3BfdHlwZSh0YXJnX2VudHJ5KSkge1xuIFx0XHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0XHRpZiAoIXNpKVxuJiM0MztcdFx0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oXHUwMDI2Y3R4LCBlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNGQ0ZTNlMzA1OWY2Yi4uMjk2MTJhMGNmN2FmYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNTA0LDcgJiM0MzsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIG9mZnNldCk7XG5AQCAtMTg1OSw3ICYjNDM7MTg1OSw5IEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gICogQ2hlY2sgd2hldGhlciBzd2FwIGVudHJ5IGlzIHZhbGlkIGluIHRoZSBzd2FwIGRldmljZS4gIElmIHNvLFxuICAqIHJldHVybiBwb2ludGVyIHRvIHN3YXBfaW5mb19zdHJ1Y3QsIGFuZCBrZWVwIHRoZSBzd2FwIGVudHJ5IHZhbGlkXG4gICogdmlhIHByZXZlbnRpbmcgdGhlIHN3YXAgZGV2aWNlIGZyb20gYmVpbmcgc3dhcG9mZiwgdW50aWxcbi0gKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuXG4mIzQzOyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhXG4mIzQzOyAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXksIGFuZCBFUlJfUFRSKC1FSU5WQUwpIGlmIHRoZSBlbnRyeSBpdHNlbGZcbiYjNDM7ICogaXMgbWFsZm9ybWVkIGFuZCBjYW4gbmV2ZXIgbmFtZSBhIHNsb3Qgb24gYW55IGRldmljZS5cbiAgKlxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZiYjNDM7c3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbkBAIC0xODk5LDEzICYjNDM7MTkwMSwxNCBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIFxuIFx0cmV0dXJuIHNpO1xuIGJhZF9ub2ZpbGU6XG4tXHRwcl9lcnIoXCYjMzQ7JXM6ICVzJTA4bHhcXG5cJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbiYjNDM7XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6ICVzJTA4bHhcXG5cJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBvdXQ6XG4gXHRyZXR1cm4gTlVMTDtcbiBwdXRfb3V0OlxuLVx0cHJfZXJyKFwmIzM0OyVzOiAlcyUwOGx4XFxuXCYjMzQ7LCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTtcbiYjNDM7XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6ICVzJTA4bHhcXG5cJiMzNDssIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xuIFx0cGVyY3B1X3JlZl9wdXQoXHUwMDI2c2ktXHUwMDNldXNlcnMpO1xuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gfVxuIFxuIC8qXG5AQCAtMjAwMSw3ICYjNDM7MjAwNCw3IEBAIGludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0aW50IGNvdW50O1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKCFzaSlcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcbkBAIC0yMTI3LDcgJiM0MzsyMTMwLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKFdBUk5fT05fT05DRSghc2kpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoSVNfRVJSX09SX05VTEwoc2kpKSlcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKFdBUk5fT05fT05DRShlbmRfb2Zmc2V0IFx1MDAzZSBzaS1cdTAwM2VtYXgpKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xuaW5kZXggMjRhNGQ5MmZmYTNjMi4uYmY3YmM3ZmIxYWEwZiAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0xNzAwLDcgJiM0MzsxNzAwLDggQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdFx0fVxuIFxuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICh1bmxpa2VseSghc2kpKSB7XG4mIzQzO1x0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4mIzQzO1x0XHRcdHNpID0gTlVMTDtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGY3YzljODlmNjQ0OWMuLmJjOWI5MzFkNmY0NDcgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtOTk3LDcgJiM0Mzs5OTcsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbi1cdGlmICghc2kpXG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZ2V0X2ZvbGlvJiMzNDssCiAgICAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luYyYjMzQ7LAogICAgJiMzNDtzd2FwaW5fcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O3N3YXBfcmV0cnlfdGFibGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c3dwX3N3YXBjb3VudCYjMzQ7LAogICAgJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU5WQUwpYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcy4gSXQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIChjb3JlIG1tLCBzaG1lbSwgbWluY29yZSwgc3dhcGZpbGUsIHVzZXJmYXVsdGZkLCB6c3dhcCkgdG8gaGFuZGxlIHRoZSBuZXcgcmV0dXJuIHR5cGUgdXNpbmcgYElTX0VSUl9PUl9OVUxMKClgLiBOb3RhYmx5LCBgZG9fc3dhcF9wYWdlKClgIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYElTX0VSUigpYCBhbmQgcmV0dXJucyBgVk1fRkFVTFRfU0lHQlVTYCBpbnN0ZWFkIG9mIHJldHJ5aW5nLCBmaXhpbmcgYSBwb3RlbnRpYWwgaW5maW5pdGUgcGFnZSBmYXVsdCBsb29wIGZvciBtYWxmb3JtZWQgZW50cmllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDU3ZjZkNzVmOGQ3NWE2MTc3YjlmYjk2Nzk5N2E4YzVkMWE2NzdlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBkOWNmOTQxOTY3Y2YwLi4yODQyY2Q5NzZmMWQzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDk1Niw4ICYjNDM7NDk1NiwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAogCS8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi8KIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKHVubGlrZWx5KCFzaSkpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpIHsKJiM0MzsJCS8qIEEgbWFsZm9ybWVkIGVudHJ5IG5ldmVyIGJlY29tZXMgdmFsaWQsIHNvIGRvbiYjMzk7dCByZXRyeSBpdC4gKi8KJiM0MzsJCWlmIChJU19FUlIoc2kpKQomIzQzOwkJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKJiM0MzsJCXNpID0gTlVMTDsKIAkJZ290byBvdXQ7CiYjNDM7CX0KIAogCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCWlmIChmb2xpbykKZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuYwppbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NAotLS0gYS9tbS9taW5jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWluY29yZS5jCkBAIC03MSw3ICYjNDM7NzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pCiAJICovCiAJaWYgKHNobWVtKSB7CiAJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJaWYgKCFzaSkKJiM0MzsJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCQlyZXR1cm4gMDsKIAl9CiAJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA2NTU3MmNiZjFiZDNjLi5kMGE5ZjUyYmZlZDcxIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNzYsNyAmIzQzOzIyNzYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpOwogCW9yZGVyID0gc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGV4LCBpbmRleF9lbnRyeSk7Ci0JaWYgKHVubGlrZWx5KCFzaSkpIHsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewogCQlpZiAob3JkZXIgJmx0OyAwKQogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA0YjdhMzMwM2M0NjNiLi5mMmU4NmQ2NjI2ZWNjIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC03MTUsNyAmIzQzOzcxNSw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiBOVUxMOwogCiAJbXBvbCA9IGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgMCwgJmFtcDtpbHgpOwpAQCAtOTUxLDcgJiM0Mzs5NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCSAqLwogCQlpZiAoc3dwX3R5cGUoZW50cnkpICE9IHN3cF90eXBlKHRhcmdfZW50cnkpKSB7CiAJCQlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JCQlpZiAoIXNpKQomIzQzOwkJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCQkJY29udGludWU7CiAJCX0KIAkJZm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oJmFtcDtjdHgsIGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNGQ0ZTNlMzA1OWY2Yi4uMjk2MTJhMGNmN2FmYSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0xNTA0LDcgJiM0MzsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCkKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAwOwogCiAJY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIG9mZnNldCk7CkBAIC0xODU5LDcgJiM0MzsxODU5LDkgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbywKICAqIHJldHVybiBwb2ludGVyIHRvIHN3YXBfaW5mb19zdHJ1Y3QsIGFuZCBrZWVwIHRoZSBzd2FwIGVudHJ5IHZhbGlkCiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbAotICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLgomIzQzOyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhCiYjNDM7ICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTlZBTCkgaWYgdGhlIGVudHJ5IGl0c2VsZgomIzQzOyAqIGlzIG1hbGZvcm1lZCBhbmQgY2FuIG5ldmVyIG5hbWUgYSBzbG90IG9uIGFueSBkZXZpY2UuCiAgKgogICogTm90aWNlIHRoYXQgc3dhcG9mZiBvciBzd2Fwb2ZmJiM0Mztzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlCiAgKiBwZXJjcHVfcmVmX3RyeWdldF9saXZlKCkgaW4gZ2V0X3N3YXBfZGV2aWNlKCkgb3IgYWZ0ZXIgdGhlCkBAIC0xODk5LDEzICYjNDM7MTkwMSwxNCBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KQogCiAJcmV0dXJuIHNpOwogYmFkX25vZmlsZToKLQlwcl9lcnIoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTsKJiM0MzsJcHJfZXJyX3JhdGVsaW1pdGVkKCYjMzQ7JXM6ICVzJTA4bHhcbiYjMzQ7LCBfX2Z1bmNfXywgQmFkX2ZpbGUsIGVudHJ5LnZhbCk7CiYjNDM7CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogb3V0OgogCXJldHVybiBOVUxMOwogcHV0X291dDoKLQlwcl9lcnIoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpOwomIzQzOwlwcl9lcnJfcmF0ZWxpbWl0ZWQoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpOwogCXBlcmNwdV9yZWZfcHV0KCZhbXA7c2ktJmd0O3VzZXJzKTsKLQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKIC8qCkBAIC0yMDAxLDcgJiM0MzsyMDA0LDcgQEAgaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpCiAJaW50IGNvdW50OwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAwOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgc3dwX29mZnNldChlbnRyeSkpOwpAQCAtMjEyNyw3ICYjNDM7MjEzMCw3IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucikKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKFdBUk5fT05fT05DRSghc2kpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpCiAJCXJldHVybjsKIAlpZiAoV0FSTl9PTl9PTkNFKGVuZF9vZmZzZXQgJmd0OyBzaS0mZ3Q7bWF4KSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuYwppbmRleCAyNGE0ZDkyZmZhM2MyLi5iZjdiYzdmYjFhYTBmIDEwMDY0NAotLS0gYS9tbS91c2VyZmF1bHRmZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmMKQEAgLTE3MDAsNyAmIzQzOzE3MDAsOCBAQCBzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZAogCQl9CiAKIAkJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCQlpZiAodW5saWtlbHkoIXNpKSkgewomIzQzOwkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewomIzQzOwkJCXNpID0gTlVMTDsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggZjdjOWM4OWY2NDQ5Yy4uYmM5YjkzMWQ2ZjQ0NyAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC05OTcsNyAmIzQzOzk5Nyw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAKIAkvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqLwogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTsKLQlpZiAoIXNpKQomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKQogCQlyZXR1cm4gLUVFWElTVDsKIAogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3dhcCBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIHNvbWUgc3dhcCBoYW5kbGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB3ZSBkZWFsIHdpdGggdGhvc2UgcG90ZW50aWFsbHkgbmFzdHkgbWFsZm9ybWVkIHN3YXAgZW50cmllcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgaW4gYGdldF9zd2FwX2RldmljZSgpYCwgd2hlcmUgaXQmIzM5O3Mgbm93IHJldHVybmluZyBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIHRoZXNlIGJhZCBlbnRyaWVzLiBUaGlzIHN1YnRsZSBzaGlmdCBoYXMgYSByaXBwbGUgZWZmZWN0LCBmb3JjaW5nIGEgYnVuY2ggb2YgY2FsbGVycyBpbiBgbW0vYCB0byB1cGRhdGUgdGhlaXIgY2hlY2tzIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoc2kpYC4gU21hcnQgbW92ZSwgY2F0Y2hlcyBhbGwgY2FzZXMuCgpUaGUgYGRvX3N3YXBfcGFnZSgpYCBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5LmNgIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGFkZHJlc3NlcyBgSVNfRVJSKHNpKWAgYnkgcmV0dXJuaW5nIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2Ugbm93LCBpbnN0ZWFkIG9mIGp1c3Qgc2lsZW50bHkgZmFpbGluZyBhbmQgcG90ZW50aWFsbHkgbG9vcGluZyBmb3JldmVyIG9uIGEgcGFnZSBmYXVsdCwgd2UmIzM5O3JlIGV4cGxpY2l0bHkgc2lnbmFsaW5nIGEgYnVzIGVycm9yLiBUaGlzIGlzIG11Y2ggYmV0dGVyLCBhbmQgcmVhbGx5IHdvcnRoIGZ1enppbmchCgpMZXQmIzM5O3Mgc2Vl4oCmIE1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBkb19zd2FwX3BhZ2VgLCBgbWluY29yZV9zd2FwYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcF92bWFfcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBPa2F5LCB0aGF0IGdpdmVzIHVzIGEgZ29vZCBvdmVydmlldy4KCkkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIGBkb19zd2FwX3BhZ2VgIGlzIGRlZmluaXRlbHkgaG90LCBidXQgdGhlIHBhdGNoJiMzOTtzIG1haW4gY2hhbmdlIGlzIGluIGVycm9yIGhhbmRsaW5nLiBgZ2V0X3N3YXBfZGV2aWNlYCBpcyBhbHNvIGhvdCwgYnV0IGhhbmRsaW5nIG9mIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMgaXMgdGhlIHRhcmdldCBoZXJlLiBUaGVuIHdlIGhhdmUgYG1vdmVfcGFnZXNfcHRlc2AgKHVzZXJmYXVsdGZkKSBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgKHpzd2FwKS4gYHNobWVtX3N3YXBpbl9mb2xpb2AgaXMgcmVsYXRlZCB0byBzaG1lbS4KCk9rYXksIGxldCYjMzk7cyB6b29tIGluIG9uIGBnZXRfc3dhcF9kZXZpY2VgIGFuZCBpdHMgY2FsbGVycy4gVGhlIGtleSBoZXJlIGlzIHRoZSBoYW5kbGluZyBvZiAqbWFsZm9ybWVkKiBlbnRyaWVzLiBNeSBndXQgdGVsbHMgbWUgdXNlciBzcGFjZSBpcyB3aGVyZSB0aGlzIHZ1bG5lcmFiaWxpdHkgd2lsbCBsaWtlbHkgYmUgZm91bmQuIFNvLCBpdCYjMzk7cyB0aG9zZSBgbWFkdmlzZWAgY2FsbHMgYW5kIHVzZXJmYXVsdGZkIHRoYXQgYXJlIHBvdGVudGlhbCB2ZWN0b3JzIGZvciBpbnRyb2R1Y2luZyBiYWQgZW50cmllcy4gSWYgYGdldF9zd2FwX2RldmljZWAgcmV0dXJuZWQgYE5VTExgIGJlZm9yZSwgYGRvX3N3YXBfcGFnZWAganVzdCBza2lwcGVkIGFuZCByZXR1cm5lZCAwIChwb3NzaWJseSBsZWFkaW5nIHRvIGluZmluaXRlIGxvb3ApLiBOb3cgaXQgY2F1c2VzIGEgU0lHQlVTLiBUaGF0JiMzOTtzIGEgZ29vZCBjaGFuZ2UuCgpMZXQgbWUgdGhpbmsgYWJvdXQgdGhlIGNvbmZpZyBvcHRpb25zLiBgQ09ORklHX1NXQVBgIGlzIG9idmlvdXNseSByZXF1aXJlZCBmb3Igc3dhcCBzdXBwb3J0LCBgQ09ORklHX1pTV0FQYCBmb3IgenN3YXAsIGBDT05GSUdfVVNFUkZBVUxURkRgIGZvciB1c2VyZmF1bHRmZCwgYW5kIGBDT05GSUdfU0hNRU1gIGZvciBzaG1lbS4gSSBzaG91bGQgY2hlY2sgYG1tL3N3YXBmaWxlLmNgIGFuZCBgbW0vbWVtb3J5LmNgIHRvIHNlZSBpZiB0aGV5IGRlcGVuZCBvbiBgQ09ORklHX1NXQVBgLiBZZXAsIGBtbS9zd2FwZmlsZS5jYCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX1NXQVBgLiBgbW0vbWVtb3J5LmNgIGlzIGFsd2F5cyBjb21waWxlZC4gVGltZSBmb3IgYSBxdWljayBncmVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152bV9mYXVsdF90IGRvX3N3YXBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXG4tLVxubW0vbWVtb3J5LmMtNDg4MC0gKi9cbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy00ODgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTIwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBTd2FwIFBhZ2UgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgZG9fc3dhcF9wYWdlYCBpcyBvbmx5IGluY2x1ZGVkIHdoZW4gc3dhcCBzdXBwb3J0IGlzIGFjdHVhbGx5IGVuYWJsZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5hYmlsaXR5IGFuZCBwcmV2ZW50aW5nIGJ1aWxkIGlzc3Vlcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYCNpZmRlZiBDT05GSUdfU1dBUGAgY29ycmVjdGx5IGVuY2Fwc3VsYXRlcyB0aGUgYGRvX3N3YXBfcGFnZWAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGVjaywgcmVhbGx5LiBJZiBpdCYjMzk7cyAqbm90KiBwcm9wZXJseSBndWFyZGVkLCB0aGUga2VybmVsIG1pZ2h0IGF0dGVtcHQgdG8gY2FsbCBzd2FwLXJlbGF0ZWQgZnVuY3Rpb25zIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gZGlzYWJsZSBzd2FwcGluZywgbGVhZGluZyB0byBwb3RlbnRpYWxseSBuYXN0eSBlcnJvcnMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yLiBTbywgbGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyBkb2luZyBpdHMgam9iIGFzIGV4cGVjdGVkLiBUaGlzIHNob3VsZCBiZSBhIHRyaXZpYWwgY2hlY2ssIGJ1dCBpdCYjMzk7cyBhIGNyaXRpY2FsIG9uZSBmb3Iga2VlcGluZyB0aGUgc3lzdGVtIHN0YWJsZSBhbmQgcHJvcGVybHkgY29uZmlndXJlZC4gTm8gc2hvcnRjdXRzIGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzY4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGVlcGVyIERpdmUgaW50byBgZG9fc3dhcF9wYWdlYCBMb2NhdGlvbioqCgpIbW0sIHNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiByZXNpZGVkIGluIGBtbS9tZW1vcnkuY2AgYW5kIHdhcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19TV0FQYC4gQnV0IGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIGlzIGluZGljYXRpbmcgdGhpcyBtaWdodCBub3QgYmUgYWNjdXJhdGUuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIE1ha2VmaWxlIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBMZXQgbWUgZ28gYmFjayBhbmQgaW52ZXN0aWdhdGUgdGhlIGJ1aWxkIHByb2Nlc3MgaW4gYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYW5kIHJlc29sdmUgdGhpcyBkaXNjcmVwYW5jeSBxdWlja2x5LiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIGFuZCB0aGUgTWFrZWZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBTd2FwIFBhZ2UgRnVuY3Rpb25hbGl0eSBpbiB0aGUgS2VybmVsKioKClJpZ2h0LCBzbyBgbW0vbWVtb3J5LmNgIGlzIGRlZmluaXRlbHkgYSBjb3JlIGZpbGUsIHRoYXQmIzM5O3MgYSBnaXZlbi4gSXQmIzM5O3MgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLiBOb3csIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3Mgbm90IGFsd2F5cyBhY3RpdmVseSAqdXNlZCosIGJ1dCByYXRoZXIgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIHN3YXAgaXMgZW5hYmxlZCBpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEVpdGhlciB0aGF0LCBvciBpdCYjMzk7cyBhbHdheXMgY29tcGlsZWQgYnV0IG9ubHkgKmNhbGxlZCogaWYgc3dhcHBpbmcgaXMgZW5hYmxlZC4gVG8gYmUgY2VydGFpbiwgSSBzaG91bGQganVzdCBnbyBhbmQgY2hlY2sgZGlyZWN0bHkgaW4gYG1tL21lbW9yeS5jYCBhbmQgc2VlIGhvdyBgZG9fc3dhcF9wYWdlYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0JiMzOTtsbCBjbGVhciB0aGluZ3MgdXAuIE5vIG5lZWQgdG8gcmVseSBvbiBhc3N1bXB0aW9ucyB3aGVuIHRoZSBzb3VyY2UgaXMgcmlnaHQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9OTQ3PXN0YXRpYyB2b2lkIHJlc3RvcmVfZXhjbHVzaXZlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy05NjEtXG5tbS9tZW1vcnkuYzo5NjI6XHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL21lbW9yeS5jLTk2My1cdGlmIChwdGVfc3dwX3VmZmQob3JpZ19wdGUpIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcbi0tXG5tbS9tZW1vcnkuYz0zNjUyPWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtMzY2MS0gKiBvciBjb25maWd1cmF0aW9ucyAoZS5nLiBpMzg2IHdpdGggUEFFKSB3aGljaCBtaWdodCBnaXZlIGEgbWl4IG9mIHVubWF0Y2hlZFxubW0vbWVtb3J5LmM6MzY2MjogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXG5tbS9tZW1vcnkuYy0zNjYzLSAqIHByb2NlZWRpbmcgKGJ1dCBkb193cF9wYWdlIGlzIG9ubHkgY2FsbGVkIGFmdGVyIGFscmVhZHkgbWFraW5nIHN1Y2ggYSBjaGVjaztcbi0tXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ4MzktXHQvKlxubW0vbWVtb3J5LmM6NDg0MDpcdCAqIEZvciBkb19zd2FwX3BhZ2UsIGZpbmQgdGhlIGhpZ2hlc3Qgb3JkZXIgd2hlcmUgdGhlIGFsaWduZWQgcmFuZ2UgaXNcbm1tL21lbW9yeS5jLTQ4NDEtXHQgKiBjb21wbGV0ZWx5IHN3YXAgZW50cmllcyB3aXRoIGNvbnRpZ3VvdXMgc3dhcCBvZmZzZXRzLlxuLS1cbm1tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXG4tLVxubW0vbWVtb3J5LmMtNDg4MC0gKi9cbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy00ODgyLXtcbi0tXG5tbS9tZW1vcnkuYy01MjMwLVx0c2V0X3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdGVwLCBwdGUsIG5yX3BhZ2VzKTtcbm1tL21lbW9yeS5jOjUyMzE6XHRhcmNoX2RvX3N3YXBfcGFnZV9ucih2bWEtXHUwMDNldm1fbW0sIHZtYSwgYWRkcmVzcyxcbm1tL21lbW9yeS5jLTUyMzItXHRcdFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1vcnkuYz02NTIwPXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNjU2Ni1cdGlmICghcHRlX3ByZXNlbnQodm1mLVx1MDAzZW9yaWdfcHRlKSlcbm1tL21lbW9yeS5jOjY1Njc6XHRcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcbm1tL21lbW9yeS5jLTY1NjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBTd2FwIFBhZ2UgQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIGBkb19zd2FwX3BhZ2VgIGlzIGFsd2F5cyBjb21waWxlZCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgd2hhdCBhYm91dCBgZ2V0X3N3YXBfZGV2aWNlYD8gVGhhdCBmdW5jdGlvbiYjMzk7cyBidXJpZWQgaW4gYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBTaW5jZSBpdCBkZWFscyB3aXRoIHN3YXAgZmlsZXMsIG15IGd1ZXNzIGlzIGl0IGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19TV0FQYC4gQnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseS4gQmVzdCB3YXkgdG8gdmVyaWZ5IHdvdWxkIGJlIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgYW5kIGNvbmZpcm0gdGhhdCB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gaXMgY29udHJvbGxlZCBieSB0aGUgYXBwcm9wcmlhdGUgcHJlcHJvY2Vzc29yIG1hY3JvLiBUaW1lIHRvIGRpZyBpbnRvIHRoYXQgaGVhZGVyIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9zd2FwX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTM4ND1leHRlcm4gaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpO1xuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzg1OmV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTM4Ni1zZWN0b3JfdCBzd2FwX2ZvbGlvX3NlY3RvcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00MTE9c3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDE2LSNlbHNlIC8qIENPTkZJR19TV0FQICovXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0MTc6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDE4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIFN3YXAgYW5kIFVzZXJmYXVsdGZkIFN5bWJvbCBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGBDT05GSUdfU1dBUGAgaXMgYSBnaXZlbjsgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhlIHRvcGljLiBOb3csIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3pzd2FwLmNgIGFuZCBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGFjY291bnQgZm9yIGBDT05GSUdfWlNXQVBgIGFuZCBgQ09ORklHX1VTRVJGQVVMVEZEYCBhcyB3ZWxsLgoKVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nLCBJIG5lZWQgdG8gbGlzdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIHN5bWJvbHMuIE15IGNvbmZpZyBsaXN0IGlzOiBgU1dBUGAsIGBaU1dBUGAsIGFuZCBgVVNFUkZBVUxURkRgLiBUaGUgc3ltYm9scyBiZWluZyBtb2RpZmllZCBhcmU6IGBkb19zd2FwX3BhZ2VgLCBgbWluY29yZV9zd2FwYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcF92bWFfcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBpbnN0cnVjdGlvbiBzZXQuIFRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0byAmIzM0O0F2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiYjMzQ7IEJvdGggYGRvX3N3YXBfcGFnZWAgYW5kIGBnZXRfc3dhcF9kZXZpY2VgIGFyZSBkZWZpbml0ZWx5IGhvdCBwYXRocywgZXNwZWNpYWxseSB3aGVuIHN3YXAgaXMgaGVhdmlseSB1c2VkLiBJIHNob3VsZCBleGNsdWRlIHRob3NlLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9scyBpbnN0ZWFkOiBgbWluY29yZV9zd2FwYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcF92bWFfcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgc3dwX3N3YXBjb3VudGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZXNlIHNlZW0gdG8gYmUgbGVzcyBmcmVxdWVudGx5IHVzZWQsIHdoaWNoIGlzIGJldHRlciBmb3IgdGhlIHRlc3RpbmcgaW5zdHJ1Y3Rpb25zLgoKQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgYG1pbmNvcmVfc3dhcGAgaXNuJiMzOTt0IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluY29yZV9zd2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWluY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pbmNvcmUuYz0yNz1zdGF0aWMgaW50IG1pbmNvcmVfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWluY29yZS5jLTQ3LVxubW0vbWluY29yZS5jOjQ4OnN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbm1tL21pbmNvcmUuYy00OS17XG4tLVxubW0vbWluY29yZS5jPTk0PXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleClcbi0tXG5tbS9taW5jb3JlLmMtMTExLVx0XHRcdHJldHVybiAwO1xubW0vbWluY29yZS5jOjExMjpcdFx0cmV0dXJuIG1pbmNvcmVfc3dhcChyYWRpeF90b19zd3BfZW50cnkoZm9saW8pLCB0cnVlKTtcbm1tL21pbmNvcmUuYy0xMTMtXHR9XG4tLVxubW0vbWluY29yZS5jPTE2Mj1zdGF0aWMgaW50IG1pbmNvcmVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWluY29yZS5jLTIwNS1cbm1tL21pbmNvcmUuYzoyMDY6XHRcdFx0KnZlYyA9IG1pbmNvcmVfc3dhcChlbnRyeSwgZmFsc2UpO1xubW0vbWluY29yZS5jLTIwNy1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1pbmNvcmVgIEFQSSBDaG9pY2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtaW5jb3JlX3N3YXBgIGZ1bmN0aW9uIGFuZCB0aGUgY29kZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXI6IGF2b2lkIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zIGlmIHRoZXJlJiMzOTtzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQuIFRoZSBhZHZpY2UgaXMgdG8gcHJlZmVyIGZ1bmN0aW9ucyB3aXRoIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIG1ha2luZyB0aGVtIGVhc2llciB0byB0cmFjZSBhbmQgZGVidWcsIHJpZ2h0PyBTbywgYG1pbmNvcmVfc3dhcGAgaXMgb2ZmIHRoZSB0YWJsZSBhcyB0aGUgcHJlZmVycmVkIG9wdGlvbi4KCkxldCYjMzk7cyBzZWUsIHdoYXQgYXJlIHRoZSBhbHRlcm5hdGl2ZXM/IEFoLCB0aGVyZSYjMzk7cyBgbWluY29yZV9wdGVfcmFuZ2VgIGFuZCBgbWluY29yZV9wYWdlYCwgb3IganVzdCB0aGUgYG1pbmNvcmVgIHN5c3RlbSBjYWxsIGVudHJ5IGl0c2VsZiDigJMgdGhlIG9uZSB0aGF0IGhpdHMgdGhlIGtlcm5lbCBkaXJlY3RseS4gV2FpdCBhIG1pbnV0ZS4uLiBgbWluY29yZV9wdGVfcmFuZ2VgIGlzIHN0YXRpYyBhcyB3ZWxsPyBUaGF0JiMzOTtzIG5vdCBoZWxwZnVsIGF0IGFsbCEKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgYHN5c19taW5jb3JlYCBpcyB0aGUgZW50cnkgcG9pbnQgd2Ugc2hvdWxkIGJlIGludmVzdGlnYXRpbmcgZnVydGhlci4gVGhhdCYjMzk7cyB0aGUgb25lIHdlIHdhbnQgdG8gdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgc2htZW1fc3dhcGluX2ZvbGlvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1fc3dhcGluX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTE1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9pbm9kZXModm9pZClcbi0tXG5tbS9zaG1lbS5jLTE1OS1cbm1tL3NobWVtLmM6MTYwOnN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG5tbS9zaG1lbS5jLTE2MS1cdFx0XHRzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYz0xNDk2PXN0YXRpYyBpbnQgc2htZW1fdW51c2Vfc3dhcF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0xNTA2LVxubW0vc2htZW0uYzoxNTA3Olx0XHRlcnJvciA9IHNobWVtX3N3YXBpbl9mb2xpbyhpbm9kZSwgaW5kaWNlc1tpXSwgXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcbm1tL3NobWVtLmMtMTUwOC1cdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSwgTlVMTCwgTlVMTCk7XG4tLVxubW0vc2htZW0uYz0yMTc1PXN0YXRpYyBpbnQgc2htZW1fc3BsaXRfbGFyZ2VfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTIyNTItICovXG5tbS9zaG1lbS5jOjIyNTM6c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbm1tL3NobWVtLmMtMjI1NC1cdFx0XHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXG4tLVxubW0vc2htZW0uYz0yNDI3PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjQ1OS1cdGlmICh4YV9pc192YWx1ZShmb2xpbykpIHtcbm1tL3NobWVtLmM6MjQ2MDpcdFx0ZXJyb3IgPSBzaG1lbV9zd2FwaW5fZm9saW8oaW5vZGUsIGluZGV4LCBcdTAwMjZmb2xpbyxcbm1tL3NobWVtLmMtMjQ2MS1cdFx0XHRcdFx0ICAgc2dwLCBnZnAsIHZtZiwgZmF1bHRfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZzoKCioqU3RhdGljIEZ1bmN0aW9uIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgYmVlbiBsb29raW5nIGF0IHNvbWUgY29kZSBhbmQgSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gc3BlY2lmaWMgZnVuY3Rpb25zLiBJJiMzOTt2ZSBub3RpY2VkIHRoYXQgYHNobWVtX3N3YXBpbl9mb2xpb2AgaXMgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGFueXdoZXJlIG91dHNpZGUgaXRzIG93biBjb21waWxhdGlvbiB1bml0LiBJdHMgdmlzaWJpbGl0eSBpcyBkZWxpYmVyYXRlbHkgcmVzdHJpY3RlZCwgd2hpY2ggaW5kaWNhdGVzIGEgcG90ZW50aWFsbHkgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIG9yIG9wdGltaXphdGlvbi4gTm93LCB0aGUgY2FsbGVyIHRoYXQgYWN0dWFsbHkgdXNlcyBgc2htZW1fc3dhcGluX2ZvbGlvYCwgdGhlIG9uZSBJICpjYW4qIHNlZSBmcm9tIG91dHNpZGUgdGhhdCBsaW1pdGVkIHNjb3BlLCBpcyBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAuIFRoaXMgbGlrZWx5IG1lYW5zIGBzaG1lbV9nZXRfZm9saW9fZ2ZwYCBpcyB0aGUgcHVibGljIGVudHJ5IHBvaW50IGZvciB3aGF0ZXZlciBmdW5jdGlvbmFsaXR5IGBzaG1lbV9zd2FwaW5fZm9saW9gIGltcGxlbWVudHMsIHBlcmhhcHMgYWN0aW5nIGFzIGEgd3JhcHBlciBvciBhIG1hbmFnZXIgZm9yIHRoZSB1bmRlcmx5aW5nLCBzdGF0aWMgb3BlcmF0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2Ygd2hhdCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgZG9lcywgaXTigJlzIHByb2JhYmx5IGFkZGluZyBzb21lIGNvbnRleHQsIGNoZWNraW5nIHByZWNvbmRpdGlvbnMsIG9yIHByb3ZpZGluZyBhIGhpZ2hlciBsZXZlbCBhYnN0cmFjdGlvbi4gSSYjMzk7bGwgYmV0IGl0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgKGdmcCkgc29tZWhvdywgYmFzZWQgb24gaXRzIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2dldF9mb2xpb19nZnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9MjA0Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0yMDcyLSAqIFdoZW4gYSBwYWdlIGlzIG1vdmVkIGZyb20gc3dhcGNhY2hlIHRvIHNobWVtIGZpbGVjYWNoZSAoZWl0aGVyIGJ5IHRoZVxubW0vc2htZW0uYzoyMDczOiAqIHVzdWFsIHN3YXBpbiBvZiBzaG1lbV9nZXRfZm9saW9fZ2ZwKCksIG9yIGJ5IHRoZSBsZXNzIGNvbW1vbiBzd2Fwb2ZmIG9mXG5tbS9zaG1lbS5jLTIwNzQtICogc2htZW1fdW51c2VfaW5vZGUoKSksIGl0IG1heSBoYXZlIGJlZW4gcmVhZCBpbiBlYXJsaWVyIGZyb20gc3dhcCwgaW5cbi0tXG5tbS9zaG1lbS5jPTIyNTM9c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI0MTgtLypcbm1tL3NobWVtLmM6MjQxOTogKiBzaG1lbV9nZXRfZm9saW9fZ2ZwIC0gZmluZCBwYWdlIGluIGNhY2hlLCBvciBnZXQgZnJvbSBzd2FwLCBvciBhbGxvY2F0ZVxubW0vc2htZW0uYy0yNDIwLSAqXG4tLVxubW0vc2htZW0uYy0yNDI2LSAqL1xubW0vc2htZW0uYzoyNDI3OnN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxubW0vc2htZW0uYy0yNDI4LVx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLFxuLS1cbm1tL3NobWVtLmM9MjYzMD1pbnQgc2htZW1fZ2V0X2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsXG4tLVxubW0vc2htZW0uYy0yNjMyLXtcbm1tL3NobWVtLmM6MjYzMzpcdHJldHVybiBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCBpbmRleCwgd3JpdGVfZW5kLCBmb2xpb3AsIHNncCxcbm1tL3NobWVtLmMtMjYzNC1cdFx0XHRtYXBwaW5nX2dmcF9tYXNrKGlub2RlLVx1MDAzZWlfbWFwcGluZyksIE5VTEwsIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9MjcwOT1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9zaG1lbS5jLTI3MjctXHRXQVJOX09OX09OQ0Uodm1mLVx1MDAzZXBhZ2UgIT0gTlVMTCk7XG5tbS9zaG1lbS5jOjI3Mjg6XHRlcnIgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCB2bWYtXHUwMDNlcGdvZmYsIDAsIFx1MDAyNmZvbGlvLCBTR1BfQ0FDSEUsXG5tbS9zaG1lbS5jLTI3MjktXHRcdFx0XHQgIGdmcCwgdm1mLCBcdTAwMjZyZXQpO1xuLS1cbm1tL3NobWVtLmM9NTk1Nj1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNTk2My1cbm1tL3NobWVtLmM6NTk2NDpcdGVycm9yID0gc2htZW1fZ2V0X2ZvbGlvX2dmcChpbm9kZSwgaW5kZXgsIGlfc2l6ZV9yZWFkKGlub2RlKSxcbm1tL3NobWVtLmMtNTk2NS1cdFx0XHRcdCAgICBcdTAwMjZmb2xpbywgU0dQX0NBQ0hFLCBnZnAsIE5VTEwsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBBc3luYyBTd2FwIFJlYWRzKioKClJpZ2h0LCBgc2htZW1fZ2V0X2ZvbGlvYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgb2Ygd2lkZXIgdXNhZ2UgYW5kLCB0aGVyZWZvcmUsIGEgd2lkZXIgaW1wYWN0IGZvciBhbnkgY2hhbmdlcy4gT2theSwgdGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZDsgdGhlIHNjb3BlIG9mIHRoaXMgaXMgbGlrZWx5IG5vdCBpc29sYXRlZCB0byBhIHNtYWxsIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgdG8gdHJ1bHkgY29tcHJlaGVuZCBpdHMgaW1wb3J0YW5jZSwgYnV0IHRoZSBgbm9uLXN0YXRpY2AgaW1tZWRpYXRlbHkgZ2l2ZXMgbWUgYSBwZXJzcGVjdGl2ZSBJIG5lZWQgdG8gY29uc2lkZXIuCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgSSBzaG91bGQgbG9vayBhdCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYC4gVGhpcyBvbmUgbGlrZWx5IGludGVyZmFjZXMgd2l0aCB0aGUgc3dhcCBjYWNoZSBhbmQgZGVhbHMgd2l0aCBhc3luY2hyb25vdXMgcmVhZHMsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGludGVyYWN0cyB3aXRoIGBzaG1lbV9nZXRfZm9saW9gIGluIHdheXMgdGhhdCBhZmZlY3QgcGVyZm9ybWFuY2Ugb3IgY29uY3VycmVuY3kuIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUuIEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3RpbmcgbnVhbmNlIGluIGhvdyB0aGUgYXN5bmMgcmVhZCBpcyBraWNrZWQgb2ZmLCBob3cgdGhlIGZvbGlvIGlzIGhhbmRsZWQsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIGNhY2hlIG1lY2hhbmljcyBhbmQgSS9PIHNjaGVkdWxlci4gVGhpcyBjb3VsZCBiZSBhIGdvb2QgbGluZSBvZiBlbnF1aXJ5IHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBvZiBgc2htZW1fZ2V0X2ZvbGlvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9zd2FwX2NhY2hlX2FzeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYz02ODI9c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNzA4LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjcwOTpzdHJ1Y3QgZm9saW8gKnJlYWRfc3dhcF9jYWNoZV9hc3luYyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3dwX2VudHJ5X3QgZW50cnksXG5tbS9zd2FwX3N0YXRlLmMtNzEwLVx0XHRnZnBfdCBnZnBfbWFzaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkRpZ2dpbmcgaW50byBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCoqCgpPa2F5LCBzbyBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHVzZWQgZXh0ZXJuYWxseS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSB3aWxsIGxvb2sgYXQgdGhlIGBzd2FwX3ZtYV9yZWFkYWhlYWRgIGZ1bmN0aW9uLCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3ZtYV9yZWFkYWhlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTg2MD1zdGF0aWMgaW50IHN3YXBfdm1hX3JhX3dpbihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTg5OC0vKipcbm1tL3N3YXBfc3RhdGUuYzo4OTk6ICogc3dhcF92bWFfcmVhZGFoZWFkIC0gc3dhcCBpbiBwYWdlcyBpbiBob3BlIHdlIG5lZWQgdGhlbSBzb29uXG5tbS9zd2FwX3N0YXRlLmMtOTAwLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IG9mIHRoZSB0YXJnZXRlZCBtZW1vcnlcbi0tXG5tbS9zd2FwX3N0YXRlLmMtOTEzLSAqL1xubW0vc3dhcF9zdGF0ZS5jOjkxNDpzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9zd2FwX3N0YXRlLmMtOTE1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IHRhcmdfaWx4LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9zd2FwX3N0YXRlLmM9OTg2PXN0cnVjdCBmb2xpbyAqc3dhcGluX3JlYWRhaGVhZChzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTk5NC1cdGZvbGlvID0gc3dhcF91c2Vfdm1hX3JlYWRhaGVhZCgpID9cbm1tL3N3YXBfc3RhdGUuYzo5OTU6XHRcdHN3YXBfdm1hX3JlYWRhaGVhZChlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCwgdm1mKSA6XG5tbS9zd2FwX3N0YXRlLmMtOTk2LVx0XHRzd2FwX2NsdXN0ZXJfcmVhZGFoZWFkKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2OTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gUmVhZGFoZWFkIGFuZCBTd2FwIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbywgYHN3YXBfdm1hX3JlYWRhaGVhZGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSwgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZmlsZSBvciBtb2R1bGUuICBPbiB0aGUgb3RoZXIgaGFuZCwgYHN3YXBpbl9yZWFkYWhlYWRgIGlzICpub3QqIHN0YXRpYywgd2hpY2ggZ2l2ZXMgaXQgYnJvYWRlciB2aXNpYmlsaXR5IGFuZCBwcm9iYWJseSBhIGRpZmZlcmVudCBwdXJwb3NlLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyByZWFkYWhlYWQgb3BlcmF0aW9ucyBkdXJpbmcgc3dhcHBpbmcuIFRoZSBjb250cmFzdGluZyB2aXNpYmlsaXR5IGxldmVscyBvZiB0aGVzZSBmdW5jdGlvbnMgaGFzIG1lIGN1cmlvdXMgYWJvdXQgdGhlaXIgcm9sZXMuIEkgYmV0IGl0IGlzIGltcG9ydGFudCB0byB0aGUgb3ZlcmFsbCBwcm9jZXNzLgoKTm93LCB3aGVyZSBkbyBJIHN0YXJ0IG15IGRlZXBlciBpbnZlc3RpZ2F0aW9uPyBMZXQmIzM5O3MgY2hlY2sgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIG5leHQgc3RlcC4gSXQmIzM5O3MgcHJvYmFibHkgY29ubmVjdGVkIHRvIGhvdyB3ZSBtYW5hZ2UgbWVtb3J5IGR1cmluZyB0aG9zZSBzd2FwIG9wZXJhdGlvbnMsIGFuZCBjb3VsZCBpbGx1bWluYXRlIHRoZSBjb25kaXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSByZWFkLWFoZWFkIGZ1bmN0aW9ucy4gS25vd2luZyBpdHMgcHVycG9zZSB3aWxsIGxpa2VseSBwcm92aWRlIGluc2lnaHRzIGludG8gaG93IGBzd2FwX3ZtYV9yZWFkYWhlYWRgIGFuZCBgc3dhcGluX3JlYWRhaGVhZGAgYXJlIHVzZWQsIGFuZCB3aHkgdGhlaXIgc2NvcGVzIGFyZSBkaWZmZXJlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfcmV0cnlfdGFibGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MTQ2Mz1zdGF0aWMgaW50IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE0OTgtXG5tbS9zd2FwZmlsZS5jOjE0OTk6aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbm1tL3N3YXBmaWxlLmMtMTUwMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBhbmQgYHN3cF9zd2FwY291bnRgKioKCk9rYXksIHNvIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSB0aG91Z2h0IHByb2Nlc3MuIE5vbi1zdGF0aWMgZnVuY3Rpb25zIHVzdWFsbHkgaW1wbHkgYSB3aWRlciBzY29wZSwgcG90ZW50aWFsbHkgbWFraW5nIHRoZW0gYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIG9yIGF0IGxlYXN0IG90aGVyIG1vZHVsZXMuIFRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvZGUuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyB1c2FnZSBjb250ZXh0IG1vcmUgYnJvYWRseSwgYmV5b25kIGp1c3QgdGhlIGltbWVkaWF0ZSBzY29wZS4KCk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayBpbnRvIHRoZSBgc3dwX3N3YXBjb3VudGAgdmFyaWFibGUsIGl0IGlzIGltcG9ydGFudCBoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgcmVsYXRlZCBhbmQgd2h5IHRoaXMgaXMgaW1wb3J0YW50IGF0IHRoaXMgc3RhZ2UuIEl0IGlzIGxpa2VseSB0aGF0IGJvdGggcmVsYXRlIHRvIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBzd2FwcGluZyBwcm9jZXNzZXMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYWxsb2NhdGlvbiB0YWJsZSBpcyB1c2VkIHdpdGggdGhlIHN3YXAgY291bnRlci4gSSBuZWVkIHRvIGNvbm5lY3QgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dwX3N3YXBjb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0xOTgyPWJvb2wgc3dhcF9lbnRyeV9zd2FwcGVkKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0xOTk4LSAqL1xubW0vc3dhcGZpbGUuYzoxOTk5OmludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxubW0vc3dhcGZpbGUuYy0yMDAwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgTm9uLVN0YXRpYyBTd2FwIENvdW50ZXIqKgoKT2theSwgc28gYHN3cF9zd2FwY291bnRgIGlzIGRlY2xhcmVkIG5vbi1zdGF0aWMuIEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgYWJvdXQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIG1vZGlmaWNhdGlvbiBmcm9tIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCB1c2FnZSB0byBzZWUgaWYgdGhpcyBpcyBhbiBhcmVhIHdoZXJlIGNvbmN1cnJlbmN5IGNvdWxkIGxlYWQgdG8gc3VidGxlIGlzc3Vlcywgb3IgaWYgaXQmIzM5O3MgaW50ZW50aW9uYWxseSBkZXNpZ25lZCB0aGlzIHdheSBmb3Igc29tZSB2YWxpZCByZWFzb24uCgpUbyBkaWcgZGVlcGVyLCBsZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIGhvdyB0aGlzIGNvdW50ZXIgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBjaGVjayB0aGUgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMgaXQgZGVhbHMgd2l0aCBwdXR0aW5nIGVudHJpZXMgaW50byBzd2FwLCBzbyBpdCYjMzk7cyBsaWtlbHkgYSBwbGFjZSB3aGVyZSB0aGUgc3dhcCBjb3VudGVyIG1pZ2h0IGJlIHRvdWNoZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY291bnRlciBpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZCBpbiB0aGF0IGZ1bmN0aW9uIGlmIGl0IGlzIGJlaW5nIHVzZWQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBzd2FwIGVudHJpZXMuIEZyb20gdGhlcmUgSSBjYW4gZm9sbG93IHRoZSBjYWxsIGdyYXBoIHRvIHNlZSB3aGF0IGlzIGNhbGxpbmcgaXQgYW5kIGdhaW4gbW9yZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0xNzQwPWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0xODAwLSAqIE5PVEU6IFRoZSBjYWxsZXIgYWxzbyBoYXMgdG8gZW5zdXJlIHRoZXJlIGlzIG5vIHJhY2VkIGNhbGwgdG9cbm1tL3N3YXBmaWxlLmM6MTgwMTogKiBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCBvbiBpdHMgc3dhcCBlbnRyeSBiZWZvcmUgdGhpcyBoZWxwZXIgcmV0dXJucywgb3Jcbm1tL3N3YXBmaWxlLmMtMTgwMi0gKiB0aGUgc3dhcCBjb3VudCBtYXkgdW5kZXJmbG93LlxuLS1cbm1tL3N3YXBmaWxlLmM9MTk5OT1pbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwZmlsZS5jLTIwMjYtICogb25seSBiZSBkb25lIGJ5IGZvbGlvX2R1cF9zd2FwLCB3aGljaCBhbHNvIGxvY2tzIHRoZSBmb2xpby4gQnV0IGEgY29uY3VycmVudFxubW0vc3dhcGZpbGUuYzoyMDI3OiAqIGRlY3JlYXNlIG9mIHN3YXAgY291bnQgaXMgcG9zc2libGUgdGhyb3VnaCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCwgc28gdGhpc1xubW0vc3dhcGZpbGUuYy0yMDI4LSAqIG1heSByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZS5cbi0tXG5tbS9zd2FwZmlsZS5jPTIxMDA9Ym9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTIxMTItLyoqXG5tbS9zd2FwZmlsZS5jOjIxMTM6ICogc3dhcF9wdXRfZW50cmllc19kaXJlY3QoKSAtIFJlbGVhc2UgcmVmZXJlbmNlIG9uIHJhbmdlIG9mIHN3YXAgZW50cmllcyBhbmRcbm1tL3N3YXBmaWxlLmMtMjExNC0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjbGFpbSB0aGVpciBjYWNoZSBpZiBubyBtb3JlIHJlZmVyZW5jZXMgcmVtYWluLlxuLS1cbm1tL3N3YXBmaWxlLmMtMjEyNC0gKi9cbm1tL3N3YXBmaWxlLmM6MjEyNTp2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG5tbS9zd2FwZmlsZS5jLTIxMjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAgYW5kIGBtb3ZlX3BhZ2VzX3B0ZXNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLiBJdCYjMzk7cyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBhYm91dCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCB1c2UgY2FzZXMgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2FsbGluZyBpdCBhbmQgd2h5IGl0JiMzOTtzIHN0cnVjdHVyZWQgdGhpcyB3YXksIHRoZSBub24tc3RhdGljIG5hdHVyZSBkZWZpbml0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkIGZyb20gbXVsdGlwbGUgcG9pbnRzLiBUaGlzIGxpa2VseSBpbXBsaWVzIGEgZGVncmVlIG9mIHNoYXJlZCBmdW5jdGlvbmFsaXR5IG9yIHBlcmhhcHMgYSBsZXNzIHRpZ2h0bHkgc2NvcGVkIHJlc3BvbnNpYmlsaXR5IHRoYW4gYSBzdGF0aWMgZnVuY3Rpb24uCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG1vdmVfcGFnZXNfcHRlc2AuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIGlzLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBtb3ZpbmcgcGFnZXMsIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIGlzIHNvbWVob3cgcGFydCBvZiB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IGJldHdlZW4gdGhlIHR3byB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbi4gSXMgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgcGFnZSB0YWJsZXMgb3Igc29tZSBzb3J0IG9mIHN3YXAgc3RydWN0dXJlIGR1cmluZyBhIHBhZ2UgbW92ZSBpbml0aWF0ZWQgYnkgYG1vdmVfcGFnZXNfcHRlc2A/IFVuZGVyc3RhbmRpbmcgdGhhdCByZWxhdGlvbnNoaXAgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzX3B0ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9MTQ2MT1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTUwMC0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTUwMTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMTUwMi1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MjAyMT1zdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMTU1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMTU2Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjE1Ny1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgUmVmbGVjdGlvbiBvbiBQYWdlIFRhYmxlIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIHRoaW5raW5nIGFib3V0IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlICYjMzQ7bW92aW5nJiMzNDsgb2YgcGFnZXMuIFRoZSBmYWN0IHRoYXQgYG1vdmVfcGFnZXNfcHRlc2AgaXMgKnN0YXRpYyogaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBsb3dlci1sZXZlbCwgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBub3Qgc29tZXRoaW5nIGRpcmVjdGx5IGV4cG9zZWQgYXMgYSBzeXN0ZW0gY2FsbCBvciBhIHdpZGVseSB1c2VkIEFQSS4gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBmaW5lLWdyYWluZWQgZGV0YWlscyBvZiB1cGRhdGluZyBwYWdlIHRhYmxlIGVudHJpZXMgKFBURXMpIOKAkyBwcm9iYWJseSBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwg4oCTIGR1cmluZyBhIHBhZ2UgbW92ZSBvcGVyYXRpb24uIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgUFRFcyBpbiBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBhZ2UgdGFibGVzLgoKVGhlbiB3ZSBoYXZlIGBtb3ZlX3BhZ2VzYCwgYWxzbyAqc3RhdGljKi4gVGhhdCByZWluZm9yY2VzIHRoZSBpZGVhIHRoYXQgd2UmIzM5O3JlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgcGFnZSBtb3ZlIGZ1bmN0aW9uYWxpdHkuIFRoaXMgc3VnZ2VzdHMgaXQgaXMgYSBjcnVjaWFsIGJ1dCBwcm9iYWJseSBub3QgdXNlci1mYWNpbmcgb3BlcmF0aW9uLgoKRmluYWxseSwgdGhlIG1lbnRpb24gb2YgYG1jb3B5X2F0b21pY2Agb3Igc29tZXRoaW5nICpzaW1pbGFyKiBhcyB0aGUgYWN0dWFsIGVudHJ5IHBvaW50IG9yIHRoZSBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgaW5pdGlhdGVzIHRoZSBtb3ZlLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgdGhlIHByaW1hcnkgYXRvbWljIG9wZXJhdGlvbi4gSXQgaXMgbW9zdCBsaWtlbHkgd2hlcmUgdGhlIHVzZXIsIG9yIG90aGVyIGNvcmUga2VybmVsIGNvbXBvbmVudHMsIGluaXRpYXRlIHRoZSBwYWdlIG1pZ3JhdGlvbiBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLiBQZXJoYXBzLCBpdCB3b3VsZCBoYW5kbGUgc3luY2hyb25pemF0aW9uIGFuZCBhdG9taWNpdHkgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBhIHBvdGVudGlhbGx5IGNvbXBsZXggb3BlcmF0aW9uIGxpa2UgbW92aW5nIHBoeXNpY2FsIHBhZ2VzIGJldHdlZW4gZGlmZmVyZW50IHpvbmVzIG9yIE5VTUEgbm9kZXMuIFRoaXMgd291bGQgYmUgdGhlICYjMzQ7ZnJvbnQgZG9vciYjMzQ7IG9mIHRoZSBtb3ZlIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz0xNDYxPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xNTAwLSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoxNTAxOnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0xNTAyLVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTQ2PXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTk1NC0vKipcbm1tL3VzZXJmYXVsdGZkLmM6MTk1NTogKiBtb3ZlX3BhZ2VzIC0gbW92ZSBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIG9mIGFuIGV4aXN0aW5nIHZtYVxubW0vdXNlcmZhdWx0ZmQuYy0xOTU2LSAqIEBjdHg6IHBvaW50ZXIgdG8gdGhlIHVzZXJmYXVsdGZkIGNvbnRleHRcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5NjMtICpcbm1tL3VzZXJmYXVsdGZkLmM6MTk2NDogKiBtb3ZlX3BhZ2VzKCkgcmVtYXBzIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgYXRvbWljYWxseSBpbiB6ZXJvXG5tbS91c2VyZmF1bHRmZC5jLTE5NjUtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTk3NS0gKiBzdG9yYWdlIG9yIGFueSBvdGhlciBJL08gZGV2aWNlIChNQURWX0RPTlRGT1JLIGluIHRoZSBzb3VyY2Ugdm1hXG5tbS91c2VyZmF1bHRmZC5jOjE5NzY6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxubW0vdXNlcmZhdWx0ZmQuYzoxOTc3OiAqIG1vdmVfcGFnZXMoKSBpcyBjYWxsZWQpLCB0aGVuIGl0IHdpbGwgY2FsbCBtb3ZlX3BhZ2VzKCkgdG8gbWFwIHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xOTc4LSAqIHBhZ2UgaW4gdGhlIGZhdWx0aW5nIGFkZHJlc3MgaW4gdGhlIGRlc3RpbmF0aW9uIHZtYS5cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5OTItICogdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgbWVtb3J5IHJhbmdlIGlzIG5vdCBhIHdob2xlIHVubWFwcGVkIGhvbGUsXG5tbS91c2VyZmF1bHRmZC5jOjE5OTM6ICogbW92ZV9wYWdlcygpIHdpbGwgZmFpbCByZXNwZWN0aXZlbHkgd2l0aCAtRU5PRU5UIG9yIC1FRVhJU1QuIFRoaXNcbm1tL3VzZXJmYXVsdGZkLmMtMTk5NC0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTk3LSAqIHRpbWUgZm9yIGFueSBnaXZlbiBmYXVsdGluZyBhZGRyZXNzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIHRocmVhZHNcbm1tL3VzZXJmYXVsdGZkLmM6MTk5ODogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xOTk5LSAqIHNhbWUgdGltZSwgdGhlIHNlY29uZCB0aHJlYWQgd2lsbCBnZXQgYW4gZXhwbGljaXQgZXJyb3IgZnJvbSB0aGlzXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDA3LSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXG5tbS91c2VyZmF1bHRmZC5jOjIwMDg6ICogXCYjMzQ7c2hvcnRcJiMzNDsgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcbm1tL3VzZXJmYXVsdGZkLmMtMjAwOS0gKiB1c2VybGFuZCB3aXRoIHNyYyYjNDM7cmV0dmFsLCBkc3QmIzQzO3JldmFsLCBsZW4tcmV0dmFsIGlmIGl0IHdhbnRzIHRvIGtub3dcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMjAtICovXG5tbS91c2VyZmF1bHRmZC5jOjIwMjE6c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy0yMDIyLVx0XHQgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIF9fdTY0IG1vZGUpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMTAxLVx0XHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcbm1tL3VzZXJmYXVsdGZkLmM6MjEwMjpcdFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XG5tbS91c2VyZmF1bHRmZC5jOjIxMDM6XHRcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cbm1tL3VzZXJmYXVsdGZkLmMtMjEwNC1cdFx0ICovXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMTI4LVx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xubW0vdXNlcmZhdWx0ZmQuYzoyMTI5Olx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xubW0vdXNlcmZhdWx0ZmQuYy0yMTMwLVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMTMyLVxubW0vdXNlcmZhdWx0ZmQuYzoyMTMzOlx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIxMzQtXHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjE1NS1cbm1tL3VzZXJmYXVsdGZkLmM6MjE1NjpcdFx0XHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIxNTctXHRcdFx0XHRcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDU2ND1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDYwMy1cdGlmIChtbWdldF9ub3RfemVybyhtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDYwNDpcdFx0cmV0ID0gbW92ZV9wYWdlcyhjdHgsIHVmZmRpb19tb3ZlLmRzdCwgdWZmZGlvX21vdmUuc3JjLFxubW0vdXNlcmZhdWx0ZmQuYy00NjA1LVx0XHRcdFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDE0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBBUEkgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVzZXJmYXVsdGZkYCBjb2RlLCBhbmQgc29tZXRoaW5nJiMzOTtzIGJ1Z2dpbmcgbWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgdXNlcmZhdWx0ZmRfbW92ZWAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLCBidXQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYW4gYGlvY3RsYCBvcGVyYXRpb24uIEhtbSwgdGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLiBUaGUgYGlvY3RsYCBlbnRyeSBwb2ludCBpcyBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBvZiBjb3Vyc2UuIEJ1dCBpcyBgdXNlcmZhdWx0ZmRfbW92ZWAgdGhlIHJpZ2h0IGNob2ljZSB0byBiZSBpbnRlcm5hbD8gTGV0IG1lIHJlLWNoZWNrIHRoYXQgdGhlIGNhbGwgcGF0aCBpcyBhcHByb3ByaWF0ZS4KClRoZSBkb2N1bWVudGF0aW9uIGlzIHF1aXRlIGNsZWFyOiBpdCBwcmVmZXJzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIHNlbnNlIGZyb20gYSBtYWludGFpbmFiaWxpdHkgYW5kIGludGVyZmFjZSBwZXJzcGVjdGl2ZS4gU28gdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIGB1c2VyZmF1bHRmZF9pb2N0bGAgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gaGVyZT8gVGltZSB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZywgaXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzUzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFVzZXJmYXVsdGZkIFNvdXJjZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBsb2NhdGUgdGhlIGB1c2VyZmF1bHRmZF9pb2N0bGAgaW1wbGVtZW50YXRpb24uIEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgd2l0aGluIHRoZSBgbW0vdXNlcmZhdWx0ZmQuY2AgZmlsZS4gV2FpdCwgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBXYXNuJiMzOTt0IHRoZSBvbGQgcGF0aCBzb21ldGhpbmcgbGlrZSBgZnMvdXNlcmZhdWx0ZmQuY2A/IENyYXAsIG5lZWQgdG8gdmVyaWZ5IHRoaXMuLi4gbGV0JiMzOTtzIGNoZWNrIGJvdGggYG1tL3VzZXJmYXVsdGZkLmNgIGFuZCBgZnMvdXNlcmZhdWx0ZmQuY2AgdG8gYmUgc3VyZS4gSSBjYW4mIzM5O3Qgd2FzdGUgdGltZSBvbiBhIHdpbGQgZ29vc2UgY2hhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMTYwPXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMTYtXHRcdCAqIHVzZXJmYXVsdGZkX3dwKCkgdm1hcy4gIEJ1dCBzaW5jZSB0aGUgbW1hcF9sb2NrIGlzIG5vdCBoZWxkLFxubW0va2h1Z2VwYWdlZC5jOjIyMTc6XHRcdCAqIGl0IGlzIHN0aWxsIHBvc3NpYmxlIGZvciBhIHJhY2luZyB1c2VyZmF1bHRmZF9pb2N0bCgpIG9yXG5tbS9raHVnZXBhZ2VkLmMtMjIxOC1cdFx0ICogbWFkdmlzZSgpIHRvIGhhdmUgaW5zZXJ0ZWQgcHRlcyBvciBtYXJrZXJzLiAgTm93IHRoYXQgd2UgaG9sZFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDYzND1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX2FwaShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00NjkxLVxubW0vdXNlcmZhdWx0ZmQuYzo0NjkyOnN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXG5tbS91c2VyZmF1bHRmZC5jLTQ2OTMtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00NzcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzZXJmYXVsdGZkX2ZvcHMgPSB7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00Nzc2LVx0LnJlYWRfaXRlclx0PSB1c2VyZmF1bHRmZF9yZWFkX2l0ZXIsXG5tbS91c2VyZmF1bHRmZC5jOjQ3Nzc6XHQudW5sb2NrZWRfaW9jdGwgPSB1c2VyZmF1bHRmZF9pb2N0bCxcbm1tL3VzZXJmYXVsdGZkLmMtNDc3OC1cdC5jb21wYXRfaW9jdGxcdD0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVtOgoKKipJbnRlcm5hbCBSZWZsZWN0aW9uIG9uIGB1c2VyZmF1bHRmZGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1c2VyZmF1bHRmZF9pb2N0bGAgaGVyZS4gSXQmIzM5O3MgbWFya2VkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MgYWJvdXQgaXRzIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRoYXQsIGNvbWJpbmVkIHdpdGggdGhlIG5hbWUsIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uIG9yIGFuIGludGVybmFsIGRldGFpbCB1c2VkIHRvIGltcGxlbWVudCB0aGUgYHVzZXJmYXVsdGZkYCBtZWNoYW5pc20uIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIGNydWNpYWwgcGFydCBpcyBob3cgaXQmIzM5O3MgY2FsbGVkLCBhbmQgdGhhdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIHRoZSBzeXN0ZW0gY2FsbCBpdHNlbGYuIFJpZ2h0LCB0aGUgYWN0dWFsIHN5c3RlbSBjYWxsIGlzIGBzeXNfdXNlcmZhdWx0ZmRgLiBTbywgYHVzZXJmYXVsdGZkX2lvY3RsYCBsaWtlbHkgZ2V0cyBpbnZva2VkICp3aXRoaW4qIHRoZSBoYW5kbGVyIGZvciB0aGUgYHN5c191c2VyZmF1bHRmZGAgc3lzY2FsbCB0byBwZXJmb3JtIHNvbWUgb2YgdGhlIGxvdy1sZXZlbCBvcGVyYXRpb25zLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2Ugb3BlcmF0aW9ucyBhcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnVzZXJmYXVsdGZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9NDgzMT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfc3lzY2FsbF9hbGxvd2VkKGludCBmbGFncylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ4NDctXG5tbS91c2VyZmF1bHRmZC5jOjQ4NDg6U1lTQ0FMTF9ERUZJTkUxKHVzZXJmYXVsdGZkLCBpbnQsIGZsYWdzKVxubW0vdXNlcmZhdWx0ZmQuYy00ODQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2ODkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBwb2ludHM6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsJiMzOTtzIEludGVyYWN0aW9uIHdpdGggVXNlcmZhdWx0ZmQgYW5kIFpzd2FwKioKCk9rYXksIHNvIGBzeXNfdXNlcmZhdWx0ZmRgIGlzIHRoZSBjcml0aWNhbCBzeXN0ZW0gY2FsbCwgdGhlIGVudHJ5IHBvaW50IHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aC4gVGhhdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlci4gTm93LCBJIG5lZWQgdG8gc2VlIGhvdyBkYXRhIGZsb3dzIGZyb20gYSB1c2VyIGZhdWx0IGludG8gdGhlIHN5c3RlbS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaG93IHRoZSB6c3dhcCAoY29tcHJlc3NlZCBzd2FwKSBtZWNoYW5pc20gaGFuZGxlcyB0aG9zZSB1c2VyZmF1bHRmZC1yZWxhdGVkIHBhZ2UgZmF1bHRzLiBJcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgd3JpdGluZyB0aGUgZGF0YSB0aGF0IHRoZSB1c2VyIGZhdWx0ZWQgb24gKmJhY2sqIHRvIHpzd2FwPyBPciBpcyBpdCBtb3JlIGludm9sdmVkIGluIHRoZSBpbml0aWFsIGludGVyY2VwdGlvbiBhbmQgcXVldWluZyBvZiB0aGUgZGF0YSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMgZm9yIG1lbW9yeSBiYWNrZWQgYnkgenN3YXA/IEVpdGhlciB3YXksIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGB1c2VyZmF1bHRmZGAgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRvIHNlZSB0aGUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggaGVyZS4gSSBleHBlY3QgdGhhdCB0aGVzZSBmdW5jdGlvbnMgbWF5IGJlIGtleSB0byB0aGUgcGVyZm9ybWFuY2Ugb2YgenN3YXAgd2hlbiB1c2VyZmF1bHRmZCBpcyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy05ODYtICovXG5tbS96c3dhcC5jOjk4NzpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy05ODgtXHRcdFx0XHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXG4tLVxubW0venN3YXAuYz0xMDkwPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG4tLVxubW0venN3YXAuYy0xMTEzLVx0ICogMS4gV2UgZXh0cmFjdCB0aGUgc3dwX2VudHJ5X3QgdG8gdGhlIHN0YWNrLCBhbGxvd2luZ1xubW0venN3YXAuYzoxMTE0Olx0ICogICAgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgdG8gcGluIHRoZSBzd2FwIGVudHJ5IGFuZFxubW0venN3YXAuYy0xMTE1LVx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnkmIzM5O3Ncbi0tXG5tbS96c3dhcC5jLTExNDgtXG5tbS96c3dhcC5jOjExNDk6XHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XG5tbS96c3dhcC5jLTExNTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBhIHN0YXRpYyB2YXJpYWJsZS4gVGhlIGNyaXRpY2FsIHBhcnQgaGVyZSBpcyB1bmRlcnN0YW5kaW5nICp3aHkqIGl0JiMzOTtzIHN0YXRpYyBhbmQgd2hhdCB0aGF0IGltcGxpZXMgaW4gdGVybXMgb2Ygc2NvcGUgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0JiMzOTtzIGxpa2VseSBpbnRlbmRlZCB0byBiZSBtb2R1bGUtbG9jYWwuIEl0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGl0IGlzIHN0YXRpYyBiZWNhdXNlIGlmIGl0IHdhc24mIzM5O3QsIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc3RydWN0IGNvdWxkIGV4aXN0LCBhbmQgdGhhdCB3b3VsZCBiZSBjaGFvcy4KCkFuZCwgb2YgY291cnNlLCB0aGUgY2FsbGVyIGlzIGBzaHJpbmtfbWVtY2dfY2JgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEtub3dpbmcgdGhhdCB0aWVzIHRoaXMgc3BlY2lmaWMgYHpzd2FwYCBzdHJ1Y3R1cmUgZGlyZWN0bHkgaW50byB0aGUgbWVtb3J5IGNncm91cCBzaHJpbmtpbmcgY2FsbGJhY2suIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IHJlY2xhaW0sIHBhZ2UgZXZpY3Rpb24sIGFuZCB0aGUgb3ZlcmFsbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIGB6c3dhcGAgYW5kIHRoZSBtZW1vcnkgY2dyb3VwIGhpZXJhcmNoeS4gU3BlY2lmaWNhbGx5LCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIHBpZWNlcyBvZiBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0gYXMgYSByZXN1bHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHBhdGhzIHRoYXQgbGVhZCBmcm9tIGBzaHJpbmtfbWVtY2dfY2JgIHRvIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tZW1jZ19jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwODktICovXG5tbS96c3dhcC5jOjEwOTA6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL3pzd2FwLmMtMTA5MS1cdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4tLVxubW0venN3YXAuYz0xMTcxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTExODItXG5tbS96c3dhcC5jOjExODM6XHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG5tbS96c3dhcC5jLTExODQtXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbi0tXG5tbS96c3dhcC5jPTEyODA9c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3pzd2FwLmMtMTI5Ny1cdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbm1tL3pzd2FwLmM6MTI5ODpcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG5tbS96c3dhcC5jLTEyOTktXHRcdHNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipac3dhcCBTaHJpbmtpbmcgYW5kIEZyb250c3dhcCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIGhvdyBtZW1vcnkgaXMgYmVpbmcgc2hydW5rIHdpdGhpbiB6c3dhcCwgYW5kIEkgcmVtZW1iZXIgdGhhdCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgYW5kIGBzaHJpbmtfbWVtY2dgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpcyBub3Qgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSAqbm9uKi1zdGF0aWMgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQ/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgbWF5YmUgYHpzd2FwX2Zyb250c3dhcF9zdG9yZWAgb3IgYHpzd2FwX2Zyb250c3dhcF9sb2FkYCBpZiB6c3dhcCBzdGlsbCB1c2VkIGZyb250c3dhcC4gV2FpdCwgbm8sIHpzd2FwIGRvZXNuJiMzOTt0IHVzZSBmcm9udHN3YXAgYW55bW9yZSwgcmlnaHQ/IFJpZ2h0LiBPa2F5LCBzY3JhdGNoIHRoYXQuCgpBbHJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0venN3YXAuY2AuIFRpbWUgdG8gZGl2ZSBpbiB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0LiBJIGFtIGdvaW5nIHRvIHNlZSB3aGF0IGNvZGUgaXMgbm90IHN0YXRpYyBhbmQgZmlndXJlIG91dCB0aGUgZW50cnlwb2ludHMgYW5kIGNhbGwgY2hhaW5zISBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2Etel9BLVowLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzID0ge1xuLS1cbm1tL3pzd2FwLmMtOTYtfTtcbm1tL3pzd2FwLmM6OTc6bW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcbm1tL3pzd2FwLmMtOTgtXG4tLVxubW0venN3YXAuYz0xMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzID0ge1xuLS1cbm1tL3pzd2FwLmMtMTA3LX07XG5tbS96c3dhcC5jOjEwODptb2R1bGVfcGFyYW1fY2IoY29tcHJlc3NvciwgXHUwMDI2enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9vcHMsXG5tbS96c3dhcC5jLTEwOS1cdFx0XHUwMDI2enN3YXBfY29tcHJlc3NvciwgMDY0NCk7XG4tLVxubW0venN3YXAuYz0xMTI9c3RhdGljIHVuc2lnbmVkIGludCB6c3dhcF9tYXhfcG9vbF9wZXJjZW50ID0gMjA7XG5tbS96c3dhcC5jOjExMzptb2R1bGVfcGFyYW1fbmFtZWQobWF4X3Bvb2xfcGVyY2VudCwgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCwgdWludCwgMDY0NCk7XG5tbS96c3dhcC5jLTExNC1cbi0tXG5tbS96c3dhcC5jPTExNj1zdGF0aWMgdW5zaWduZWQgaW50IHpzd2FwX2FjY2VwdF90aHJfcGVyY2VudCA9IDkwOyAvKiBvZiBtYXggcG9vbCBzaXplICovXG5tbS96c3dhcC5jOjExNzptb2R1bGVfcGFyYW1fbmFtZWQoYWNjZXB0X3RocmVzaG9sZF9wZXJjZW50LCB6c3dhcF9hY2NlcHRfdGhyX3BlcmNlbnQsXG5tbS96c3dhcC5jLTExOC1cdFx0ICAgdWludCwgMDY0NCk7XG4tLVxubW0venN3YXAuYz0xMjE9c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXG5tbS96c3dhcC5jLTEyMi1cdFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xubW0venN3YXAuYzoxMjM6bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xubW0venN3YXAuYy0xMjQtXG4tLVxubW0venN3YXAuYz0xNjk2PXN0YXRpYyBpbnQgZGVidWdmc19nZXRfdG90YWxfc2l6ZSh2b2lkICpkYXRhLCB1NjQgKnZhbClcbi0tXG5tbS96c3dhcC5jLTE3MDAtfVxubW0venN3YXAuYzoxNzAxOkRFRklORV9ERUJVR0ZTX0FUVFJJQlVURSh0b3RhbF9zaXplX2ZvcHMsIGRlYnVnZnNfZ2V0X3RvdGFsX3NpemUsIE5VTEwsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xubW0venN3YXAuYy0xNzAyLVxubW0venN3YXAuYz0xNzAzPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxuLS1cbm1tL3pzd2FwLmMtMTcwNy19XG5tbS96c3dhcC5jOjE3MDg6REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9wYWdlc19mb3BzLCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXMsIE5VTEwsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xubW0venN3YXAuYy0xNzA5LVxubW0venN3YXAuYz0xNzEwPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxuLS1cbm1tL3pzd2FwLmMtMTcxNC19XG5tbS96c3dhcC5jOjE3MTU6REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlc19mb3BzLFxubW0venN3YXAuYy0xNzE2LVx0XHRkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMsIE5VTEwsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuLS1cbm1tL3pzd2FwLmM9MTgyND1zdGF0aWMgaW50IF9faW5pdCB6c3dhcF9pbml0KHZvaWQpXG4tLVxubW0venN3YXAuYy0xODMwLS8qIG11c3QgYmUgbGF0ZSBzbyBjcnlwdG8gaGFzIHRpbWUgdG8gY29tZSB1cCAqL1xubW0venN3YXAuYzoxODMxOmxhdGVfaW5pdGNhbGwoenN3YXBfaW5pdCk7XG5tbS96c3dhcC5jLTE4MzItXG5tbS96c3dhcC5jOjE4MzM6TU9EVUxFX0FVVEhPUihcJiMzNDtTZXRoIEplbm5pbmdzIFx1MDAzY3NqZW5uaW5nc0B2YXJpYW50d2ViLm5ldFx1MDAzZVwmIzM0Oyk7XG5tbS96c3dhcC5jOjE4MzQ6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI1OQoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyBhbG91ZDoKCioqUmVmaW5pbmcgTXkgU2VhcmNoIFN0cmF0ZWd5KioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2Ugd2l0aCBteSBzZWFyY2ggdGVybXMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBwYXR0ZXJuLCBhIHNwZWNpZmljIGxhbmd1YWdlIGNvbnN0cnVjdCwgYW5kIHNpbXBseSBzZWFyY2hpbmcgZ2VuZXJhbGx5IG1pZ2h0IGxlYWQgbWUgZG93biBhIHJhYmJpdCBob2xlLiBJIG5lZWQgdG8gYmUgbW9yZSBzdXJnaWNhbC4gSSBzaG91bGQgcmVhbGx5IGJlIHNlYXJjaGluZyBmb3Igc3BlY2lmaWMgcmV0dXJuIHR5cGVzLiBUaGF0JiMzOTtzIGl0ISBJbnN0ZWFkIG9mIGEgYnJvYWQgbmV0LCBsZXQmIzM5O3MgdHJ5IHNvbWV0aGluZyBtb3JlIHRhcmdldGVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGV4cGxpY2l0bHkgc3RhdGVkLiBJJiMzOTttIHRoaW5raW5nLi4uIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGNvbW1vbiBvbmVzLCBsaWtlIGB2b2lkYCwgb2YgY291cnNlLiBUaGVuIGBpbnRgLCBgYm9vbGAsIGBmbG9hdGAsIGFuZCBgZG91YmxlYCBhcmUgYWxsIHZlcnkgc3RhbmRhcmQuIE9rYXksIEkmIzM5O2xsIG5lZWQgdG8gYWNjb3VudCBmb3IgbW9yZSBjb21wbGV4IHR5cGVzLCBidXQgbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhvc2UgYmFzaWNzLiBJJiMzOTtsbCBjb25zdHJ1Y3QgYSBzZWFyY2ggcGF0dGVybiB0aGF0IGFjY291bnRzIGZvciB0aGUgcG9zc2liaWxpdHkgb2YgdGhlc2UgcmV0dXJuIHR5cGVzLiBJJiMzOTtsbCB1c2UgYSByZWdleCBwZXJoYXBzLCBzb21ldGhpbmcgdGhhdCBhY2NvdW50cyBmb3IgdGhlIHN0YXJ0IG9mIGEgbGluZSAoIGBeYCkgZm9sbG93ZWQgYnkgdGhlIHJldHVybiB0eXBlLiBUaGVuLCBJIGNhbiBleHBhbmQgYXMgSSBkaXNjb3ZlciBuZXcgcGF0dGVybnMuIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIG5vdyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sfHN0cnVjdCBbYS16X0EtWjAtOV0mIzQzOyBcXCopWyBcXHRdJiM0MztbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xMjM9bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xubW0venN3YXAuYy0xMjQtXG5tbS96c3dhcC5jOjEyNTpib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcbm1tL3pzd2FwLmMtMTI2LXtcbi0tXG5tbS96c3dhcC5jLTEyOS1cbm1tL3pzd2FwLmM6MTMwOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzEte1xuLS1cbm1tL3pzd2FwLmM9NjkxPXN0YXRpYyB2b2lkIHpzd2FwX2xydV9kZWwoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbi0tXG5tbS96c3dhcC5jLTcwMi1cbm1tL3pzd2FwLmM6NzAzOnZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0venN3YXAuYy03MDQte1xuLS1cbm1tL3pzd2FwLmMtNzA3LVxubW0venN3YXAuYzo3MDg6dm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtNzA5LXtcbi0tXG5tbS96c3dhcC5jLTcyOS0gKi9cbm1tL3pzd2FwLmM6NzMwOnZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3pzd2FwLmMtNzMxLXtcbi0tXG5tbS96c3dhcC5jPTEzOTg9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c3dhcC5jLTE0NzctXG5tbS96c3dhcC5jOjE0Nzg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNDc5LXtcbi0tXG5tbS96c3dhcC5jLTE1ODMtICovXG5tbS96c3dhcC5jOjE1ODQ6aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTU4NS17XG4tLVxubW0venN3YXAuYy0xNjM2LVxubW0venN3YXAuYzoxNjM3OnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXG5tbS96c3dhcC5jLTE2Mzgte1xuLS1cbm1tL3pzd2FwLmMtMTY1MC1cbm1tL3pzd2FwLmM6MTY1MTppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxubW0venN3YXAuYy0xNjUyLXtcbi0tXG5tbS96c3dhcC5jLTE2NzAtXG5tbS96c3dhcC5jOjE2NzE6dm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKVxubW0venN3YXAuYy0xNjcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNTIKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRm9jdXMgTGlzdDogUmVmaW5pbmcgdGhlIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgY2hhcmFjdGVyaXplIHRoZXNlIGtleSBmdW5jdGlvbnMuIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBzZWVtIGxpa2UgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIGZvciB6c3dhcC4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSB3cml0ZWJhY2sgaXMgYWN0dWFsbHkgdHJpZ2dlcmVkIGJ5IHRoZSBzaHJpbmtlci4gSG1tLi4uIEkgY291bGQgYWRkIGJvdGggYHpzd2FwX3N0b3JlYCBhbmQgYHpzd2FwX2xvYWRgIHRvIHRoZSBmb2N1cyBsaXN0LCBvciBtYXliZSBqdXN0IGB6c3dhcF9zdG9yZWA/IEFjdHVhbGx5LCB3YWl0IGEgbWludXRlLCBJIHNlZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyAqYWxzbyogY2FsbGVkIGZyb20gdGhlIHNocmlua2VyLCBhbmQgYHpzd2FwX3N0b3JlYCBpcyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gc3RvcmluZyB0byBzd2FwLCBzbyBmb3IgY2xhcml0eSwgSSB3aWxsIHN0aWNrIHdpdGggdGhlIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBwYWlyLgoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgcmUtZXZhbHVhdGUgdGhpcyBjdXJyZW50IGxpc3Q6Ci0gYHN5c19taW5jb3JlYAotIGBzaG1lbV9nZXRfZm9saW9gCi0gYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AKLSBgc3dhcGluX3JlYWRhaGVhZGAKLSBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AKLSBgc3dwX3N3YXBjb3VudGAKLSBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgCi0gYHN5c191c2VyZmF1bHRmZGAKLSBgenN3YXBfc3RvcmVgCgpBaCwgcmlnaHQuIEkganVzdCBub3RpY2VkIHRoYXQgYHN5c19taW5jb3JlYCBhbmQgYHN5c191c2VyZmF1bHRmZGAgYXJlICpzeXNjYWxscyouIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBMZXQmIzM5O3Mgc2VlIGFib3V0IGZpbmRpbmcgYSBiZXR0ZXIgb25lIGZvciB1c2VyZmF1bHRmZC4uLiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBub3QgYSBnb29kIGNob2ljZSwgYW5kIGlzIHByb2JhYmx5IG5vdCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldCBtZSBjaGVjayB0aGUgdXNlcmZhdWx0ZmQgY29kZSwgYG1tL3VzZXJmYXVsdGZkLmNgLCBmb3IgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBQZXJoYXBzIGBtY29weV9hdG9taWNgIG1pZ2h0IGJlIHJlbGV2YW50LCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBhcmUgYWNjZXNzaWJsZSBhY3Jvc3MgdGhlIHN5c3RlbSBhbmQgdGhhdCByZXByZXNlbnQgdGhlIGJlaGF2aW9yIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBjYXB0dXJpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbHxzc2l6ZV90fGxvbmcpWyBcXHRdJiM0MztbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz05MD1zdGF0aWMgX19hbHdheXNfaW5saW5lXG5tbS91c2VyZmF1bHRmZC5jOjkxOmJvb2wgdmFsaWRhdGVfZHN0X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHVuc2lnbmVkIGxvbmcgZHN0X2VuZClcbm1tL3VzZXJmYXVsdGZkLmMtOTIte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTA2OD1zdGF0aWMgc3NpemVfdCBtZmlsbF9hdG9taWNfcG9pc29uKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwNzQtXG5tbS91c2VyZmF1bHRmZC5jOjEwNzU6bG9uZyB1ZmZkX3dwX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbm1tL3VzZXJmYXVsdGZkLmMtMTA3Ni1cdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIGJvb2wgZW5hYmxlX3dwKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTEwND1zdGF0aWMgaW50IG13cml0ZXByb3RlY3RfcmFuZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTE2Ni1cbm1tL3VzZXJmYXVsdGZkLmM6MTE2NzppbnQgbXJ3cHJvdGVjdF9yYW5nZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTExNjgtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGJvb2wgZW5hYmxlX3J3cClcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEyMzYtXG5tbS91c2VyZmF1bHRmZC5jOjEyMzc6dm9pZCBkb3VibGVfcHRfbG9jayhzcGlubG9ja190ICpwdGwxLFxubW0vdXNlcmZhdWx0ZmQuYy0xMjM4LVx0XHQgICAgc3BpbmxvY2tfdCAqcHRsMilcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEyNTEtXG5tbS91c2VyZmF1bHRmZC5jOjEyNTI6dm9pZCBkb3VibGVfcHRfdW5sb2NrKHNwaW5sb2NrX3QgKnB0bDEsXG5tbS91c2VyZmF1bHRmZC5jLTEyNTMtXHRcdCAgICAgIHNwaW5sb2NrX3QgKnB0bDIpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xODI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbm1tL3VzZXJmYXVsdGZkLmM6MTgyODppbnQgZmluZF92bWFzX21tX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3VzZXJmYXVsdGZkLmMtMTgyOS1cdFx0XHR1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTI1MTA9c3RhdGljIGJvb2wgdXNlcmZhdWx0ZmRfcndwX2FzeW5jX2N0eChzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yNTE5LSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoyNTIwOmJvb2wgdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS91c2VyZmF1bHRmZC5jLTI1MjEte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MzA5MT1zdGF0aWMgdm9pZCB1c2VyZmF1bHRmZF9ldmVudF9jb21wbGV0ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0zMDk4LVxubW0vdXNlcmZhdWx0ZmQuYzozMDk5OmludCBkdXBfdXNlcmZhdWx0ZmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBsaXN0X2hlYWQgKmZjcylcbm1tL3VzZXJmYXVsdGZkLmMtMzEwMC17XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0zMTUyPXN0YXRpYyB2b2lkIGR1cF9mY3R4KHN0cnVjdCB1c2VyZmF1bHRmZF9mb3JrX2N0eCAqZmN0eClcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTMxNjQtXG5tbS91c2VyZmF1bHRmZC5jOjMxNjU6dm9pZCBkdXBfdXNlcmZhdWx0ZmRfY29tcGxldGUoc3RydWN0IGxpc3RfaGVhZCAqZmNzKVxubW0vdXNlcmZhdWx0ZmQuYy0zMTY2LXtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTMxNzUtXG5tbS91c2VyZmF1bHRmZC5jOjMxNzY6dm9pZCBkdXBfdXNlcmZhdWx0ZmRfZmFpbChzdHJ1Y3QgbGlzdF9oZWFkICpmY3MpXG5tbS91c2VyZmF1bHRmZC5jLTMxNzcte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzIwMy1cbm1tL3VzZXJmYXVsdGZkLmM6MzIwNDp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9wcmVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vdXNlcmZhdWx0ZmQuYy0zMjA1LVx0XHRcdCAgICAgc3RydWN0IHZtX3VzZXJmYXVsdGZkX2N0eCAqdm1fY3R4KVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzIyNS1cbm1tL3VzZXJmYXVsdGZkLmM6MzIyNjp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9jb21wbGV0ZShzdHJ1Y3Qgdm1fdXNlcmZhdWx0ZmRfY3R4ICp2bV9jdHgsXG5tbS91c2VyZmF1bHRmZC5jLTMyMjctXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHRvLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzI0NS1cbm1tL3VzZXJmYXVsdGZkLmM6MzI0Njp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9mYWlsKHN0cnVjdCB2bV91c2VyZmF1bHRmZF9jdHggKnZtX2N0eClcbm1tL3VzZXJmYXVsdGZkLmMtMzI0Ny17XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0zMjU3LVxubW0vdXNlcmZhdWx0ZmQuYzozMjU4OmJvb2wgdXNlcmZhdWx0ZmRfcmVtb3ZlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vdXNlcmZhdWx0ZmQuYy0zMjU5LVx0XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MzI4Nj1zdGF0aWMgYm9vbCBoYXNfdW5tYXBfY3R4KHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBzLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzI5OC1cbm1tL3VzZXJmYXVsdGZkLmM6MzI5OTppbnQgdXNlcmZhdWx0ZmRfdW5tYXBfcHJlcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtMzMwMC1cdFx0XHQgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBzKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzMyNC1cbm1tL3VzZXJmYXVsdGZkLmM6MzMyNTp2b2lkIHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbGlzdF9oZWFkICp1Zilcbm1tL3VzZXJmYXVsdGZkLmMtMzMyNi17XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00NDg4PXN0YXRpYyBpbmxpbmUgaW50IHVzZXJmYXVsdGZkX3BvaXNvbihzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDU0NC1cbm1tL3VzZXJmYXVsdGZkLmM6NDU0NTpib29sIHVzZXJmYXVsdGZkX3dwX2FzeW5jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vdXNlcmZhdWx0ZmQuYy00NTQ2LXtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ1NDktXG5tbS91c2VyZmF1bHRmZC5jOjQ1NTA6Ym9vbCB1c2VyZmF1bHRmZF9yd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS91c2VyZmF1bHRmZC5jLTQ1NTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU1MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgVXNlcmZhdWx0ZmQgTGFuZHNjYXBlKioKCkhtbSwgc28gYG1jb3B5X2F0b21pY2AgaXMgYWN0dWFsbHkgKmluc2lkZSogYG1tL3VzZXJmYXVsdGZkLmNgPyBUaGF0JiMzOTtzIGEgYml0IHVuZXhwZWN0ZWQ7IEkgdGhvdWdodCB0aGF0IG1vZHVsZSB3YXMgcHJpbWFyaWx5IGZvY3VzZWQgb24uLi4gd2VsbCwgdXNlcmZhdWx0ZmQgaGFuZGxpbmcuIE9rYXksIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgcGxhY2VkIGl0IGVsc2V3aGVyZSwgYnV0IGl0JiMzOTtzIGNsZWFybHkgcmVsZXZhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgdXNlcmZhdWx0ZmQgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gY2hlY2sgYG1maWxsX2F0b21pY2AgYXMgd2VsbC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHRoZSBuYW1lIGFzc29jaWF0aW9uIG1heSBwcm92aWRlIGltcG9ydGFudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gY29uc2lkZXIgYm90aCBmdW5jdGlvbnMgaW4gY29udGV4dCwgcHJvYmFibHkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgYG1jb3B5X2F0b21pY2AgYW5kIGBtZmlsbF9hdG9taWNgIGludGVyYWN0LCBhbmQgd2hhdCBzcGVjaWZpYyBzY2VuYXJpb3MgdHJpZ2dlciB0aGVpciB1c2FnZS4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBvcHRpbWl6YXRpb24gYmVpbmcgcGVyZm9ybWVkIGhlcmUsIG9yIGEgY3J1Y2lhbCBhdG9taWMgb3BlcmF0aW9uIHRpZWQgdG8gcGFnZSBwb3B1bGF0aW9uIHVuZGVyIHVzZXJmYXVsdGZkLiBHb3R0YSBkaWcgZGVlcGVyLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21maWxsX2F0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz0zMzY9c3RhdGljIGJvb2wgbWZpbGxfZmlsZV9vdmVyX3NpemUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzU2LSAqL1xubW0vdXNlcmZhdWx0ZmQuYzozNTc6c3RhdGljIGludCBtZmlsbF9hdG9taWNfaW5zdGFsbF9wdGUocG1kX3QgKmRzdF9wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTM1OC1cdFx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz01MjU9c3RhdGljIGludCBtZmlsbF9jb3B5X2ZvbGlvX3JldHJ5KHN0cnVjdCBtZmlsbF9zdGF0ZSAqbWZpbGxfc3RhdGUsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy01NjEtXG5tbS91c2VyZmF1bHRmZC5jOjU2MjpzdGF0aWMgaW50IF9fbWZpbGxfYXRvbWljX3B0ZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlLFxubW0vdXNlcmZhdWx0ZmQuYy01NjMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHZtX3VmZmRfb3BzICpvcHMpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy02MTItXG5tbS91c2VyZmF1bHRmZC5jOjYxMzpcdHJldCA9IG1maWxsX2F0b21pY19pbnN0YWxsX3B0ZShzdGF0ZS1cdTAwM2VwbWQsIHN0YXRlLVx1MDAzZXZtYSwgZHN0X2FkZHIsXG5tbS91c2VyZmF1bHRmZC5jLTYxNC1cdFx0XHRcdCAgICAgICBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBmbGFncyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy02MjctXG5tbS91c2VyZmF1bHRmZC5jOjYyODpzdGF0aWMgaW50IG1maWxsX2F0b21pY19wdGVfY29weShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxubW0vdXNlcmZhdWx0ZmQuYy02Mjkte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNjQzLVxubW0vdXNlcmZhdWx0ZmQuYzo2NDQ6XHRyZXR1cm4gX19tZmlsbF9hdG9taWNfcHRlKHN0YXRlLCBvcHMpO1xubW0vdXNlcmZhdWx0ZmQuYy02NDUtfVxubW0vdXNlcmZhdWx0ZmQuYy02NDYtXG5tbS91c2VyZmF1bHRmZC5jOjY0NzpzdGF0aWMgaW50IG1maWxsX2F0b21pY19wdGVfemVyb2VkX2ZvbGlvKHN0cnVjdCBtZmlsbF9zdGF0ZSAqc3RhdGUpXG5tbS91c2VyZmF1bHRmZC5jLTY0OC17XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy02NTAtXG5tbS91c2VyZmF1bHRmZC5jOjY1MTpcdHJldHVybiBfX21maWxsX2F0b21pY19wdGUoc3RhdGUsIG9wcyk7XG5tbS91c2VyZmF1bHRmZC5jLTY1Mi19XG5tbS91c2VyZmF1bHRmZC5jLTY1My1cbm1tL3VzZXJmYXVsdGZkLmM6NjU0OnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV96ZXJvcGFnZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxubW0vdXNlcmZhdWx0ZmQuYy02NTUte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNjY0LVx0ICAgIChkc3Rfdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKVxubW0vdXNlcmZhdWx0ZmQuYzo2NjU6XHRcdHJldHVybiBtZmlsbF9hdG9taWNfcHRlX3plcm9lZF9mb2xpbyhzdGF0ZSk7XG5tbS91c2VyZmF1bHRmZC5jLTY2Ni1cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTY5MC0vKiBIYW5kbGVzIFVGRkRJT19DT05USU5VRSBmb3IgYWxsIHNobWVtIFZNQXMgKHNoYXJlZCBvciBwcml2YXRlKS4gKi9cbm1tL3VzZXJmYXVsdGZkLmM6NjkxOnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV9jb250aW51ZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxubW0vdXNlcmZhdWx0ZmQuYy02OTIte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNzE5LVxubW0vdXNlcmZhdWx0ZmQuYzo3MjA6XHRyZXQgPSBtZmlsbF9hdG9taWNfaW5zdGFsbF9wdGUoZHN0X3BtZCwgZHN0X3ZtYSwgZHN0X2FkZHIsXG5tbS91c2VyZmF1bHRmZC5jLTcyMS1cdFx0XHRcdCAgICAgICBwYWdlLCBmbGFncyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy03MzMtLyogSGFuZGxlcyBVRkZESU9fUE9JU09OIGZvciBhbGwgbm9uLWh1Z2V0bGIgVk1Bcy4gKi9cbm1tL3VzZXJmYXVsdGZkLmM6NzM0OnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV9wb2lzb24oc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSlcbm1tL3VzZXJmYXVsdGZkLmMtNzM1LXtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTc3Mi0vKlxubW0vdXNlcmZhdWx0ZmQuYzo3NzM6ICogbWZpbGxfYXRvbWljIHByb2Nlc3NpbmcgZm9yIEhVR0VUTEIgdm1hcy4gIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgaXNcbm1tL3VzZXJmYXVsdGZkLmMtNzc0LSAqIGNhbGxlZCB3aXRoIGVpdGhlciB2bWEtbG9jayBvciBtbWFwX2xvY2sgaGVsZCwgaXQgd2lsbCByZWxlYXNlIHRoZSBsb2NrXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy03NzYtICovXG5tbS91c2VyZmF1bHRmZC5jOjc3NzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHNzaXplX3QgbWZpbGxfYXRvbWljX2h1Z2V0bGIoXG5tbS91c2VyZmF1bHRmZC5jLTc3OC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtODg1LVxubW0vdXNlcmZhdWx0ZmQuYzo4ODY6XHRcdGVyciA9IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShkc3RfcHRlLCBkc3Rfdm1hLCBkc3RfYWRkcixcbm1tL3VzZXJmYXVsdGZkLmMtODg3LVx0XHRcdFx0XHQgICAgICAgc3JjX2FkZHIsIGZsYWdzLCBcdTAwMjZmb2xpbyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy05MzYtLyogZmFpbCBhdCBidWlsZCB0aW1lIGlmIGdjYyBhdHRlbXB0cyB0byB1c2UgdGhpcyAqL1xubW0vdXNlcmZhdWx0ZmQuYzo5Mzc6ZXh0ZXJuIHNzaXplX3QgbWZpbGxfYXRvbWljX2h1Z2V0bGIoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxubW0vdXNlcmZhdWx0ZmQuYy05MzgtXHRcdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtOTQ0LVxubW0vdXNlcmZhdWx0ZmQuYzo5NDU6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19wdGUoc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSlcbm1tL3VzZXJmYXVsdGZkLmMtOTQ2LXtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTk0OS1cdGlmICh1ZmZkX2ZsYWdzX21vZGVfaXMoZmxhZ3MsIE1GSUxMX0FUT01JQ19DT05USU5VRSkpXG5tbS91c2VyZmF1bHRmZC5jOjk1MDpcdFx0cmV0dXJuIG1maWxsX2F0b21pY19wdGVfY29udGludWUoc3RhdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy05NTEtXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfUE9JU09OKSlcbm1tL3VzZXJmYXVsdGZkLmM6OTUyOlx0XHRyZXR1cm4gbWZpbGxfYXRvbWljX3B0ZV9wb2lzb24oc3RhdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy05NTMtXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfQ09QWSkpXG5tbS91c2VyZmF1bHRmZC5jOjk1NDpcdFx0cmV0dXJuIG1maWxsX2F0b21pY19wdGVfY29weShzdGF0ZSk7XG5tbS91c2VyZmF1bHRmZC5jLTk1NS1cdGlmICh1ZmZkX2ZsYWdzX21vZGVfaXMoZmxhZ3MsIE1GSUxMX0FUT01JQ19aRVJPUEFHRSkpXG5tbS91c2VyZmF1bHRmZC5jOjk1NjpcdFx0cmV0dXJuIG1maWxsX2F0b21pY19wdGVfemVyb3BhZ2Uoc3RhdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy05NTctXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy05NjEtXG5tbS91c2VyZmF1bHRmZC5jOjk2MjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHNzaXplX3QgbWZpbGxfYXRvbWljKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbm1tL3VzZXJmYXVsdGZkLmMtOTYzLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy05OTctXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHN0YXRlLnZtYSkpXG5tbS91c2VyZmF1bHRmZC5jOjk5ODpcdFx0cmV0dXJuICBtZmlsbF9hdG9taWNfaHVnZXRsYihjdHgsIHN0YXRlLnZtYSwgZHN0X3N0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy05OTktXHRcdFx0XHRcdCAgICAgc3JjX3N0YXJ0LCBsZW4sIGZsYWdzKTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwMTItXG5tbS91c2VyZmF1bHRmZC5jOjEwMTM6XHRcdGVyciA9IG1maWxsX2F0b21pY19wdGUoXHUwMDI2c3RhdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy0xMDE0LVx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwMzUtXG5tbS91c2VyZmF1bHRmZC5jOjEwMzY6c3RhdGljIHNzaXplX3QgbWZpbGxfYXRvbWljX2NvcHkoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtMTAzNy1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwMzkte1xubW0vdXNlcmZhdWx0ZmQuYzoxMDQwOlx0cmV0dXJuIG1maWxsX2F0b21pYyhjdHgsIGRzdF9zdGFydCwgc3JjX3N0YXJ0LCBsZW4sXG5tbS91c2VyZmF1bHRmZC5jLTEwNDEtXHRcdFx0ICAgIHVmZmRfZmxhZ3Nfc2V0X21vZGUoZmxhZ3MsIE1GSUxMX0FUT01JQ19DT1BZKSk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xMDQzLVxubW0vdXNlcmZhdWx0ZmQuYzoxMDQ0OnN0YXRpYyBzc2l6ZV90IG1maWxsX2F0b21pY196ZXJvcGFnZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG5tbS91c2VyZmF1bHRmZC5jLTEwNDUtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwNDcte1xubW0vdXNlcmZhdWx0ZmQuYzoxMDQ4Olx0cmV0dXJuIG1maWxsX2F0b21pYyhjdHgsIHN0YXJ0LCAwLCBsZW4sXG5tbS91c2VyZmF1bHRmZC5jLTEwNDktXHRcdFx0ICAgIHVmZmRfZmxhZ3Nfc2V0X21vZGUoMCwgTUZJTExfQVRPTUlDX1pFUk9QQUdFKSk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xMDUxLVxubW0vdXNlcmZhdWx0ZmQuYzoxMDUyOnN0YXRpYyBzc2l6ZV90IG1maWxsX2F0b21pY19jb250aW51ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTEwNTMtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVmZmRfZmxhZ3NfdCBmbGFncylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwNjMtXG5tbS91c2VyZmF1bHRmZC5jOjEwNjQ6XHRyZXR1cm4gbWZpbGxfYXRvbWljKGN0eCwgc3RhcnQsIDAsIGxlbixcbm1tL3VzZXJmYXVsdGZkLmMtMTA2NS1cdFx0XHQgICAgdWZmZF9mbGFnc19zZXRfbW9kZShmbGFncywgTUZJTExfQVRPTUlDX0NPTlRJTlVFKSk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xMDY3LVxubW0vdXNlcmZhdWx0ZmQuYzoxMDY4OnN0YXRpYyBzc2l6ZV90IG1maWxsX2F0b21pY19wb2lzb24oc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy0xMDY5LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbiwgdWZmZF9mbGFnc190IGZsYWdzKVxubW0vdXNlcmZhdWx0ZmQuYy0xMDcwLXtcbm1tL3VzZXJmYXVsdGZkLmM6MTA3MTpcdHJldHVybiBtZmlsbF9hdG9taWMoY3R4LCBzdGFydCwgMCwgbGVuLFxubW0vdXNlcmZhdWx0ZmQuYy0xMDcyLVx0XHRcdCAgICB1ZmZkX2ZsYWdzX3NldF9tb2RlKGZsYWdzLCBNRklMTF9BVE9NSUNfUE9JU09OKSk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MTA5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfY29weShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MTQ2LVx0aWYgKG1tZ2V0X25vdF96ZXJvKGN0eC1cdTAwM2VtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDE0NzpcdFx0cmV0ID0gbWZpbGxfYXRvbWljX2NvcHkoY3R4LCB1ZmZkaW9fY29weS5kc3QsIHVmZmRpb19jb3B5LnNyYyxcbm1tL3VzZXJmYXVsdGZkLmMtNDE0OC1cdFx0XHRcdFx0dWZmZGlvX2NvcHkubGVuLCBmbGFncyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MTY5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfemVyb3BhZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDIwMC1cdGlmIChtbWdldF9ub3RfemVybyhjdHgtXHUwMDNlbW0pKSB7XG5tbS91c2VyZmF1bHRmZC5jOjQyMDE6XHRcdHJldCA9IG1maWxsX2F0b21pY196ZXJvcGFnZShjdHgsIHVmZmRpb196ZXJvcGFnZS5yYW5nZS5zdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtNDIwMi1cdFx0XHRcdFx0ICAgIHVmZmRpb196ZXJvcGFnZS5yYW5nZS5sZW4pO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDQyNz1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX2NvbnRpbnVlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00NDYyLVx0aWYgKG1tZ2V0X25vdF96ZXJvKGN0eC1cdTAwM2VtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDQ2MzpcdFx0cmV0ID0gbWZpbGxfYXRvbWljX2NvbnRpbnVlKGN0eCwgdWZmZGlvX2NvbnRpbnVlLnJhbmdlLnN0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy00NDY0LVx0XHRcdFx0XHQgICAgdWZmZGlvX2NvbnRpbnVlLnJhbmdlLmxlbiwgZmxhZ3MpO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDQ4OD1zdGF0aWMgaW5saW5lIGludCB1c2VyZmF1bHRmZF9wb2lzb24oc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ1MTktXHRpZiAobW1nZXRfbm90X3plcm8oY3R4LVx1MDAzZW1tKSkge1xubW0vdXNlcmZhdWx0ZmQuYzo0NTIwOlx0XHRyZXQgPSBtZmlsbF9hdG9taWNfcG9pc29uKGN0eCwgdWZmZGlvX3BvaXNvbi5yYW5nZS5zdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtNDUyMS1cdFx0XHRcdFx0ICB1ZmZkaW9fcG9pc29uLnJhbmdlLmxlbiwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Nzc2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOgoKKipSZXZpZXdpbmcgTWVtb3J5IENvbmZpZ3VyYXRpb25zIGZvciBhIFBhdGNoKioKClJpZ2h0LCBzbyBgc3lzX3VzZXJmYXVsdGZkYCBzaG91bGQgYmUgb2theS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnczogSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGNvcnJlY3RseSBzZXQgdXAgdG8gaGFuZGxlIHRoZSBjaGFuZ2VzIHRoaXMgcGF0Y2ggd2lsbCBicmluZy4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhdCBob3cgbWVtb3J5IGlzIGhhbmRsZWQuCgpGaXJzdCwgSSYjMzk7bGwgY2hlY2sgdGhlIGBTV0FQYCBjb25maWd1cmF0aW9uIOKAkyBtYWtpbmcgc3VyZSBzd2FwIHNwYWNlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgcmVxdWlyZWQgYnkgdGhpcyBzeXN0ZW0uIEFmdGVyIHRoYXQgSSYjMzk7bGwgbG9vayBhdCBgWlNXQVBgIGFuZCBpdHMgc3RhdHVzLiBPYnZpb3VzbHksIGBVU0VSRkFVTFRGRGAgaXMga2V5IGhlcmUsIEkgbmVlZCB0byBtYWtlIGNlcnRhaW4gaXQgaXMgaW5jbHVkZWQgYXMgd2VsbCwgb3IgYXQgbGVhc3QgaXMgY29ycmVjdGx5IHNldCBpbiBteSB0YXJnZXQgc3lzdGVtLiBJJiMzOTtsbCBpbmNsdWRlIGBTSE1FTWAgaWYgaXQgc2VlbXMgbmVjZXNzYXJ5LiBJdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQgb3IgZGVmYXVsdHMgdG8gZW5hYmxlZCwgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnkuCgpXYWl0IGEgc2Vjb25k4oCmIHRoZSBwYXRjaCB0b3VjaGVzIGBtbS9zaG1lbS5jYC4gVGhhdCBtZWFucyBJICptdXN0KiB2ZXJpZnkgYENPTkZJR19TSE1FTWAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gc2hhcmVkIG1lbW9yeS4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBwYXRjaCByZWxpZXMgb24gb3IgYWZmZWN0cyBzaGFyZWQgbWVtb3J5IGNvbmZpZ3VyYXRpb25zLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQgdGhhdCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gbGl2ZXMuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgaW5pdC9gIGRpcmVjdG9yeSBmZWVscyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gaXRzIHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEFuZCB3aXRoaW4gdGhhdCwgYEtjb25maWdgIGlzIHRoZSBvYnZpb3VzIHRhcmdldC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVjbGFyZWQsIGFuZCBob3BlZnVsbHksIG91ciBteXN0ZXJ5IG9wdGlvbiBpcyBkZWZpbmVkIHRoZXJlLCBhbG9uZyB3aXRoIGFsbCB0aGUgbWV0YWRhdGEgd2UgbmVlZC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgZHJpbGxpbmcgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlc2NyaXB0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEVWRU5URkRcbi0tXG5pbml0L0tjb25maWctMTkzMi1cbmluaXQvS2NvbmZpZzoxOTMzOmNvbmZpZyBTSE1FTVxuaW5pdC9LY29uZmlnLTE5MzQtXHRib29sIFwmIzM0O1VzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW1cJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCAtIEtleSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzaGFyZWQgbWVtb3J5LCBzbyBgQ09ORklHX1NITUVNYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50LiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTt2ZSBnb3Qgc29tZSBrZXJuZWwgY29uZmlncyB0byBrZWVwIGluIG1pbmQsIHNwZWNpZmljYWxseSBgU1dBUGAsIGBaU1dBUGAsIGBVU0VSRkFVTFRGRGAsIGFuZCBvZiBjb3Vyc2UsIGBTSE1FTWAuIFRob3NlIGFsbCBwbGF5IGludG8gdGhpcy4KCk5vdywgd2hpY2ggc3ltYm9scyBhcmUgdGhlIGNvcmUgb2YgdGhpcyBkaXNjdXNzaW9uPyBXZSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGBzeXNfbWluY29yZWAsIGBzaG1lbV9nZXRfZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgYHN3YXBpbl9yZWFkYWhlYWRgLCBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AsIGBzd3Bfc3dhcGNvdW50YCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYHN5c191c2VyZmF1bHRmZGAsIGB6c3dhcF9zdG9yZWAsIGFuZCBgenN3YXBfbG9hZGAuIEVhY2ggb2YgdGhlc2UgYXJlIGVzc2VudGlhbCBwaWVjZXMgb2YgdGhlIHB1enpsZS4KCldhaXQgYSBzZWNvbmQsIGhvdyBpcyBgc3lzX21pbmNvcmVgIGFjdHVhbGx5IGRlZmluZWQ/IElzIGl0IHNpbXBseSBgc3lzX21pbmNvcmVgIG9yIGNvdWxkIGl0IGJlIHRoZSB4NjQgc3BlY2lmaWMgdmVyc2lvbiwgYF9feDY0X3N5c19taW5jb3JlYD8gU3lzY2FsbHMgYXJlIHVzdWFsbHkgZGVmaW5lZCB1c2luZyBgU1lTQ0FMTF9ERUZJTkVgLCBzbywgbGV0JiMzOTtzIHZlcmlmeS4gSSBjb3VsZCBwcm9iYWJseSBnZXQgYXdheSB3aXRoIGp1c3Qgc2VhcmNoaW5nIGZvciBgc3lzX21pbmNvcmVgIG9yIHNpbXBseSBgbWluY29yZWAuIExldCYjMzk7cyBqdXN0IGRvdWJsZSBjaGVjayBpbiBgbW0vbWluY29yZS5jYCBmb3IgYW55IGRlZmluaXRpb25zIHVzaW5nIGBTWVNDQUxMX0RFRklORWAuIEkmIzM5O2xsIGNvbmZpcm0gaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qbWluY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pbmNvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taW5jb3JlLmM9MjQ2PXN0YXRpYyBsb25nIGRvX21pbmNvcmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBhZ2VzLCB1bnNpZ25lZCBjaGFyICp2ZWMpXG4tLVxubW0vbWluY29yZS5jLTI5MS0gKi9cbm1tL21pbmNvcmUuYzoyOTI6U1lTQ0FMTF9ERUZJTkUzKG1pbmNvcmUsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbixcbm1tL21pbmNvcmUuYy0yOTMtXHRcdHVuc2lnbmVkIGNoYXIgX191c2VyICosIHZlYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwOTcKCQkJCQkJCW91dHB1dDogMjYzCgkJCQkJCQl0aG91Z2h0czogMTEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBTZWxlY3Rpb246IEEgS2VybmVsIFBlcnNwZWN0aXZlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRvIGxldmVyYWdlIGBkb19taW5jb3JlYCwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIG5vLWdvIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdG8gYXZvaWQgaW5saW5pbmcgaXNzdWVzLiAgU28sIEkmIzM5O2xsIGdvIHdpdGggYHN5c19taW5jb3JlYCBhbmQgYHN5c191c2VyZmF1bHRmZGAgZGlyZWN0bHkuIFRoZXkgYXJlIHN5c2NhbGxzLCB3aGljaCBTeXprYWxsZXIgc2hvdWxkIGhhbmRsZSBlYXNpbHkuCgpJJiMzOTt2ZSBnb3QgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLiBMZXQmIzM5O3Mgc2VlLi4uIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBhcmUgZ29vZC4gIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcGluX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBhbmQgYHNobWVtX2dldF9mb2xpb2AgYWxsIGxvb2sgc29saWQgdG9vLiBHb29kLCBnb29kLCB0aGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYy4KCk5vdywgSSB3YXMgYSBiaXQgaHVuZyB1cCBvbiBgZG9fc3dhcF9wYWdlYC4gSXQmIzM5O3MgZGVmaW5pdGVseSBhIGhvdCBwYXRoLCB0aGUgbWFpbiBmdW5jdGlvbiBtb2RpZmllZC4gVGhlIHBhdGNoIGFjdHVhbGx5IGNoYW5nZXMgaG93IGl0IGhhbmRsZXMgdGhlIGBWTV9GQVVMVF9TSUdCVVNgIHJldHVybi4gQnV0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBzd2FwLCBidXQgbWF5YmUgSSBjYW4gZXhjbHVkZSBpdC4gIFRoZSBtb2RpZmllZCBgZ2V0X3N3YXBfZGV2aWNlYCBpcyBjYWxsZWQgYnkgYWxsIHRoZXNlIGZ1bmN0aW9ucyBJJiMzOTt2ZSBsaXN0ZWQsIHNvIGZ1enppbmcgdGhvc2Ugc2hvdWxkIHN0aWxsIGhpdCB0aGUgcmVsZXZhbnQgbG9naWMsIHBhcnRpY3VsYXJseSB0aGUgYEVSUl9QVFIoLUVJTlZBTClgIGhhbmRsaW5nIGluIGBnZXRfc3dhcF9kZXZpY2VgLiBJIHdpbGwgcmVseSBvbiB0aGUgb3RoZXIgZnVuY3Rpb25zIHRvIGhpdCB0aGF0IGBnZXRfc3dhcF9kZXZpY2VgIGJlaGF2aW9yLiBUaGF0IHdpbGwgZ2l2ZSBnb29kIGNvdmVyYWdlIG9mIHRoZSBjaGFuZ2VzLgoKU28sIGxldCYjMzk7cyByZXZpZXc6IHRoZSBwYXRjaCBpcyBhYm91dCBgZ2V0X3N3YXBfZGV2aWNlKClgIG5vdyByZXR1cm5pbmcgYEVSUl9QVFIoLUVJTlZBTClgIGluc3RlYWQgb2YgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLiBJdCB1cGRhdGVzIG1hbnkgY2FsbGVycyBpbiB0aGUga2VybmVsIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoKWAsIGFuZCBgZG9fc3dhcF9wYWdlYCBub3cgdXNlcyBgSVNfRVJSKClgIHRvIHJldHVybiBgVk1fRkFVTFRfU0lHQlVTYC4gVGhpcyBmaXhlcyBhIHBvc3NpYmxlIGluZmluaXRlIGxvb3AgZnJvbSBtYWxmb3JtZWQgZW50cmllcywgc28gaXQmIzM5O3MgYSBmdW5jdGlvbmFsLCB1c2VyLXJlYWNoYWJsZSBjaGFuZ2UgdGhhdCAqbmVlZHMqIGZ1enppbmcuCgpJJiMzOTtsbCBiZSB1c2luZyBjb25maWdzIGBTV0FQYCwgYFpTV0FQYCwgYFVTRVJGQVVMVEZEYCwgYW5kIGBTSE1FTWAgdG8gY292ZXIgYWxsIHRoZSByZWxldmFudCBzdWJzeXN0ZW1zLgoKTXkgZmluYWwgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uIGlzOiBgc3lzX21pbmNvcmVgLCBgc3lzX3VzZXJmYXVsdGZkYCwgYHNobWVtX2dldF9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcGluX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgenN3YXBfc3RvcmVgLCBhbmQgYHpzd2FwX2xvYWRgLiAgSSBmZWVsIGNvbmZpZGVudCB0aGF0IHRoaXMgc2VsZWN0aW9uIHdpbGwgcHJvdmlkZSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIG9mIHRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZWFkX3N3YXBfY2FjaGVfYXN5bmMmIzM0OywKICAgICYjMzQ7c3dhcGluX3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZWFkX3N3YXBfY2FjaGVfYXN5bmMmIzM0OywKICAgICYjMzQ7c3dhcGluX3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBhbiBlcnJvciBwb2ludGVyIChgRVJSX1BUUigtRUlOVkFMKWApIGZvciBtYWxmb3JtZWQgc3dhcCBlbnRyaWVzLCByYXRoZXIgdGhhbiBqdXN0IGBOVUxMYC4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL21lbW9yeS5jYCwgYG1tL21pbmNvcmUuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYG1tL3VzZXJmYXVsdGZkLmNgLCBgbW0venN3YXAuY2ApIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoKWAgYW5kIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAoZS5nLiwgcmV0dXJuaW5nIGBWTV9GQVVMVF9TSUdCVVNgIGluIGBkb19zd2FwX3BhZ2UoKWApLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYnVncyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZykuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQsIG5vIG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTdmNmQ3NWY4ZDc1YTYxNzdiOWZiOTY3OTk3YThjNWQxYTY3N2U1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTk6Mzg6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGQ5Y2Y5NDE5NjdjZjAuLjI4NDJjZDk3NmYxZDMgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00OTU2LDggJiM0Mzs0OTU2LDEzIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCiAJLyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLiAqLwogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQlpZiAodW5saWtlbHkoIXNpKSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewomIzQzOwkJLyogQSBtYWxmb3JtZWQgZW50cnkgbmV2ZXIgYmVjb21lcyB2YWxpZCwgc28gZG9uJiMzOTt0IHJldHJ5IGl0LiAqLwomIzQzOwkJaWYgKElTX0VSUihzaSkpCiYjNDM7CQkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJc2kgPSBOVUxMOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJaWYgKGZvbGlvKQpkaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jCmluZGV4IGZmNGFjODI4MTc2ODMuLmMwODY4MzZiYzRiY2MgMTAwNjQ0Ci0tLSBhL21tL21pbmNvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taW5jb3JlLmMKQEAgLTcxLDcgJiM0Mzs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSkKIAkgKi8KIAlpZiAoc2htZW0pIHsKIAkJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCQlpZiAoIXNpKQomIzQzOwkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJCXJldHVybiAwOwogCX0KIAlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDY1NTcyY2JmMWJkM2MuLmQwYTlmNTJiZmVkNzEgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMjI3Niw3ICYjNDM7MjI3Niw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShpbmRleF9lbnRyeSk7CiAJb3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTsKLQlpZiAodW5saWtlbHkoIXNpKSkgewomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7CiAJCWlmIChvcmRlciAmbHQ7IDApCiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDRiN2EzMzAzYzQ2M2IuLmYyZTg2ZDY2MjZlY2MgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTcxNSw3ICYjNDM7NzE1LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAltcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCAmYW1wO2lseCk7CkBAIC05NTEsNyAmIzQzOzk1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIAkJICovCiAJCWlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHsKIAkJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJCWlmICghc2kpCiYjNDM7CQkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJCQljb250aW51ZTsKIAkJfQogCQlmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbygmYW1wO2N0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA0ZDRlM2UzMDU5ZjZiLi4yOTYxMmEwY2Y3YWZhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE1MDQsNyAmIzQzOzE1MDQsNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKQogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIDA7CiAKIAljaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTsKQEAgLTE4NTksNyAmIzQzOzE4NTksOSBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogICogQ2hlY2sgd2hldGhlciBzd2FwIGVudHJ5IGlzIHZhbGlkIGluIHRoZSBzd2FwIGRldmljZS4gIElmIHNvLAogICogcmV0dXJuIHBvaW50ZXIgdG8gc3dhcF9pbmZvX3N0cnVjdCwgYW5kIGtlZXAgdGhlIHN3YXAgZW50cnkgdmFsaWQKICAqIHZpYSBwcmV2ZW50aW5nIHRoZSBzd2FwIGRldmljZSBmcm9tIGJlaW5nIHN3YXBvZmYsIHVudGlsCi0gKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuCiYjNDM7ICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgUmV0dXJuIE5VTEwgZm9yIGFuIGVtcHR5IGVudHJ5IG9yIGEKJiM0MzsgKiBkZXZpY2UgdGhhdCBpcyBnb2luZyBhd2F5LCBhbmQgRVJSX1BUUigtRUlOVkFMKSBpZiB0aGUgZW50cnkgaXRzZWxmCiYjNDM7ICogaXMgbWFsZm9ybWVkIGFuZCBjYW4gbmV2ZXIgbmFtZSBhIHNsb3Qgb24gYW55IGRldmljZS4KICAqCiAgKiBOb3RpY2UgdGhhdCBzd2Fwb2ZmIG9yIHN3YXBvZmYmIzQzO3N3YXBvbiBjYW4gc3RpbGwgaGFwcGVuIGJlZm9yZSB0aGUKICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGUKQEAgLTE4OTksMTMgJiM0MzsxOTAxLDE0IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpCiAKIAlyZXR1cm4gc2k7CiBiYWRfbm9maWxlOgotCXByX2VycigmIzM0OyVzOiAlcyUwOGx4XG4mIzM0OywgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpOwomIzQzOwlwcl9lcnJfcmF0ZWxpbWl0ZWQoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiBvdXQ6CiAJcmV0dXJuIE5VTEw7CiBwdXRfb3V0OgotCXByX2VycigmIzM0OyVzOiAlcyUwOGx4XG4mIzM0OywgX19mdW5jX18sIEJhZF9vZmZzZXQsIGVudHJ5LnZhbCk7CiYjNDM7CXByX2Vycl9yYXRlbGltaXRlZCgmIzM0OyVzOiAlcyUwOGx4XG4mIzM0OywgX19mdW5jX18sIEJhZF9vZmZzZXQsIGVudHJ5LnZhbCk7CiAJcGVyY3B1X3JlZl9wdXQoJmFtcDtzaS0mZ3Q7dXNlcnMpOwotCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIAogLyoKQEAgLTIwMDEsNyAmIzQzOzIwMDQsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSkKIAlpbnQgY291bnQ7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIDA7CiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7CkBAIC0yMTI3LDcgJiM0MzsyMTMwLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKQogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTsKIAogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQlpZiAoV0FSTl9PTl9PTkNFKCFzaSkpCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoSVNfRVJSX09SX05VTEwoc2kpKSkKIAkJcmV0dXJuOwogCWlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCAmZ3Q7IHNpLSZndDttYXgpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IDI0YTRkOTJmZmEzYzIuLmJmN2JjN2ZiMWFhMGYgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMTcwMCw3ICYjNDM7MTcwMCw4IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kCiAJCX0KIAogCQlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JCWlmICh1bmxpa2VseSghc2kpKSB7CiYjNDM7CQlpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7CiYjNDM7CQkJc2kgPSBOVUxMOwogCQkJcmV0ID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBmN2M5Yzg5ZjY0NDljLi5iYzliOTMxZDZmNDQ3IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTk5Nyw3ICYjNDM7OTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTkKCQkJCQkJCW91dHB1dDogMjM0CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFN3YXAgRW50cnkgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgZ2V0X3N3YXBfZGV2aWNlKClgLiBTcGVjaWZpY2FsbHksIGluc3RlYWQgb2YgcmV0dXJuaW5nIGBOVUxMYCBmb3IgY2VydGFpbiBlcnJvcnMgd2l0aCBzd2FwIGVudHJpZXMgKGxpa2UgYmFkIGZpbGVzIG9yIG9mZnNldHMpLCB0aGUgZnVuY3Rpb24gbm93IHJldHVybnMgYW4gZXJyb3IgcG9pbnRlciwgYEVSUl9QVFIoLUVJTlZBTClgLiBUaGUgc3Vic2VxdWVudCBjaGFuZ2UgaXMgdXBkYXRpbmcgdGhlIGNhbGxlcnMgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgIGZvciB0aGUgY2hlY2ssIGluc3RlYWQgb2Ygc2ltcGx5IGAhc2lgLiBUaGlzIHBhdHRlcm4gaXMgc2VlbiB0aHJvdWdob3V0IHRoZSBgbW1gIHN1YnN5c3RlbSwgYWZmZWN0aW5nIGEgcmFuZ2Ugb2YgZmlsZXMuIEluIGBkb19zd2FwX3BhZ2UoKWAsIGEgY3JpdGljYWwgZnVuY3Rpb24sIGlmIGBJU19FUlIoc2kpYCBpcyB0cnVlLCBpdCB0cmlnZ2VycyBgVk1fRkFVTFRfU0lHQlVTYC4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0IHJvYnVzdGlmeWluZyB0aGUga2VybmVsJiMzOTtzIHJlc3BvbnNlIHRvICptYWxmb3JtZWQqIG9yICppbnZhbGlkKiBzd2FwIGVudHJpZXMuIEl0JiMzOTtzIGEgbG9naWMgYW5kIG1lbW9yeSBzYWZldHkgaW1wcm92ZW1lbnQuIFRoZSBpc3N1ZSBhdCBoYW5kIGlzIGxpa2VseSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLCByZXN1bHRpbmcgaW4gY3Jhc2hlcyBvciBpbmZpbml0ZSBsb29wcy4gVGhpcyBraW5kIG9mIHByb2JsZW0gaXMgZXhhY3RseSB0aGUgc29ydCBvZiB0aGluZyB0aGF0IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LgoKVGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyBJIHRoaW5rIG5vdC4gYGdldF9zd2FwX2RldmljZSgpYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdGAsIHdoaWNoIGlzIHRoZW4gY2hlY2tlZCBieSBjYWxsZXJzLiBUaGVyZSYjMzk7cyBubyBzY2VuYXJpbyBoZXJlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGRpcmVjdGx5IGV4cG9zZWQuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQsIG5vIHVzZXItc3BhY2UgY29waWVzIGFyZSBtb2RpZmllZCwgYW5kIEkgc2VlIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBiZWluZyBleHBvc2VkIHRocm91Z2ggdGhpcyBjaGFuZ2UuCgpUaGVyZWZvcmUsIGFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIGlzIGFib3V0IGJldHRlciBlcnJvciBoYW5kbGluZyBhbmQgcHJldmVudGluZyBjcmFzaGVzIGZyb20gYmFkIHN3YXAgZW50cmllcywgbm90IGFib3V0IGV4cG9zaW5nIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFIoLUVJTlZBTClgKSBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcywgcmF0aGVyIHRoYW4ganVzdCBgTlVMTGAuIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9tZW1vcnkuY2AsIGBtbS9taW5jb3JlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS91c2VyZmF1bHRmZC5jYCwgYG1tL3pzd2FwLmNgKSB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgIGFuZCBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHkgKGUuZy4sIHJldHVybmluZyBgVk1fRkFVTFRfU0lHQlVTYCBpbiBgZG9fc3dhcF9wYWdlKClgKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcpLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkLCBubyBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGFuIGVycm9yIHBvaW50ZXIgKGBFUlJfUFRSKC1FSU5WQUwpYCkgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMsIHJhdGhlciB0aGFuIGp1c3QgYE5VTExgLiBJdCB1cGRhdGVzIHZhcmlvdXMgY2FsbGVycyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vbWVtb3J5LmNgLCBgbW0vbWluY29yZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdXNlcmZhdWx0ZmQuY2AsIGBtbS96c3dhcC5jYCkgdG8gdXNlIGBJU19FUlJfT1JfTlVMTCgpYCBhbmQgaGFuZGxlIHRoZSBlcnJvciBhcHByb3ByaWF0ZWx5IChlLmcuLCByZXR1cm5pbmcgYFZNX0ZBVUxUX1NJR0JVU2AgaW4gYGRvX3N3YXBfcGFnZSgpYCkuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nKS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgaW50cm9kdWNlZCwgbm8gbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIyLjQxNDU1MDI4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTA4MDY2MzExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fZ2V0X2ZvbGlvXCIsXG4gICAgXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcIixcbiAgICBcInN3YXBpbl9yZWFkYWhlYWRcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIixcbiAgICBcInN3cF9zd2FwY291bnRcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFIoLUVJTlZBTClgKSBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcywgcmF0aGVyIHRoYW4ganVzdCBgTlVMTGAuIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9tZW1vcnkuY2AsIGBtbS9taW5jb3JlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS91c2VyZmF1bHRmZC5jYCwgYG1tL3pzd2FwLmNgKSB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgIGFuZCBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHkgKGUuZy4sIHJldHVybmluZyBgVk1fRkFVTFRfU0lHQlVTYCBpbiBgZG9fc3dhcF9wYWdlKClgKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcpLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkLCBubyBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MjIuNDE0NTU1OTE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU1MTk4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTdmNmQ3NWY4ZDc1YTYxNzdiOWZiOTY3OTk3YThjNWQxYTY3N2U1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBkOWNmOTQxOTY3Y2YwLi4yODQyY2Q5NzZmMWQzIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNDk1Niw4ICs0OTU2LDEzIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXG4gXFx0LyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLiAqL1xcbiBcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdGlmICh1bmxpa2VseSghc2kpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XFxuK1xcdFxcdC8qIEEgbWFsZm9ybWVkIGVudHJ5IG5ldmVyIGJlY29tZXMgdmFsaWQsIHNvIGRvbid0IHJldHJ5IGl0LiAqL1xcbitcXHRcXHRpZiAoSVNfRVJSKHNpKSlcXG4rXFx0XFx0XFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHRcXHRzaSA9IE5VTEw7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcXG4gXFx0aWYgKGZvbGlvKVxcbmRpZmYgLS1naXQgYS9tbS9taW5jb3JlLmMgYi9tbS9taW5jb3JlLmNcXG5pbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NFxcbi0tLSBhL21tL21pbmNvcmUuY1xcbisrKyBiL21tL21pbmNvcmUuY1xcbkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcXG4gXFx0ICovXFxuIFxcdGlmIChzaG1lbSkge1xcbiBcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdFxcdGlmICghc2kpXFxuK1xcdFxcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDY1NTcyY2JmMWJkM2MuLmQwYTlmNTJiZmVkNzEgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMjI3Niw3ICsyMjc2LDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGluZGV4X2VudHJ5KTtcXG4gXFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcXG4tXFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xcbiBcXHRcXHRpZiAob3JkZXIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0XFx0ZWxzZVxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCA0YjdhMzMwM2M0NjNiLi5mMmU4NmQ2NjI2ZWNjIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC03MTUsNyArNzE1LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbi1cXHRpZiAoIXNpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdG1wb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIDAsIFxcdTAwMjZpbHgpO1xcbkBAIC05NTEsNyArOTUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF92bWFfcmVhZGFoZWFkKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHN3cF90eXBlKGVudHJ5KSAhPSBzd3BfdHlwZSh0YXJnX2VudHJ5KSkge1xcbiBcXHRcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdFxcdFxcdGlmICghc2kpXFxuK1xcdFxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFxcdTAwMjZjdHgsIGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDRkNGUzZTMwNTlmNmIuLjI5NjEyYTBjZjdhZmEgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTUwNCw3ICsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcXG4gXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcXG4gXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG4tXFx0aWYgKCFzaSlcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTtcXG5AQCAtMTg1OSw3ICsxODU5LDkgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gICogQ2hlY2sgd2hldGhlciBzd2FwIGVudHJ5IGlzIHZhbGlkIGluIHRoZSBzd2FwIGRldmljZS4gIElmIHNvLFxcbiAgKiByZXR1cm4gcG9pbnRlciB0byBzd2FwX2luZm9fc3RydWN0LCBhbmQga2VlcCB0aGUgc3dhcCBlbnRyeSB2YWxpZFxcbiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbFxcbi0gKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuXFxuKyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhXFxuKyAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXksIGFuZCBFUlJfUFRSKC1FSU5WQUwpIGlmIHRoZSBlbnRyeSBpdHNlbGZcXG4rICogaXMgbWFsZm9ybWVkIGFuZCBjYW4gbmV2ZXIgbmFtZSBhIHNsb3Qgb24gYW55IGRldmljZS5cXG4gICpcXG4gICogTm90aWNlIHRoYXQgc3dhcG9mZiBvciBzd2Fwb2ZmK3N3YXBvbiBjYW4gc3RpbGwgaGFwcGVuIGJlZm9yZSB0aGVcXG4gICogcGVyY3B1X3JlZl90cnlnZXRfbGl2ZSgpIGluIGdldF9zd2FwX2RldmljZSgpIG9yIGFmdGVyIHRoZVxcbkBAIC0xODk5LDEzICsxOTAxLDE0IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXFxuIFxcbiBcXHRyZXR1cm4gc2k7XFxuIGJhZF9ub2ZpbGU6XFxuLVxcdHByX2VycihcXFwiJXM6ICVzJTA4bHhcXFxcblxcXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcXG4rXFx0cHJfZXJyX3JhdGVsaW1pdGVkKFxcXCIlczogJXMlMDhseFxcXFxuXFxcIiwgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpO1xcbitcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gcHV0X291dDpcXG4tXFx0cHJfZXJyKFxcXCIlczogJXMlMDhseFxcXFxuXFxcIiwgX19mdW5jX18sIEJhZF9vZmZzZXQsIGVudHJ5LnZhbCk7XFxuK1xcdHByX2Vycl9yYXRlbGltaXRlZChcXFwiJXM6ICVzJTA4bHhcXFxcblxcXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xcbiBcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2c2ktXFx1MDAzZXVzZXJzKTtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0yMDAxLDcgKzIwMDQsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcXG4gXFx0aW50IGNvdW50O1xcbiBcXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbi1cXHRpZiAoIXNpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5AQCAtMjEyNyw3ICsyMTMwLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxcbiBcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XFxuIFxcbiBcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIXNpKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcXHUwMDNlIHNpLVxcdTAwM2VtYXgpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcXG5pbmRleCAyNGE0ZDkyZmZhM2MyLi5iZjdiYzdmYjFhYTBmIDEwMDY0NFxcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXFxuQEAgLTE3MDAsNyArMTcwMCw4IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcXG4rXFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xcbitcXHRcXHRcXHRzaSA9IE5VTEw7XFxuIFxcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggZjdjOWM4OWY2NDQ5Yy4uYmM5YjkzMWQ2ZjQ0NyAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFxuIFxcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcXG4tXFx0aWYgKCFzaSlcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcbiBcXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODoyMi45MTA4NDc5ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NTE3MjM4MDY5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNobWVtX2dldF9mb2xpb1wiLFxuICAgIFwicmVhZF9zd2FwX2NhY2hlX2FzeW5jXCIsXG4gICAgXCJzd2FwaW5fcmVhZGFoZWFkXCIsXG4gICAgXCJzd2FwX3JldHJ5X3RhYmxlX2FsbG9jXCIsXG4gICAgXCJzd3Bfc3dhcGNvdW50XCIsXG4gICAgXCJzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdFwiLFxuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2xvYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDU3ZjZkNzVmOGQ3NWE2MTc3YjlmYjk2Nzk5N2E4YzVkMWE2NzdlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZDljZjk0MTk2N2NmMC4uMjg0MmNkOTc2ZjFkMyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ5NTYsOCArNDk1NiwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuK1x0XHQvKiBBIG1hbGZvcm1lZCBlbnRyeSBuZXZlciBiZWNvbWVzIHZhbGlkLCBzbyBkb24ndCByZXRyeSBpdC4gKi9cbitcdFx0aWYgKElTX0VSUihzaSkpXG4rXHRcdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRzaSA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRpZiAoZm9saW8pXG5kaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jXG5pbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NFxuLS0tIGEvbW0vbWluY29yZS5jXG4rKysgYi9tbS9taW5jb3JlLmNcbkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbiBcdCAqL1xuIFx0aWYgKHNobWVtKSB7XG4gXHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0aWYgKCFzaSlcbitcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA2NTU3MmNiZjFiZDNjLi5kMGE5ZjUyYmZlZDcxIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNzYsNyArMjI3Niw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShpbmRleF9lbnRyeSk7XG4gXHRvcmRlciA9IHNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRleCwgaW5kZXhfZW50cnkpO1xuLVx0aWYgKHVubGlrZWx5KCFzaSkpIHtcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiBcdFx0aWYgKG9yZGVyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA0YjdhMzMwM2M0NjNiLi5mMmU4NmQ2NjI2ZWNjIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC03MTUsNyArNzE1LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdG1wb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIDAsIFx1MDAyNmlseCk7XG5AQCAtOTUxLDcgKzk1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0ICovXG4gXHRcdGlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHtcbiBcdFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdFx0aWYgKCFzaSlcbitcdFx0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oXHUwMDI2Y3R4LCBlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNGQ0ZTNlMzA1OWY2Yi4uMjk2MTJhMGNmN2FmYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNTA0LDcgKzE1MDQsNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKVxuIFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBvZmZzZXQpO1xuQEAgLTE4NTksNyArMTg1OSw5IEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gICogQ2hlY2sgd2hldGhlciBzd2FwIGVudHJ5IGlzIHZhbGlkIGluIHRoZSBzd2FwIGRldmljZS4gIElmIHNvLFxuICAqIHJldHVybiBwb2ludGVyIHRvIHN3YXBfaW5mb19zdHJ1Y3QsIGFuZCBrZWVwIHRoZSBzd2FwIGVudHJ5IHZhbGlkXG4gICogdmlhIHByZXZlbnRpbmcgdGhlIHN3YXAgZGV2aWNlIGZyb20gYmVpbmcgc3dhcG9mZiwgdW50aWxcbi0gKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuXG4rICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgUmV0dXJuIE5VTEwgZm9yIGFuIGVtcHR5IGVudHJ5IG9yIGFcbisgKiBkZXZpY2UgdGhhdCBpcyBnb2luZyBhd2F5LCBhbmQgRVJSX1BUUigtRUlOVkFMKSBpZiB0aGUgZW50cnkgaXRzZWxmXG4rICogaXMgbWFsZm9ybWVkIGFuZCBjYW4gbmV2ZXIgbmFtZSBhIHNsb3Qgb24gYW55IGRldmljZS5cbiAgKlxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZitzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlXG4gICogcGVyY3B1X3JlZl90cnlnZXRfbGl2ZSgpIGluIGdldF9zd2FwX2RldmljZSgpIG9yIGFmdGVyIHRoZVxuQEAgLTE4OTksMTMgKzE5MDEsMTQgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcbiBcbiBcdHJldHVybiBzaTtcbiBiYWRfbm9maWxlOlxuLVx0cHJfZXJyKFwiJXM6ICVzJTA4bHhcXG5cIiwgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpO1xuK1x0cHJfZXJyX3JhdGVsaW1pdGVkKFwiJXM6ICVzJTA4bHhcXG5cIiwgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpO1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gb3V0OlxuIFx0cmV0dXJuIE5VTEw7XG4gcHV0X291dDpcbi1cdHByX2VycihcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xuK1x0cHJfZXJyX3JhdGVsaW1pdGVkKFwiJXM6ICVzJTA4bHhcXG5cIiwgX19mdW5jX18sIEJhZF9vZmZzZXQsIGVudHJ5LnZhbCk7XG4gXHRwZXJjcHVfcmVmX3B1dChcdTAwMjZzaS1cdTAwM2V1c2Vycyk7XG4tXHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbiAvKlxuQEAgLTIwMDEsNyArMjAwNCw3IEBAIGludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0aW50IGNvdW50O1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKCFzaSlcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgc3dwX29mZnNldChlbnRyeSkpO1xuQEAgLTIxMjcsNyArMjEzMCw3IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXNpKSlcbitcdGlmIChXQVJOX09OX09OQ0UoSVNfRVJSX09SX05VTEwoc2kpKSlcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKFdBUk5fT05fT05DRShlbmRfb2Zmc2V0IFx1MDAzZSBzaS1cdTAwM2VtYXgpKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xuaW5kZXggMjRhNGQ5MmZmYTNjMi4uYmY3YmM3ZmIxYWEwZiAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbisrKyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0xNzAwLDcgKzE3MDAsOCBAQCBzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZFxuIFx0XHR9XG4gXG4gXHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcbitcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuK1x0XHRcdHNpID0gTlVMTDtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGY3YzljODlmNjQ0OWMuLmJjOWI5MzFkNmY0NDcgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtOTk3LDcgKzk5Nyw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuLVx0aWYgKCFzaSlcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIyLjkxMDg0OTQ2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjE3NTM2Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN3YXAgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyBzb21lIHN3YXAgaGFuZGxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgd2UgZGVhbCB3aXRoIHRob3NlIHBvdGVudGlhbGx5IG5hc3R5IG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIGluIGBnZXRfc3dhcF9kZXZpY2UoKWAsIHdoZXJlIGl0J3Mgbm93IHJldHVybmluZyBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIHRoZXNlIGJhZCBlbnRyaWVzLiBUaGlzIHN1YnRsZSBzaGlmdCBoYXMgYSByaXBwbGUgZWZmZWN0LCBmb3JjaW5nIGEgYnVuY2ggb2YgY2FsbGVycyBpbiBgbW0vYCB0byB1cGRhdGUgdGhlaXIgY2hlY2tzIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoc2kpYC4gU21hcnQgbW92ZSwgY2F0Y2hlcyBhbGwgY2FzZXMuXG5cblRoZSBgZG9fc3dhcF9wYWdlKClgIGZ1bmN0aW9uIGluIGBtbS9tZW1vcnkuY2AgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgYWRkcmVzc2VzIGBJU19FUlIoc2kpYCBieSByZXR1cm5pbmcgYFZNX0ZBVUxUX1NJR0JVU2AuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBub3csIGluc3RlYWQgb2YganVzdCBzaWxlbnRseSBmYWlsaW5nIGFuZCBwb3RlbnRpYWxseSBsb29waW5nIGZvcmV2ZXIgb24gYSBwYWdlIGZhdWx0LCB3ZSdyZSBleHBsaWNpdGx5IHNpZ25hbGluZyBhIGJ1cyBlcnJvci4gVGhpcyBpcyBtdWNoIGJldHRlciwgYW5kIHJlYWxseSB3b3J0aCBmdXp6aW5nIVxuXG5MZXQncyBzZWXigKYgTW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGRvX3N3YXBfcGFnZWAsIGBtaW5jb3JlX3N3YXBgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3ZtYV9yZWFkYWhlYWRgLCBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AsIGBnZXRfc3dhcF9kZXZpY2VgLCBgc3dwX3N3YXBjb3VudGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIE9rYXksIHRoYXQgZ2l2ZXMgdXMgYSBnb29kIG92ZXJ2aWV3LlxuXG5JIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBgZG9fc3dhcF9wYWdlYCBpcyBkZWZpbml0ZWx5IGhvdCwgYnV0IHRoZSBwYXRjaCdzIG1haW4gY2hhbmdlIGlzIGluIGVycm9yIGhhbmRsaW5nLiBgZ2V0X3N3YXBfZGV2aWNlYCBpcyBhbHNvIGhvdCwgYnV0IGhhbmRsaW5nIG9mIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMgaXMgdGhlIHRhcmdldCBoZXJlLiBUaGVuIHdlIGhhdmUgYG1vdmVfcGFnZXNfcHRlc2AgKHVzZXJmYXVsdGZkKSBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgKHpzd2FwKS4gYHNobWVtX3N3YXBpbl9mb2xpb2AgaXMgcmVsYXRlZCB0byBzaG1lbS5cblxuT2theSwgbGV0J3Mgem9vbSBpbiBvbiBgZ2V0X3N3YXBfZGV2aWNlYCBhbmQgaXRzIGNhbGxlcnMuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaGFuZGxpbmcgb2YgKm1hbGZvcm1lZCogZW50cmllcy4gTXkgZ3V0IHRlbGxzIG1lIHVzZXIgc3BhY2UgaXMgd2hlcmUgdGhpcyB2dWxuZXJhYmlsaXR5IHdpbGwgbGlrZWx5IGJlIGZvdW5kLiBTbywgaXQncyB0aG9zZSBgbWFkdmlzZWAgY2FsbHMgYW5kIHVzZXJmYXVsdGZkIHRoYXQgYXJlIHBvdGVudGlhbCB2ZWN0b3JzIGZvciBpbnRyb2R1Y2luZyBiYWQgZW50cmllcy4gSWYgYGdldF9zd2FwX2RldmljZWAgcmV0dXJuZWQgYE5VTExgIGJlZm9yZSwgYGRvX3N3YXBfcGFnZWAganVzdCBza2lwcGVkIGFuZCByZXR1cm5lZCAwIChwb3NzaWJseSBsZWFkaW5nIHRvIGluZmluaXRlIGxvb3ApLiBOb3cgaXQgY2F1c2VzIGEgU0lHQlVTLiBUaGF0J3MgYSBnb29kIGNoYW5nZS5cblxuTGV0IG1lIHRoaW5rIGFib3V0IHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19TV0FQYCBpcyBvYnZpb3VzbHkgcmVxdWlyZWQgZm9yIHN3YXAgc3VwcG9ydCwgYENPTkZJR19aU1dBUGAgZm9yIHpzd2FwLCBgQ09ORklHX1VTRVJGQVVMVEZEYCBmb3IgdXNlcmZhdWx0ZmQsIGFuZCBgQ09ORklHX1NITUVNYCBmb3Igc2htZW0uIEkgc2hvdWxkIGNoZWNrIGBtbS9zd2FwZmlsZS5jYCBhbmQgYG1tL21lbW9yeS5jYCB0byBzZWUgaWYgdGhleSBkZXBlbmQgb24gYENPTkZJR19TV0FQYC4gWWVwLCBgbW0vc3dhcGZpbGUuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19TV0FQYC4gYG1tL21lbW9yeS5jYCBpcyBhbHdheXMgY29tcGlsZWQuIFRpbWUgZm9yIGEgcXVpY2sgZ3JlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjMzLjEyODM4ODA1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA3OTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm1fZmF1bHRfdCBkb19zd2FwX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9NDg2Mz1zdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcXG4tLVxcbm1tL21lbW9yeS5jLTQ4ODAtICovXFxubW0vbWVtb3J5LmM6NDg4MTp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9tZW1vcnkuYy00ODgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzMuMTcyNDk0NDA3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0ODQ2ODY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBTd2FwIFBhZ2UgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgYGRvX3N3YXBfcGFnZWAgaXMgb25seSBpbmNsdWRlZCB3aGVuIHN3YXAgc3VwcG9ydCBpcyBhY3R1YWxseSBlbmFibGVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgcHJldmVudGluZyBidWlsZCBpc3N1ZXMuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGAjaWZkZWYgQ09ORklHX1NXQVBgIGNvcnJlY3RseSBlbmNhcHN1bGF0ZXMgdGhlIGBkb19zd2FwX3BhZ2VgIGZ1bmN0aW9uIGRlZmluaXRpb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGVjaywgcmVhbGx5LiBJZiBpdCdzICpub3QqIHByb3Blcmx5IGd1YXJkZWQsIHRoZSBrZXJuZWwgbWlnaHQgYXR0ZW1wdCB0byBjYWxsIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBkaXNhYmxlIHN3YXBwaW5nLCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IG5hc3R5IGVycm9ycyBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFNvLCBsZXQncyBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoYXQgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXMgZG9pbmcgaXRzIGpvYiBhcyBleHBlY3RlZC4gVGhpcyBzaG91bGQgYmUgYSB0cml2aWFsIGNoZWNrLCBidXQgaXQncyBhIGNyaXRpY2FsIG9uZSBmb3Iga2VlcGluZyB0aGUgc3lzdGVtIHN0YWJsZSBhbmQgcHJvcGVybHkgY29uZmlndXJlZC4gTm8gc2hvcnRjdXRzIGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODozNi41MjA5NjUwNjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1ODA0MDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODozNi41NjQ1NTM1NTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUzMTg5NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEZWVwZXIgRGl2ZSBpbnRvIGBkb19zd2FwX3BhZ2VgIExvY2F0aW9uKipcblxuSG1tLCBzb21ldGhpbmcgZG9lc24ndCBmZWVsIHJpZ2h0LiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiByZXNpZGVkIGluIGBtbS9tZW1vcnkuY2AgYW5kIHdhcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19TV0FQYC4gQnV0IGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIGlzIGluZGljYXRpbmcgdGhpcyBtaWdodCBub3QgYmUgYWNjdXJhdGUuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIE1ha2VmaWxlIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBMZXQgbWUgZ28gYmFjayBhbmQgaW52ZXN0aWdhdGUgdGhlIGJ1aWxkIHByb2Nlc3MgaW4gYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYW5kIHJlc29sdmUgdGhpcyBkaXNjcmVwYW5jeSBxdWlja2x5LiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIGFuZCB0aGUgTWFrZWZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzkuODE3NzQ1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE0NjAxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzkuODYxODk3MTA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MDg1MTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBTd2FwIFBhZ2UgRnVuY3Rpb25hbGl0eSBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIGBtbS9tZW1vcnkuY2AgaXMgZGVmaW5pdGVseSBhIGNvcmUgZmlsZSwgdGhhdCdzIGEgZ2l2ZW4uIEl0J3MgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLiBOb3csIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbi4uLiB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSdtIHByZXR0eSBzdXJlIGl0J3Mgbm90IGFsd2F5cyBhY3RpdmVseSAqdXNlZCosIGJ1dCByYXRoZXIgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIHN3YXAgaXMgZW5hYmxlZCBpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEVpdGhlciB0aGF0LCBvciBpdCdzIGFsd2F5cyBjb21waWxlZCBidXQgb25seSAqY2FsbGVkKiBpZiBzd2FwcGluZyBpcyBlbmFibGVkLiBUbyBiZSBjZXJ0YWluLCBJIHNob3VsZCBqdXN0IGdvIGFuZCBjaGVjayBkaXJlY3RseSBpbiBgbW0vbWVtb3J5LmNgIGFuZCBzZWUgaG93IGBkb19zd2FwX3BhZ2VgIGlzIGhhbmRsZWQgdGhlcmUuIFRoYXQnbGwgY2xlYXIgdGhpbmdzIHVwLiBObyBuZWVkIHRvIHJlbHkgb24gYXNzdW1wdGlvbnMgd2hlbiB0aGUgc291cmNlIGlzIHJpZ2h0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODo0My40MTI3NTEyODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTA2Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3N3YXBfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz05NDc9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtOTYxLVxcbm1tL21lbW9yeS5jOjk2MjpcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9tZW1vcnkuYy05NjMtXFx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXFxuLS1cXG5tbS9tZW1vcnkuYz0zNjUyPWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0zNjYxLSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXFxubW0vbWVtb3J5LmM6MzY2MjogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXFxubW0vbWVtb3J5LmMtMzY2My0gKiBwcm9jZWVkaW5nIChidXQgZG9fd3BfcGFnZSBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbHJlYWR5IG1ha2luZyBzdWNoIGEgY2hlY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDgzOS1cXHQvKlxcbm1tL21lbW9yeS5jOjQ4NDA6XFx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xcbm1tL21lbW9yeS5jLTQ4NDEtXFx0ICogY29tcGxldGVseSBzd2FwIGVudHJpZXMgd2l0aCBjb250aWd1b3VzIHN3YXAgb2Zmc2V0cy5cXG4tLVxcbm1tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXFxuLS1cXG5tbS9tZW1vcnkuYy00ODgwLSAqL1xcbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtNDg4Mi17XFxuLS1cXG5tbS9tZW1vcnkuYy01MjMwLVxcdHNldF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeS5jOjUyMzE6XFx0YXJjaF9kb19zd2FwX3BhZ2VfbnIodm1hLVxcdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxcbm1tL21lbW9yeS5jLTUyMzItXFx0XFx0XFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY1MjA9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY1NjYtXFx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG5tbS9tZW1vcnkuYzo2NTY3OlxcdFxcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcXG5tbS9tZW1vcnkuYy02NTY4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODo0My40NTY2NjM1OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwODMxMTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBQYWdlIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIHNvIGBkb19zd2FwX3BhZ2VgIGlzIGFsd2F5cyBjb21waWxlZCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgd2hhdCBhYm91dCBgZ2V0X3N3YXBfZGV2aWNlYD8gVGhhdCBmdW5jdGlvbidzIGJ1cmllZCBpbiBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gU2luY2UgaXQgZGVhbHMgd2l0aCBzd2FwIGZpbGVzLCBteSBndWVzcyBpcyBpdCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfU1dBUGAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIEJlc3Qgd2F5IHRvIHZlcmlmeSB3b3VsZCBiZSB0byBjaGVjayBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGFuZCBjb25maXJtIHRoYXQgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHByZXByb2Nlc3NvciBtYWNyby4gVGltZSB0byBkaWcgaW50byB0aGF0IGhlYWRlciBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NDYuNTY0OTc4MDIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkyNjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfc3dhcF9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9Mzg0PWV4dGVybiBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzg1OmV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0zODYtc2VjdG9yX3Qgc3dhcF9mb2xpb19zZWN0b3Ioc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00MTE9c3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00MTYtI2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0MTc6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQxOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjQ2LjYwODkxMDQ3OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzY3MTQxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgU3dhcCBhbmQgVXNlcmZhdWx0ZmQgU3ltYm9sIENvdmVyYWdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGBDT05GSUdfU1dBUGAgaXMgYSBnaXZlbjsgaXQncyBmdW5kYW1lbnRhbCB0byB0aGUgdG9waWMuIE5vdywgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbW0venN3YXAuY2AgYW5kIGBtbS91c2VyZmF1bHRmZC5jYC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gYWNjb3VudCBmb3IgYENPTkZJR19aU1dBUGAgYW5kIGBDT05GSUdfVVNFUkZBVUxURkRgIGFzIHdlbGwuXG5cblRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoZSBwYXRjaCBpcyB0b3VjaGluZywgSSBuZWVkIHRvIGxpc3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzLiBNeSBjb25maWcgbGlzdCBpczogYFNXQVBgLCBgWlNXQVBgLCBhbmQgYFVTRVJGQVVMVEZEYC4gVGhlIHN5bWJvbHMgYmVpbmcgbW9kaWZpZWQgYXJlOiBgZG9fc3dhcF9wYWdlYCwgYG1pbmNvcmVfc3dhcGAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgYHN3YXBfdm1hX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYGdldF9zd2FwX2RldmljZWAsIGBzd3Bfc3dhcGNvdW50YCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYG1vdmVfcGFnZXNfcHRlc2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC5cblxuSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBpbnN0cnVjdGlvbiBzZXQuIFRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0byBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlwiIEJvdGggYGRvX3N3YXBfcGFnZWAgYW5kIGBnZXRfc3dhcF9kZXZpY2VgIGFyZSBkZWZpbml0ZWx5IGhvdCBwYXRocywgZXNwZWNpYWxseSB3aGVuIHN3YXAgaXMgaGVhdmlseSB1c2VkLiBJIHNob3VsZCBleGNsdWRlIHRob3NlLlxuXG5TbywgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHMgaW5zdGVhZDogYG1pbmNvcmVfc3dhcGAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgYHN3YXBfdm1hX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGVzZSBzZWVtIHRvIGJlIGxlc3MgZnJlcXVlbnRseSB1c2VkLCB3aGljaCBpcyBiZXR0ZXIgZm9yIHRoZSB0ZXN0aW5nIGluc3RydWN0aW9ucy5cblxuQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEknbGwgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBgbWluY29yZV9zd2FwYCBpc24ndCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NTUuMzc2MDU1MDg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYzMDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5jb3JlX3N3YXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWluY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pbmNvcmUuYz0yNz1zdGF0aWMgaW50IG1pbmNvcmVfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9taW5jb3JlLmMtNDctXFxubW0vbWluY29yZS5jOjQ4OnN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcXG5tbS9taW5jb3JlLmMtNDkte1xcbi0tXFxubW0vbWluY29yZS5jPTk0PXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleClcXG4tLVxcbm1tL21pbmNvcmUuYy0xMTEtXFx0XFx0XFx0cmV0dXJuIDA7XFxubW0vbWluY29yZS5jOjExMjpcXHRcXHRyZXR1cm4gbWluY29yZV9zd2FwKHJhZGl4X3RvX3N3cF9lbnRyeShmb2xpbyksIHRydWUpO1xcbm1tL21pbmNvcmUuYy0xMTMtXFx0fVxcbi0tXFxubW0vbWluY29yZS5jPTE2Mj1zdGF0aWMgaW50IG1pbmNvcmVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9taW5jb3JlLmMtMjA1LVxcbm1tL21pbmNvcmUuYzoyMDY6XFx0XFx0XFx0KnZlYyA9IG1pbmNvcmVfc3dhcChlbnRyeSwgZmFsc2UpO1xcbm1tL21pbmNvcmUuYy0yMDctXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODo1NS40NzA2OTE4ODhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MTUyMDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtaW5jb3JlYCBBUEkgQ2hvaWNlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1pbmNvcmVfc3dhcGAgZnVuY3Rpb24gYW5kIHRoZSBjb2RlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhcjogYXZvaWQgc3RhdGljLCBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMgaWYgdGhlcmUncyBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50LiBUaGUgYWR2aWNlIGlzIHRvIHByZWZlciBmdW5jdGlvbnMgd2l0aCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBtYWtpbmcgdGhlbSBlYXNpZXIgdG8gdHJhY2UgYW5kIGRlYnVnLCByaWdodD8gU28sIGBtaW5jb3JlX3N3YXBgIGlzIG9mZiB0aGUgdGFibGUgYXMgdGhlIHByZWZlcnJlZCBvcHRpb24uXG5cbkxldCdzIHNlZSwgd2hhdCBhcmUgdGhlIGFsdGVybmF0aXZlcz8gQWgsIHRoZXJlJ3MgYG1pbmNvcmVfcHRlX3JhbmdlYCBhbmQgYG1pbmNvcmVfcGFnZWAsIG9yIGp1c3QgdGhlIGBtaW5jb3JlYCBzeXN0ZW0gY2FsbCBlbnRyeSBpdHNlbGYg4oCTIHRoZSBvbmUgdGhhdCBoaXRzIHRoZSBrZXJuZWwgZGlyZWN0bHkuIFdhaXQgYSBtaW51dGUuLi4gYG1pbmNvcmVfcHRlX3JhbmdlYCBpcyBzdGF0aWMgYXMgd2VsbD8gVGhhdCdzIG5vdCBoZWxwZnVsIGF0IGFsbCFcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgc3lzX21pbmNvcmVgIGlzIHRoZSBlbnRyeSBwb2ludCB3ZSBzaG91bGQgYmUgaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBUaGF0J3MgdGhlIG9uZSB3ZSB3YW50IHRvIHRhcmdldC5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgd2hhdCdzIGdvaW5nIG9uIHdpdGggYHNobWVtX3N3YXBpbl9mb2xpb2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NTkuNzUyMjI5MTg5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIxMTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9zd2FwaW5fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTE1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9pbm9kZXModm9pZClcXG4tLVxcbm1tL3NobWVtLmMtMTU5LVxcbm1tL3NobWVtLmM6MTYwOnN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxubW0vc2htZW0uYy0xNjEtXFx0XFx0XFx0c3RydWN0IGZvbGlvICoqZm9saW9wLCBlbnVtIHNncF90eXBlIHNncCwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc2htZW0uYz0xNDk2PXN0YXRpYyBpbnQgc2htZW1fdW51c2Vfc3dhcF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTE1MDYtXFxubW0vc2htZW0uYzoxNTA3OlxcdFxcdGVycm9yID0gc2htZW1fc3dhcGluX2ZvbGlvKGlub2RlLCBpbmRpY2VzW2ldLCBcXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcXG5tbS9zaG1lbS5jLTE1MDgtXFx0XFx0XFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSwgTlVMTCwgTlVMTCk7XFxuLS1cXG5tbS9zaG1lbS5jPTIxNzU9c3RhdGljIGludCBzaG1lbV9zcGxpdF9sYXJnZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yMjUyLSAqL1xcbm1tL3NobWVtLmM6MjI1MzpzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbm1tL3NobWVtLmMtMjI1NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXFxuLS1cXG5tbS9zaG1lbS5jPTI0Mjc9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI0NTktXFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xcbm1tL3NobWVtLmM6MjQ2MDpcXHRcXHRlcnJvciA9IHNobWVtX3N3YXBpbl9mb2xpbyhpbm9kZSwgaW5kZXgsIFxcdTAwMjZmb2xpbyxcXG5tbS9zaG1lbS5jLTI0NjEtXFx0XFx0XFx0XFx0XFx0ICAgc2dwLCBnZnAsIHZtZiwgZmF1bHRfdHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjU5Ljc5NTQ0NjQ4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQwNDIxNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmc6XG5cbioqU3RhdGljIEZ1bmN0aW9uIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSd2ZSBqdXN0IGJlZW4gbG9va2luZyBhdCBzb21lIGNvZGUgYW5kIEkndmUgemVyb2VkIGluIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gc3BlY2lmaWMgZnVuY3Rpb25zLiBJJ3ZlIG5vdGljZWQgdGhhdCBgc2htZW1fc3dhcGluX2ZvbGlvYCBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBvdXRzaWRlIGl0cyBvd24gY29tcGlsYXRpb24gdW5pdC4gSXRzIHZpc2liaWxpdHkgaXMgZGVsaWJlcmF0ZWx5IHJlc3RyaWN0ZWQsIHdoaWNoIGluZGljYXRlcyBhIHBvdGVudGlhbGx5IGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBvciBvcHRpbWl6YXRpb24uIE5vdywgdGhlIGNhbGxlciB0aGF0IGFjdHVhbGx5IHVzZXMgYHNobWVtX3N3YXBpbl9mb2xpb2AsIHRoZSBvbmUgSSAqY2FuKiBzZWUgZnJvbSBvdXRzaWRlIHRoYXQgbGltaXRlZCBzY29wZSwgaXMgYHNobWVtX2dldF9mb2xpb19nZnBgLiBUaGlzIGxpa2VseSBtZWFucyBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgdGhlIHB1YmxpYyBlbnRyeSBwb2ludCBmb3Igd2hhdGV2ZXIgZnVuY3Rpb25hbGl0eSBgc2htZW1fc3dhcGluX2ZvbGlvYCBpbXBsZW1lbnRzLCBwZXJoYXBzIGFjdGluZyBhcyBhIHdyYXBwZXIgb3IgYSBtYW5hZ2VyIGZvciB0aGUgdW5kZXJseWluZywgc3RhdGljIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHdoYXQgYHNobWVtX2dldF9mb2xpb19nZnBgIGRvZXMsIGl04oCZcyBwcm9iYWJseSBhZGRpbmcgc29tZSBjb250ZXh0LCBjaGVja2luZyBwcmVjb25kaXRpb25zLCBvciBwcm92aWRpbmcgYSBoaWdoZXIgbGV2ZWwgYWJzdHJhY3Rpb24uIEknbGwgYmV0IGl0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgKGdmcCkgc29tZWhvdywgYmFzZWQgb24gaXRzIG5hbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowMy41MzU4NzA1MDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQ4MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX2dldF9mb2xpb19nZnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTIwNDI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMDcyLSAqIFdoZW4gYSBwYWdlIGlzIG1vdmVkIGZyb20gc3dhcGNhY2hlIHRvIHNobWVtIGZpbGVjYWNoZSAoZWl0aGVyIGJ5IHRoZVxcbm1tL3NobWVtLmM6MjA3MzogKiB1c3VhbCBzd2FwaW4gb2Ygc2htZW1fZ2V0X2ZvbGlvX2dmcCgpLCBvciBieSB0aGUgbGVzcyBjb21tb24gc3dhcG9mZiBvZlxcbm1tL3NobWVtLmMtMjA3NC0gKiBzaG1lbV91bnVzZV9pbm9kZSgpKSwgaXQgbWF5IGhhdmUgYmVlbiByZWFkIGluIGVhcmxpZXIgZnJvbSBzd2FwLCBpblxcbi0tXFxubW0vc2htZW0uYz0yMjUzPXN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI0MTgtLypcXG5tbS9zaG1lbS5jOjI0MTk6ICogc2htZW1fZ2V0X2ZvbGlvX2dmcCAtIGZpbmQgcGFnZSBpbiBjYWNoZSwgb3IgZ2V0IGZyb20gc3dhcCwgb3IgYWxsb2NhdGVcXG5tbS9zaG1lbS5jLTI0MjAtICpcXG4tLVxcbm1tL3NobWVtLmMtMjQyNi0gKi9cXG5tbS9zaG1lbS5jOjI0Mjc6c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxubW0vc2htZW0uYy0yNDI4LVxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXFxuLS1cXG5tbS9zaG1lbS5jPTI2MzA9aW50IHNobWVtX2dldF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLFxcbi0tXFxubW0vc2htZW0uYy0yNjMyLXtcXG5tbS9zaG1lbS5jOjI2MzM6XFx0cmV0dXJuIHNobWVtX2dldF9mb2xpb19nZnAoaW5vZGUsIGluZGV4LCB3cml0ZV9lbmQsIGZvbGlvcCwgc2dwLFxcbm1tL3NobWVtLmMtMjYzNC1cXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpLCBOVUxMLCBOVUxMKTtcXG4tLVxcbm1tL3NobWVtLmM9MjcwOT1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL3NobWVtLmMtMjcyNy1cXHRXQVJOX09OX09OQ0Uodm1mLVxcdTAwM2VwYWdlICE9IE5VTEwpO1xcbm1tL3NobWVtLmM6MjcyODpcXHRlcnIgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCB2bWYtXFx1MDAzZXBnb2ZmLCAwLCBcXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcXG5tbS9zaG1lbS5jLTI3MjktXFx0XFx0XFx0XFx0ICBnZnAsIHZtZiwgXFx1MDAyNnJldCk7XFxuLS1cXG5tbS9zaG1lbS5jPTU5NTY9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNTk2My1cXG5tbS9zaG1lbS5jOjU5NjQ6XFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCBpbmRleCwgaV9zaXplX3JlYWQoaW5vZGUpLFxcbm1tL3NobWVtLmMtNTk2NS1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvbGlvLCBTR1BfQ0FDSEUsIGdmcCwgTlVMTCwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM5OjAzLjU4MDUyNzUyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDMyNzgwMDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBBc3luYyBTd2FwIFJlYWRzKipcblxuUmlnaHQsIGBzaG1lbV9nZXRfZm9saW9gIGlzbid0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIG9mIHdpZGVyIHVzYWdlIGFuZCwgdGhlcmVmb3JlLCBhIHdpZGVyIGltcGFjdCBmb3IgYW55IGNoYW5nZXMuIE9rYXksIHRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZDsgdGhlIHNjb3BlIG9mIHRoaXMgaXMgbGlrZWx5IG5vdCBpc29sYXRlZCB0byBhIHNtYWxsIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCB0byB0cnVseSBjb21wcmVoZW5kIGl0cyBpbXBvcnRhbmNlLCBidXQgdGhlIGBub24tc3RhdGljYCBpbW1lZGlhdGVseSBnaXZlcyBtZSBhIHBlcnNwZWN0aXZlIEkgbmVlZCB0byBjb25zaWRlci5cblxuTm93LCB3aGVyZSB3YXMgST8gUmlnaHQsIEkgc2hvdWxkIGxvb2sgYXQgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AuIFRoaXMgb25lIGxpa2VseSBpbnRlcmZhY2VzIHdpdGggdGhlIHN3YXAgY2FjaGUgYW5kIGRlYWxzIHdpdGggYXN5bmNocm9ub3VzIHJlYWRzLCB3aGljaCBtZWFucyBpdCBwcm9iYWJseSBpbnRlcmFjdHMgd2l0aCBgc2htZW1fZ2V0X2ZvbGlvYCBpbiB3YXlzIHRoYXQgYWZmZWN0IHBlcmZvcm1hbmNlIG9yIGNvbmN1cnJlbmN5LiBMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLiBJIGJldCB0aGVyZSdzIHNvbWUgaW50ZXJlc3RpbmcgbnVhbmNlIGluIGhvdyB0aGUgYXN5bmMgcmVhZCBpcyBraWNrZWQgb2ZmLCBob3cgdGhlIGZvbGlvIGlzIGhhbmRsZWQsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIGNhY2hlIG1lY2hhbmljcyBhbmQgSS9PIHNjaGVkdWxlci4gVGhpcyBjb3VsZCBiZSBhIGdvb2QgbGluZSBvZiBlbnF1aXJ5IHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBvZiBgc2htZW1fZ2V0X2ZvbGlvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowOC42MTMzMTA0ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzMzMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfc3dhcF9jYWNoZV9hc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTY4Mj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwOC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzA5OnN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcXG5tbS9zd2FwX3N0YXRlLmMtNzEwLVxcdFxcdGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowOC42NTc2NDgxMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNjQ1MTU3MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkRpZ2dpbmcgaW50byBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCoqXG5cbk9rYXksIHNvIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgIGlzbid0IHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdywgbWVhbnMgaXQncyBsaWtlbHkgdXNlZCBleHRlcm5hbGx5LiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEkgd2lsbCBsb29rIGF0IHRoZSBgc3dhcF92bWFfcmVhZGFoZWFkYCBmdW5jdGlvbiwgYXMgdGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjowMi4zMDI4MDkxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0NDgyMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF92bWFfcmVhZGFoZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBfc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwX3N0YXRlLmM9ODYwPXN0YXRpYyBpbnQgc3dhcF92bWFfcmFfd2luKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpzdGFydCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy04OTgtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjg5OTogKiBzd2FwX3ZtYV9yZWFkYWhlYWQgLSBzd2FwIGluIHBhZ2VzIGluIGhvcGUgd2UgbmVlZCB0aGVtIHNvb25cXG5tbS9zd2FwX3N0YXRlLmMtOTAwLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IG9mIHRoZSB0YXJnZXRlZCBtZW1vcnlcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy05MTMtICovXFxubW0vc3dhcF9zdGF0ZS5jOjkxNDpzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vc3dhcF9zdGF0ZS5jLTkxNS1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IHRhcmdfaWx4LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz05ODY9c3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy05OTQtXFx0Zm9saW8gPSBzd2FwX3VzZV92bWFfcmVhZGFoZWFkKCkgP1xcbm1tL3N3YXBfc3RhdGUuYzo5OTU6XFx0XFx0c3dhcF92bWFfcmVhZGFoZWFkKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LCB2bWYpIDpcXG5tbS9zd2FwX3N0YXRlLmMtOTk2LVxcdFxcdHN3YXBfY2x1c3Rlcl9yZWFkYWhlYWQoZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjowMi4zNzcyNjMwODJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NzI1MzYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFJlYWRhaGVhZCBhbmQgU3dhcCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvLCBgc3dhcF92bWFfcmVhZGFoZWFkYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiAgVGhhdCBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGZpbGUgb3IgbW9kdWxlLiAgT24gdGhlIG90aGVyIGhhbmQsIGBzd2FwaW5fcmVhZGFoZWFkYCBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGdpdmVzIGl0IGJyb2FkZXIgdmlzaWJpbGl0eSBhbmQgcHJvYmFibHkgYSBkaWZmZXJlbnQgcHVycG9zZS4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcmVhZGFoZWFkIG9wZXJhdGlvbnMgZHVyaW5nIHN3YXBwaW5nLiBUaGUgY29udHJhc3RpbmcgdmlzaWJpbGl0eSBsZXZlbHMgb2YgdGhlc2UgZnVuY3Rpb25zIGhhcyBtZSBjdXJpb3VzIGFib3V0IHRoZWlyIHJvbGVzLiBJIGJldCBpdCBpcyBpbXBvcnRhbnQgdG8gdGhlIG92ZXJhbGwgcHJvY2Vzcy5cblxuTm93LCB3aGVyZSBkbyBJIHN0YXJ0IG15IGRlZXBlciBpbnZlc3RpZ2F0aW9uPyBMZXQncyBjaGVjayBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwLiBJdCdzIHByb2JhYmx5IGNvbm5lY3RlZCB0byBob3cgd2UgbWFuYWdlIG1lbW9yeSBkdXJpbmcgdGhvc2Ugc3dhcCBvcGVyYXRpb25zLCBhbmQgY291bGQgaWxsdW1pbmF0ZSB0aGUgY29uZGl0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgcmVhZC1haGVhZCBmdW5jdGlvbnMuIEtub3dpbmcgaXRzIHB1cnBvc2Ugd2lsbCBsaWtlbHkgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIGhvdyBgc3dhcF92bWFfcmVhZGFoZWFkYCBhbmQgYHN3YXBpbl9yZWFkYWhlYWRgIGFyZSB1c2VkLCBhbmQgd2h5IHRoZWlyIHNjb3BlcyBhcmUgZGlmZmVyZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjA2LjA2NDUxOTk1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODIwMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTQ2Mz1zdGF0aWMgaW50IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTQ5OC1cXG5tbS9zd2FwZmlsZS5jOjE0OTk6aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcXG5tbS9zd2FwZmlsZS5jLTE1MDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjowNi4xMzg1MDcyMzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMzQwODY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBhbmQgYHN3cF9zd2FwY291bnRgKipcblxuT2theSwgc28gYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgIGlzbid0IHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgc3BhcmtzIGEgdGhvdWdodCBwcm9jZXNzLiBOb24tc3RhdGljIGZ1bmN0aW9ucyB1c3VhbGx5IGltcGx5IGEgd2lkZXIgc2NvcGUsIHBvdGVudGlhbGx5IG1ha2luZyB0aGVtIGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBvciBhdCBsZWFzdCBvdGhlciBtb2R1bGVzLiBUaGF0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBpdCdzIHVzZWQgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvZGUuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyB1c2FnZSBjb250ZXh0IG1vcmUgYnJvYWRseSwgYmV5b25kIGp1c3QgdGhlIGltbWVkaWF0ZSBzY29wZS5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGludG8gdGhlIGBzd3Bfc3dhcGNvdW50YCB2YXJpYWJsZSwgaXQgaXMgaW1wb3J0YW50IGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSByZWxhdGVkIGFuZCB3aHkgdGhpcyBpcyBpbXBvcnRhbnQgYXQgdGhpcyBzdGFnZS4gSXQgaXMgbGlrZWx5IHRoYXQgYm90aCByZWxhdGUgdG8gdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIHN3YXBwaW5nIHByb2Nlc3Nlcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYWxsb2NhdGlvbiB0YWJsZSBpcyB1c2VkIHdpdGggdGhlIHN3YXAgY291bnRlci4gSSBuZWVkIHRvIGNvbm5lY3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjowOS4zNjE5MTkzODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODQyMjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3cF9zd2FwY291bnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcGZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTE5ODI9Ym9vbCBzd2FwX2VudHJ5X3N3YXBwZWQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTk5OC0gKi9cXG5tbS9zd2FwZmlsZS5jOjE5OTk6aW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpXFxubW0vc3dhcGZpbGUuYy0yMDAwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MDkuNDI5NzY4MTYxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzQyNDkzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBOb24tU3RhdGljIFN3YXAgQ291bnRlcioqXG5cbk9rYXksIHNvIGBzd3Bfc3dhcGNvdW50YCBpcyBkZWNsYXJlZCBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgcXVlc3Rpb25zIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBtb2RpZmljYXRpb24gZnJvbSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhbmQgdXNhZ2UgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJlYSB3aGVyZSBjb25jdXJyZW5jeSBjb3VsZCBsZWFkIHRvIHN1YnRsZSBpc3N1ZXMsIG9yIGlmIGl0J3MgaW50ZW50aW9uYWxseSBkZXNpZ25lZCB0aGlzIHdheSBmb3Igc29tZSB2YWxpZCByZWFzb24uXG5cblRvIGRpZyBkZWVwZXIsIGxldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyBob3cgdGhpcyBjb3VudGVyIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSdsbCBjaGVjayB0aGUgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMgaXQgZGVhbHMgd2l0aCBwdXR0aW5nIGVudHJpZXMgaW50byBzd2FwLCBzbyBpdCdzIGxpa2VseSBhIHBsYWNlIHdoZXJlIHRoZSBzd2FwIGNvdW50ZXIgbWlnaHQgYmUgdG91Y2hlZC4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb3VudGVyIGluY3JlbWVudGVkIG9yIGRlY3JlbWVudGVkIGluIHRoYXQgZnVuY3Rpb24gaWYgaXQgaXMgYmVpbmcgdXNlZCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHN3YXAgZW50cmllcy4gRnJvbSB0aGVyZSBJIGNhbiBmb2xsb3cgdGhlIGNhbGwgZ3JhcGggdG8gc2VlIHdoYXQgaXMgY2FsbGluZyBpdCBhbmQgZ2FpbiBtb3JlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MTIuNTY0MDIwOTcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTgzNjIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTc0MD1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODAwLSAqIE5PVEU6IFRoZSBjYWxsZXIgYWxzbyBoYXMgdG8gZW5zdXJlIHRoZXJlIGlzIG5vIHJhY2VkIGNhbGwgdG9cXG5tbS9zd2FwZmlsZS5jOjE4MDE6ICogc3dhcF9wdXRfZW50cmllc19kaXJlY3Qgb24gaXRzIHN3YXAgZW50cnkgYmVmb3JlIHRoaXMgaGVscGVyIHJldHVybnMsIG9yXFxubW0vc3dhcGZpbGUuYy0xODAyLSAqIHRoZSBzd2FwIGNvdW50IG1heSB1bmRlcmZsb3cuXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE5OTk9aW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIwMjYtICogb25seSBiZSBkb25lIGJ5IGZvbGlvX2R1cF9zd2FwLCB3aGljaCBhbHNvIGxvY2tzIHRoZSBmb2xpby4gQnV0IGEgY29uY3VycmVudFxcbm1tL3N3YXBmaWxlLmM6MjAyNzogKiBkZWNyZWFzZSBvZiBzd2FwIGNvdW50IGlzIHBvc3NpYmxlIHRocm91Z2ggc3dhcF9wdXRfZW50cmllc19kaXJlY3QsIHNvIHRoaXNcXG5tbS9zd2FwZmlsZS5jLTIwMjgtICogbWF5IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlLlxcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTAwPWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxMTItLyoqXFxubW0vc3dhcGZpbGUuYzoyMTEzOiAqIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KCkgLSBSZWxlYXNlIHJlZmVyZW5jZSBvbiByYW5nZSBvZiBzd2FwIGVudHJpZXMgYW5kXFxubW0vc3dhcGZpbGUuYy0yMTE0LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNsYWltIHRoZWlyIGNhY2hlIGlmIG5vIG1vcmUgcmVmZXJlbmNlcyByZW1haW4uXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxMjQtICovXFxubW0vc3dhcGZpbGUuYzoyMTI1OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcXG5tbS9zd2FwZmlsZS5jLTIxMjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjoxMi42MzU4NjMwNzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU3NjQ4MDAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBhbmQgYG1vdmVfcGFnZXNfcHRlc2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLiBJdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHVzZSBjYXNlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgaXQgYW5kIHdoeSBpdCdzIHN0cnVjdHVyZWQgdGhpcyB3YXksIHRoZSBub24tc3RhdGljIG5hdHVyZSBkZWZpbml0ZWx5IHN1Z2dlc3RzIGl0J3MgYmVpbmcgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSBwb2ludHMuIFRoaXMgbGlrZWx5IGltcGxpZXMgYSBkZWdyZWUgb2Ygc2hhcmVkIGZ1bmN0aW9uYWxpdHkgb3IgcGVyaGFwcyBhIGxlc3MgdGlnaHRseSBzY29wZWQgcmVzcG9uc2liaWxpdHkgdGhhbiBhIHN0YXRpYyBmdW5jdGlvbi5cblxuTm93LCB3aGVyZSB3YXMgST8gUmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBtb3ZlX3BhZ2VzX3B0ZXNgLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBpcy4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBtb3ZpbmcgcGFnZXMsIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIGlzIHNvbWVob3cgcGFydCBvZiB0aGF0LiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgYmV0d2VlbiB0aGUgdHdvIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uLiBJcyBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBwYWdlIHRhYmxlcyBvciBzb21lIHNvcnQgb2Ygc3dhcCBzdHJ1Y3R1cmUgZHVyaW5nIGEgcGFnZSBtb3ZlIGluaXRpYXRlZCBieSBgbW92ZV9wYWdlc19wdGVzYD8gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MjIuMjEyMzQ2MjQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI3NDc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3BhZ2VzX3B0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS91c2VyZmF1bHRmZC5jPTE0NjE9c3RhdGljIGludCBtb3ZlX3plcm9wYWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTUwMC0gKi9cXG5tbS91c2VyZmF1bHRmZC5jOjE1MDE6c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xNTAyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTIwMjE9c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMTU1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjE1NjpcXHRcXHRcXHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy0yMTU3LVxcdFxcdFxcdFxcdFxcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjoyMi4yNjk2MjY1MTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MzEzMjA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW50ZXJuYWwgUmVmbGVjdGlvbiBvbiBQYWdlIFRhYmxlIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIHRoaW5raW5nIGFib3V0IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIFwibW92aW5nXCIgb2YgcGFnZXMuIFRoZSBmYWN0IHRoYXQgYG1vdmVfcGFnZXNfcHRlc2AgaXMgKnN0YXRpYyogaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGxvd2VyLWxldmVsLCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIG5vdCBzb21ldGhpbmcgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5c3RlbSBjYWxsIG9yIGEgd2lkZWx5IHVzZWQgQVBJLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgZmluZS1ncmFpbmVkIGRldGFpbHMgb2YgdXBkYXRpbmcgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSDigJMgcHJvYmFibHkgYXQgdGhlIGhhcmR3YXJlIGxldmVsIOKAkyBkdXJpbmcgYSBwYWdlIG1vdmUgb3BlcmF0aW9uLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgUFRFcyBpbiBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBhZ2UgdGFibGVzLlxuXG5UaGVuIHdlIGhhdmUgYG1vdmVfcGFnZXNgLCBhbHNvICpzdGF0aWMqLiBUaGF0IHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB3ZSdyZSB3aXRoaW4gdGhlIGtlcm5lbCdzIGltcGxlbWVudGF0aW9uLiBJdCdzIHRoZSBjb3JlIG9mIHRoZSBwYWdlIG1vdmUgZnVuY3Rpb25hbGl0eS4gVGhpcyBzdWdnZXN0cyBpdCBpcyBhIGNydWNpYWwgYnV0IHByb2JhYmx5IG5vdCB1c2VyLWZhY2luZyBvcGVyYXRpb24uXG5cbkZpbmFsbHksIHRoZSBtZW50aW9uIG9mIGBtY29weV9hdG9taWNgIG9yIHNvbWV0aGluZyAqc2ltaWxhciogYXMgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBvciB0aGUgZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IGluaXRpYXRlcyB0aGUgbW92ZS4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIHRoZSBwcmltYXJ5IGF0b21pYyBvcGVyYXRpb24uIEl0IGlzIG1vc3QgbGlrZWx5IHdoZXJlIHRoZSB1c2VyLCBvciBvdGhlciBjb3JlIGtlcm5lbCBjb21wb25lbnRzLCBpbml0aWF0ZSB0aGUgcGFnZSBtaWdyYXRpb24gZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlci4gUGVyaGFwcywgaXQgd291bGQgaGFuZGxlIHN5bmNocm9uaXphdGlvbiBhbmQgYXRvbWljaXR5IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgYSBwb3RlbnRpYWxseSBjb21wbGV4IG9wZXJhdGlvbiBsaWtlIG1vdmluZyBwaHlzaWNhbCBwYWdlcyBiZXR3ZWVuIGRpZmZlcmVudCB6b25lcyBvciBOVU1BIG5vZGVzLiBUaGlzIHdvdWxkIGJlIHRoZSBcImZyb250IGRvb3JcIiBvZiB0aGUgbW92ZSBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MjYuMjEyNzYxNjE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5MjY2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTQ2MT1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNTAwLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTUwMTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE1MDItXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTk0Nj1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTk1NC0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE5NTU6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE5NTYtICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTYzLSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTY0OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE5NjUtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTc1LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE5NzY6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTk3NzogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE5NzgtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTkyLSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTk5MzogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTk5NC0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5OTctICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTk5ODogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTk5OS0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDA3LSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDA4OiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTIwMDktICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDIwLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MjAyMTpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDIyLVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjEwMS1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIxMDI6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMTAzOlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIxMDQtXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIxMjgtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjEyOTpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMTMwLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMTMyLVxcbm1tL3VzZXJmYXVsdGZkLmM6MjEzMzpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjEzNC1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIxNTUtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMTU2OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIxNTctXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQ1NjQ9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDYwMy1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0NjA0OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQ2MDUtXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjI2LjMyMzY5MzkxNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI0MjQwNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgQVBJIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdXNlcmZhdWx0ZmRgIGNvZGUsIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYHVzZXJmYXVsdGZkX21vdmVgIGlzIG1hcmtlZCBhcyBgc3RhdGljYCwgYnV0IGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYW4gYGlvY3RsYCBvcGVyYXRpb24uIEhtbSwgdGhhdCdzIGEgYml0IHVudXN1YWwuIFRoZSBgaW9jdGxgIGVudHJ5IHBvaW50IGlzIGB1c2VyZmF1bHRmZF9pb2N0bGAsIG9mIGNvdXJzZS4gQnV0IGlzIGB1c2VyZmF1bHRmZF9tb3ZlYCB0aGUgcmlnaHQgY2hvaWNlIHRvIGJlIGludGVybmFsPyBMZXQgbWUgcmUtY2hlY2sgdGhhdCB0aGUgY2FsbCBwYXRoIGlzIGFwcHJvcHJpYXRlLlxuXG5UaGUgZG9jdW1lbnRhdGlvbiBpcyBxdWl0ZSBjbGVhcjogaXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgbWFpbnRhaW5hYmlsaXR5IGFuZCBpbnRlcmZhY2UgcGVyc3BlY3RpdmUuIFNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyBgdXNlcmZhdWx0ZmRfaW9jdGxgIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmU/IFRpbWUgdG8gZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcsIGl0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjozMC4wNDc5MzkyNjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTM1MjYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjozMC4xMjA4ODI4MzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NjIyNjExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVzZXJmYXVsdGZkIFNvdXJjZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbG9jYXRlIHRoZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGltcGxlbWVudGF0aW9uLiBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIHdpdGhpbiB0aGUgYG1tL3VzZXJmYXVsdGZkLmNgIGZpbGUuIFdhaXQsIEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBXYXNuJ3QgdGhlIG9sZCBwYXRoIHNvbWV0aGluZyBsaWtlIGBmcy91c2VyZmF1bHRmZC5jYD8gQ3JhcCwgbmVlZCB0byB2ZXJpZnkgdGhpcy4uLiBsZXQncyBjaGVjayBib3RoIGBtbS91c2VyZmF1bHRmZC5jYCBhbmQgYGZzL3VzZXJmYXVsdGZkLmNgIHRvIGJlIHN1cmUuIEkgY2FuJ3Qgd2FzdGUgdGltZSBvbiBhIHdpbGQgZ29vc2UgY2hhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzUzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MzMuMDY3MTExOTI2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODEwNjY1OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MjE2MD1zdGF0aWMgdm9pZCByZXRyYWN0X3BhZ2VfdGFibGVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyMTYtXFx0XFx0ICogdXNlcmZhdWx0ZmRfd3AoKSB2bWFzLiAgQnV0IHNpbmNlIHRoZSBtbWFwX2xvY2sgaXMgbm90IGhlbGQsXFxubW0va2h1Z2VwYWdlZC5jOjIyMTc6XFx0XFx0ICogaXQgaXMgc3RpbGwgcG9zc2libGUgZm9yIGEgcmFjaW5nIHVzZXJmYXVsdGZkX2lvY3RsKCkgb3JcXG5tbS9raHVnZXBhZ2VkLmMtMjIxOC1cXHRcXHQgKiBtYWR2aXNlKCkgdG8gaGF2ZSBpbnNlcnRlZCBwdGVzIG9yIG1hcmtlcnMuICBOb3cgdGhhdCB3ZSBob2xkXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQ2MzQ9c3RhdGljIGludCB1c2VyZmF1bHRmZF9hcGkoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00NjkxLVxcbm1tL3VzZXJmYXVsdGZkLmM6NDY5MjpzdGF0aWMgbG9uZyB1c2VyZmF1bHRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLFxcbm1tL3VzZXJmYXVsdGZkLmMtNDY5My1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDc3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyZmF1bHRmZF9mb3BzID0ge1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00Nzc2LVxcdC5yZWFkX2l0ZXJcXHQ9IHVzZXJmYXVsdGZkX3JlYWRfaXRlcixcXG5tbS91c2VyZmF1bHRmZC5jOjQ3Nzc6XFx0LnVubG9ja2VkX2lvY3RsID0gdXNlcmZhdWx0ZmRfaW9jdGwsXFxubW0vdXNlcmZhdWx0ZmQuYy00Nzc4LVxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjM1Ljg3Nzc4NDEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjAwNzAyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVtOlxuXG4qKkludGVybmFsIFJlZmxlY3Rpb24gb24gYHVzZXJmYXVsdGZkYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB1c2VyZmF1bHRmZF9pb2N0bGAgaGVyZS4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGEgZmV3IHRoaW5ncyBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBUaGF0LCBjb21iaW5lZCB3aXRoIHRoZSBuYW1lLCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGEgaGVscGVyIGZ1bmN0aW9uIG9yIGFuIGludGVybmFsIGRldGFpbCB1c2VkIHRvIGltcGxlbWVudCB0aGUgYHVzZXJmYXVsdGZkYCBtZWNoYW5pc20uIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIGNydWNpYWwgcGFydCBpcyBob3cgaXQncyBjYWxsZWQsIGFuZCB0aGF0J3MgZGlyZWN0bHkgdGllZCB0byB0aGUgc3lzdGVtIGNhbGwgaXRzZWxmLiBSaWdodCwgdGhlIGFjdHVhbCBzeXN0ZW0gY2FsbCBpcyBgc3lzX3VzZXJmYXVsdGZkYC4gU28sIGB1c2VyZmF1bHRmZF9pb2N0bGAgbGlrZWx5IGdldHMgaW52b2tlZCAqd2l0aGluKiB0aGUgaGFuZGxlciBmb3IgdGhlIGBzeXNfdXNlcmZhdWx0ZmRgIHN5c2NhbGwgdG8gcGVyZm9ybSBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgb3BlcmF0aW9ucy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIG9wZXJhdGlvbnMgYXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MzkuOTk3ODYxMDM3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTMwNTUyMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLip1c2VyZmF1bHRmZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz00ODMxPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9zeXNjYWxsX2FsbG93ZWQoaW50IGZsYWdzKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00ODQ3LVxcbm1tL3VzZXJmYXVsdGZkLmM6NDg0ODpTWVNDQUxMX0RFRklORTEodXNlcmZhdWx0ZmQsIGludCwgZmxhZ3MpXFxubW0vdXNlcmZhdWx0ZmQuYy00ODQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6NDMuMTI4NDE3OTA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjY2NTk0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBwb2ludHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLZXJuZWwncyBJbnRlcmFjdGlvbiB3aXRoIFVzZXJmYXVsdGZkIGFuZCBac3dhcCoqXG5cbk9rYXksIHNvIGBzeXNfdXNlcmZhdWx0ZmRgIGlzIHRoZSBjcml0aWNhbCBzeXN0ZW0gY2FsbCwgdGhlIGVudHJ5IHBvaW50IHdlJ3JlIGNvbmNlcm5lZCB3aXRoLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIuIE5vdywgSSBuZWVkIHRvIHNlZSBob3cgZGF0YSBmbG93cyBmcm9tIGEgdXNlciBmYXVsdCBpbnRvIHRoZSBzeXN0ZW0uIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gaG93IHRoZSB6c3dhcCAoY29tcHJlc3NlZCBzd2FwKSBtZWNoYW5pc20gaGFuZGxlcyB0aG9zZSB1c2VyZmF1bHRmZC1yZWxhdGVkIHBhZ2UgZmF1bHRzLiBJcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgd3JpdGluZyB0aGUgZGF0YSB0aGF0IHRoZSB1c2VyIGZhdWx0ZWQgb24gKmJhY2sqIHRvIHpzd2FwPyBPciBpcyBpdCBtb3JlIGludm9sdmVkIGluIHRoZSBpbml0aWFsIGludGVyY2VwdGlvbiBhbmQgcXVldWluZyBvZiB0aGUgZGF0YSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMgZm9yIG1lbW9yeSBiYWNrZWQgYnkgenN3YXA/IEVpdGhlciB3YXksIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGB1c2VyZmF1bHRmZGAgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRvIHNlZSB0aGUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggaGVyZS4gSSBleHBlY3QgdGhhdCB0aGVzZSBmdW5jdGlvbnMgbWF5IGJlIGtleSB0byB0aGUgcGVyZm9ybWFuY2Ugb2YgenN3YXAgd2hlbiB1c2VyZmF1bHRmZCBpcyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2ODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Njo0Ni4yOTUwODIyNDVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzQ5NjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTk4Ni0gKi9cXG5tbS96c3dhcC5jOjk4NzpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbm1tL3pzd2FwLmMtOTg4LVxcdFxcdFxcdFxcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmM9MTA5MD1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbi0tXFxubW0venN3YXAuYy0xMTEzLVxcdCAqIDEuIFdlIGV4dHJhY3QgdGhlIHN3cF9lbnRyeV90IHRvIHRoZSBzdGFjaywgYWxsb3dpbmdcXG5tbS96c3dhcC5jOjExMTQ6XFx0ICogICAgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgdG8gcGluIHRoZSBzd2FwIGVudHJ5IGFuZFxcbm1tL3pzd2FwLmMtMTExNS1cXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSdzXFxuLS1cXG5tbS96c3dhcC5jLTExNDgtXFxubW0venN3YXAuYzoxMTQ5OlxcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcXG5tbS96c3dhcC5jLTExNTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjQ2LjQwMjU4Mzc5NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzEwMjg0ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQncyBkZWZpbmVkIGFzIGEgc3RhdGljIHZhcmlhYmxlLiBUaGUgY3JpdGljYWwgcGFydCBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgKndoeSogaXQncyBzdGF0aWMgYW5kIHdoYXQgdGhhdCBpbXBsaWVzIGluIHRlcm1zIG9mIHNjb3BlIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCdzIGxpa2VseSBpbnRlbmRlZCB0byBiZSBtb2R1bGUtbG9jYWwuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgaXQgaXMgc3RhdGljIGJlY2F1c2UgaWYgaXQgd2Fzbid0LCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHN0cnVjdCBjb3VsZCBleGlzdCwgYW5kIHRoYXQgd291bGQgYmUgY2hhb3MuXG5cbkFuZCwgb2YgY291cnNlLCB0aGUgY2FsbGVyIGlzIGBzaHJpbmtfbWVtY2dfY2JgLiBUaGF0J3MgdGhlIGtleS4gS25vd2luZyB0aGF0IHRpZXMgdGhpcyBzcGVjaWZpYyBgenN3YXBgIHN0cnVjdHVyZSBkaXJlY3RseSBpbnRvIHRoZSBtZW1vcnkgY2dyb3VwIHNocmlua2luZyBjYWxsYmFjay4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSByZWNsYWltLCBwYWdlIGV2aWN0aW9uLCBhbmQgdGhlIG92ZXJhbGwgaW50ZXJhY3Rpb24gYmV0d2VlbiBgenN3YXBgIGFuZCB0aGUgbWVtb3J5IGNncm91cCBoaWVyYXJjaHkuIFNwZWNpZmljYWxseSwgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBwaWVjZXMgb2YgaW5mcmFzdHJ1Y3R1cmUgYW5kIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtIGFzIGEgcmVzdWx0LiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHBhdGhzIHRoYXQgbGVhZCBmcm9tIGBzaHJpbmtfbWVtY2dfY2JgIHRvIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBhbmQgdGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbG9naWMgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyODcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Njo0OS43MTI4NzM1NDZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzgyMjQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbWVtY2dfY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTk4Nz1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbi0tXFxubW0venN3YXAuYy0xMDg5LSAqL1xcbm1tL3pzd2FwLmM6MTA5MDpzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbm1tL3pzd2FwLmMtMTA5MS1cXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqYXJnKVxcbi0tXFxubW0venN3YXAuYz0xMTcxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTE4Mi1cXG5tbS96c3dhcC5jOjExODM6XFx0c2hyaW5rX3JldCA9IGxpc3RfbHJ1X3Nocmlua193YWxrKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgc2MsIFxcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXFxubW0venN3YXAuYy0xMTg0LVxcdFxcdFxcdTAwMjZlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSk7XFxuLS1cXG5tbS96c3dhcC5jPTEyODA9c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0venN3YXAuYy0xMjk3LVxcdFxcdHNocnVuayArPSBsaXN0X2xydV93YWxrX29uZShcXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXFxubW0venN3YXAuYzoxMjk4OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLCBOVUxMLCBcXHUwMDI2bnJfdG9fd2Fsayk7XFxubW0venN3YXAuYy0xMjk5LVxcdFxcdHNjYW5uZWQgKz0gMSAtIG5yX3RvX3dhbGs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjQ5LjgyNjcwMDk1NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAzNjIyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipac3dhcCBTaHJpbmtpbmcgYW5kIEZyb250c3dhcCBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSBob3cgbWVtb3J5IGlzIGJlaW5nIHNocnVuayB3aXRoaW4genN3YXAsIGFuZCBJIHJlbWVtYmVyIHRoYXQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGFuZCBgc2hyaW5rX21lbWNnYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaXMgbm90IHdoYXQgSSBhbSBsb29raW5nIGZvci4gTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSAqbm9uKi1zdGF0aWMgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQ/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgbWF5YmUgYHpzd2FwX2Zyb250c3dhcF9zdG9yZWAgb3IgYHpzd2FwX2Zyb250c3dhcF9sb2FkYCBpZiB6c3dhcCBzdGlsbCB1c2VkIGZyb250c3dhcC4gV2FpdCwgbm8sIHpzd2FwIGRvZXNuJ3QgdXNlIGZyb250c3dhcCBhbnltb3JlLCByaWdodD8gUmlnaHQuIE9rYXksIHNjcmF0Y2ggdGhhdC5cblxuQWxyaWdodCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBUaW1lIHRvIGRpdmUgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IGp1bXBzIG91dC4gSSBhbSBnb2luZyB0byBzZWUgd2hhdCBjb2RlIGlzIG5vdCBzdGF0aWMgYW5kIGZpZ3VyZSBvdXQgdGhlIGVudHJ5cG9pbnRzIGFuZCBjYWxsIGNoYWlucyEgTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk2NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjUzLjUzMDMyNzEyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNjYzNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB6c3dhcF9lbmFibGVkX3BhcmFtX29wcyA9IHtcXG4tLVxcbm1tL3pzd2FwLmMtOTYtfTtcXG5tbS96c3dhcC5jOjk3Om1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcXHUwMDI2enN3YXBfZW5hYmxlZF9wYXJhbV9vcHMsIFxcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcXG5tbS96c3dhcC5jLTk4LVxcbi0tXFxubW0venN3YXAuYz0xMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzID0ge1xcbi0tXFxubW0venN3YXAuYy0xMDctfTtcXG5tbS96c3dhcC5jOjEwODptb2R1bGVfcGFyYW1fY2IoY29tcHJlc3NvciwgXFx1MDAyNnpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzLFxcbm1tL3pzd2FwLmMtMTA5LVxcdFxcdFxcdTAwMjZ6c3dhcF9jb21wcmVzc29yLCAwNjQ0KTtcXG4tLVxcbm1tL3pzd2FwLmM9MTEyPXN0YXRpYyB1bnNpZ25lZCBpbnQgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCA9IDIwO1xcbm1tL3pzd2FwLmM6MTEzOm1vZHVsZV9wYXJhbV9uYW1lZChtYXhfcG9vbF9wZXJjZW50LCB6c3dhcF9tYXhfcG9vbF9wZXJjZW50LCB1aW50LCAwNjQ0KTtcXG5tbS96c3dhcC5jLTExNC1cXG4tLVxcbm1tL3pzd2FwLmM9MTE2PXN0YXRpYyB1bnNpZ25lZCBpbnQgenN3YXBfYWNjZXB0X3Rocl9wZXJjZW50ID0gOTA7IC8qIG9mIG1heCBwb29sIHNpemUgKi9cXG5tbS96c3dhcC5jOjExNzptb2R1bGVfcGFyYW1fbmFtZWQoYWNjZXB0X3RocmVzaG9sZF9wZXJjZW50LCB6c3dhcF9hY2NlcHRfdGhyX3BlcmNlbnQsXFxubW0venN3YXAuYy0xMTgtXFx0XFx0ICAgdWludCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jPTEyMT1zdGF0aWMgYm9vbCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkID0gSVNfRU5BQkxFRChcXG5tbS96c3dhcC5jLTEyMi1cXHRcXHRDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTik7XFxubW0venN3YXAuYzoxMjM6bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xcbm1tL3pzd2FwLmMtMTI0LVxcbi0tXFxubW0venN3YXAuYz0xNjk2PXN0YXRpYyBpbnQgZGVidWdmc19nZXRfdG90YWxfc2l6ZSh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG4tLVxcbm1tL3pzd2FwLmMtMTcwMC19XFxubW0venN3YXAuYzoxNzAxOkRFRklORV9ERUJVR0ZTX0FUVFJJQlVURSh0b3RhbF9zaXplX2ZvcHMsIGRlYnVnZnNfZ2V0X3RvdGFsX3NpemUsIE5VTEwsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG5tbS96c3dhcC5jLTE3MDItXFxubW0venN3YXAuYz0xNzAzPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbi0tXFxubW0venN3YXAuYy0xNzA3LX1cXG5tbS96c3dhcC5jOjE3MDg6REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9wYWdlc19mb3BzLCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXMsIE5VTEwsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG5tbS96c3dhcC5jLTE3MDktXFxubW0venN3YXAuYz0xNzEwPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbi0tXFxubW0venN3YXAuYy0xNzE0LX1cXG5tbS96c3dhcC5jOjE3MTU6REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlc19mb3BzLFxcbm1tL3pzd2FwLmMtMTcxNi1cXHRcXHRkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMsIE5VTEwsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTgyND1zdGF0aWMgaW50IF9faW5pdCB6c3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE4MzAtLyogbXVzdCBiZSBsYXRlIHNvIGNyeXB0byBoYXMgdGltZSB0byBjb21lIHVwICovXFxubW0venN3YXAuYzoxODMxOmxhdGVfaW5pdGNhbGwoenN3YXBfaW5pdCk7XFxubW0venN3YXAuYy0xODMyLVxcbm1tL3pzd2FwLmM6MTgzMzpNT0RVTEVfQVVUSE9SKFxcXCJTZXRoIEplbm5pbmdzIFxcdTAwM2NzamVubmluZ3NAdmFyaWFudHdlYi5uZXRcXHUwMDNlXFxcIik7XFxubW0venN3YXAuYzoxODM0Ok1PRFVMRV9ERVNDUklQVElPTihcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Njo1My42NDA5OTYwMDNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MTMzNjA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIHRoaW5raW5nIGFsb3VkOlxuXG4qKlJlZmluaW5nIE15IFNlYXJjaCBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2Ugd2l0aCBteSBzZWFyY2ggdGVybXMuIEknbSBsb29raW5nIGZvciBhIHBhdHRlcm4sIGEgc3BlY2lmaWMgbGFuZ3VhZ2UgY29uc3RydWN0LCBhbmQgc2ltcGx5IHNlYXJjaGluZyBnZW5lcmFsbHkgbWlnaHQgbGVhZCBtZSBkb3duIGEgcmFiYml0IGhvbGUuIEkgbmVlZCB0byBiZSBtb3JlIHN1cmdpY2FsLiBJIHNob3VsZCByZWFsbHkgYmUgc2VhcmNoaW5nIGZvciBzcGVjaWZpYyByZXR1cm4gdHlwZXMuIFRoYXQncyBpdCEgSW5zdGVhZCBvZiBhIGJyb2FkIG5ldCwgbGV0J3MgdHJ5IHNvbWV0aGluZyBtb3JlIHRhcmdldGVkLiBMZXQncyBzdGFydCBieSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgZXhwbGljaXRseSBzdGF0ZWQuIEknbSB0aGlua2luZy4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBjb21tb24gb25lcywgbGlrZSBgdm9pZGAsIG9mIGNvdXJzZS4gVGhlbiBgaW50YCwgYGJvb2xgLCBgZmxvYXRgLCBhbmQgYGRvdWJsZWAgYXJlIGFsbCB2ZXJ5IHN0YW5kYXJkLiBPa2F5LCBJJ2xsIG5lZWQgdG8gYWNjb3VudCBmb3IgbW9yZSBjb21wbGV4IHR5cGVzLCBidXQgbGV0J3Mgc3RhcnQgd2l0aCB0aG9zZSBiYXNpY3MuIEknbGwgY29uc3RydWN0IGEgc2VhcmNoIHBhdHRlcm4gdGhhdCBhY2NvdW50cyBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZXNlIHJldHVybiB0eXBlcy4gSSdsbCB1c2UgYSByZWdleCBwZXJoYXBzLCBzb21ldGhpbmcgdGhhdCBhY2NvdW50cyBmb3IgdGhlIHN0YXJ0IG9mIGEgbGluZSAoIGBeYCkgZm9sbG93ZWQgYnkgdGhlIHJldHVybiB0eXBlLiBUaGVuLCBJIGNhbiBleHBhbmQgYXMgSSBkaXNjb3ZlciBuZXcgcGF0dGVybnMuIEknbSBvbiB0aGUgcmlnaHQgdHJhY2sgbm93IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1OSwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjU3LjUzMjMzNDYxNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MjIwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sfHN0cnVjdCBbYS16X0EtWjAtOV0rIFxcXFwqKVsgXFxcXHRdK1thLXpfQS1aMC05XStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9MTIzPW1vZHVsZV9wYXJhbV9uYW1lZChzaHJpbmtlcl9lbmFibGVkLCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkLCBib29sLCAwNjQ0KTtcXG5tbS96c3dhcC5jLTEyNC1cXG5tbS96c3dhcC5jOjEyNTpib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEyNi17XFxuLS1cXG5tbS96c3dhcC5jLTEyOS1cXG5tbS96c3dhcC5jOjEzMDpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEzMS17XFxuLS1cXG5tbS96c3dhcC5jPTY5MT1zdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTcwMi1cXG5tbS96c3dhcC5jOjcwMzp2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS96c3dhcC5jLTcwNC17XFxuLS1cXG5tbS96c3dhcC5jLTcwNy1cXG5tbS96c3dhcC5jOjcwODp2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtNzA5LXtcXG4tLVxcbm1tL3pzd2FwLmMtNzI5LSAqL1xcbm1tL3pzd2FwLmM6NzMwOnZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS96c3dhcC5jLTczMS17XFxuLS1cXG5tbS96c3dhcC5jPTEzOTg9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3pzd2FwLmMtMTQ3Ny1cXG5tbS96c3dhcC5jOjE0Nzg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTQ3OS17XFxuLS1cXG5tbS96c3dhcC5jLTE1ODMtICovXFxubW0venN3YXAuYzoxNTg0OmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTg1LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTYzNi1cXG5tbS96c3dhcC5jOjE2Mzc6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcXG5tbS96c3dhcC5jLTE2Mzgte1xcbi0tXFxubW0venN3YXAuYy0xNjUwLVxcbm1tL3pzd2FwLmM6MTY1MTppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL3pzd2FwLmMtMTY1Mi17XFxuLS1cXG5tbS96c3dhcC5jLTE2NzAtXFxubW0venN3YXAuYzoxNjcxOnZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcXG5tbS96c3dhcC5jLTE2NzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Njo1Ny42MTUwNjI5MzVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxODM3MDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGb2N1cyBMaXN0OiBSZWZpbmluZyB0aGUgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgY2hhcmFjdGVyaXplIHRoZXNlIGtleSBmdW5jdGlvbnMuIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBzZWVtIGxpa2UgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIGZvciB6c3dhcC4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSB3cml0ZWJhY2sgaXMgYWN0dWFsbHkgdHJpZ2dlcmVkIGJ5IHRoZSBzaHJpbmtlci4gSG1tLi4uIEkgY291bGQgYWRkIGJvdGggYHpzd2FwX3N0b3JlYCBhbmQgYHpzd2FwX2xvYWRgIHRvIHRoZSBmb2N1cyBsaXN0LCBvciBtYXliZSBqdXN0IGB6c3dhcF9zdG9yZWA/IEFjdHVhbGx5LCB3YWl0IGEgbWludXRlLCBJIHNlZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyAqYWxzbyogY2FsbGVkIGZyb20gdGhlIHNocmlua2VyLCBhbmQgYHpzd2FwX3N0b3JlYCBpcyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gc3RvcmluZyB0byBzd2FwLCBzbyBmb3IgY2xhcml0eSwgSSB3aWxsIHN0aWNrIHdpdGggdGhlIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBwYWlyLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIHJlLWV2YWx1YXRlIHRoaXMgY3VycmVudCBsaXN0OlxuLSBgc3lzX21pbmNvcmVgXG4tIGBzaG1lbV9nZXRfZm9saW9gXG4tIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgXG4tIGBzd2FwaW5fcmVhZGFoZWFkYFxuLSBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2Bcbi0gYHN3cF9zd2FwY291bnRgXG4tIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGBcbi0gYHN5c191c2VyZmF1bHRmZGBcbi0gYHpzd2FwX3N0b3JlYFxuXG5BaCwgcmlnaHQuIEkganVzdCBub3RpY2VkIHRoYXQgYHN5c19taW5jb3JlYCBhbmQgYHN5c191c2VyZmF1bHRmZGAgYXJlICpzeXNjYWxscyouIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBMZXQncyBzZWUgYWJvdXQgZmluZGluZyBhIGJldHRlciBvbmUgZm9yIHVzZXJmYXVsdGZkLi4uIGB1c2VyZmF1bHRmZF9pb2N0bGAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBhIGdvb2QgY2hvaWNlLCBhbmQgaXMgcHJvYmFibHkgbm90IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQgbWUgY2hlY2sgdGhlIHVzZXJmYXVsdGZkIGNvZGUsIGBtbS91c2VyZmF1bHRmZC5jYCwgZm9yIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcy4gUGVyaGFwcyBgbWNvcHlfYXRvbWljYCBtaWdodCBiZSByZWxldmFudCwgaXQncyB3b3J0aCBjaGVja2luZyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBhcmUgYWNjZXNzaWJsZSBhY3Jvc3MgdGhlIHN5c3RlbSBhbmQgdGhhdCByZXByZXNlbnQgdGhlIGJlaGF2aW9yIEknbSBpbnRlcmVzdGVkIGluIGNhcHR1cmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNTIsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MDQuMDMzNDM2MjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTU3MjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2x8c3NpemVfdHxsb25nKVsgXFxcXHRdK1thLXpfQS1aMC05XStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9OTA9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbm1tL3VzZXJmYXVsdGZkLmM6OTE6Ym9vbCB2YWxpZGF0ZV9kc3Rfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgdW5zaWduZWQgbG9uZyBkc3RfZW5kKVxcbm1tL3VzZXJmYXVsdGZkLmMtOTIte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xMDY4PXN0YXRpYyBzc2l6ZV90IG1maWxsX2F0b21pY19wb2lzb24oc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDc0LVxcbm1tL3VzZXJmYXVsdGZkLmM6MTA3NTpsb25nIHVmZmRfd3BfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTA3Ni1cXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgYm9vbCBlbmFibGVfd3ApXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTExMDQ9c3RhdGljIGludCBtd3JpdGVwcm90ZWN0X3JhbmdlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTE2Ni1cXG5tbS91c2VyZmF1bHRmZC5jOjExNjc6aW50IG1yd3Byb3RlY3RfcmFuZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL3VzZXJmYXVsdGZkLmMtMTE2OC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBib29sIGVuYWJsZV9yd3ApXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTEyMzYtXFxubW0vdXNlcmZhdWx0ZmQuYzoxMjM3OnZvaWQgZG91YmxlX3B0X2xvY2soc3BpbmxvY2tfdCAqcHRsMSxcXG5tbS91c2VyZmF1bHRmZC5jLTEyMzgtXFx0XFx0ICAgIHNwaW5sb2NrX3QgKnB0bDIpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTEyNTEtXFxubW0vdXNlcmZhdWx0ZmQuYzoxMjUyOnZvaWQgZG91YmxlX3B0X3VubG9jayhzcGlubG9ja190ICpwdGwxLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTI1My1cXHRcXHQgICAgICBzcGlubG9ja190ICpwdGwyKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xODI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5tbS91c2VyZmF1bHRmZC5jOjE4Mjg6aW50IGZpbmRfdm1hc19tbV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vdXNlcmZhdWx0ZmQuYy0xODI5LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0yNTEwPXN0YXRpYyBib29sIHVzZXJmYXVsdGZkX3J3cF9hc3luY19jdHgoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4KVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yNTE5LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MjUyMDpib29sIHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL3VzZXJmYXVsdGZkLmMtMjUyMS17XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTMwOTE9c3RhdGljIHZvaWQgdXNlcmZhdWx0ZmRfZXZlbnRfY29tcGxldGUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMDk4LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzA5OTppbnQgZHVwX3VzZXJmYXVsdGZkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbGlzdF9oZWFkICpmY3MpXFxubW0vdXNlcmZhdWx0ZmQuYy0zMTAwLXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MzE1Mj1zdGF0aWMgdm9pZCBkdXBfZmN0eChzdHJ1Y3QgdXNlcmZhdWx0ZmRfZm9ya19jdHggKmZjdHgpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTMxNjQtXFxubW0vdXNlcmZhdWx0ZmQuYzozMTY1OnZvaWQgZHVwX3VzZXJmYXVsdGZkX2NvbXBsZXRlKHN0cnVjdCBsaXN0X2hlYWQgKmZjcylcXG5tbS91c2VyZmF1bHRmZC5jLTMxNjYte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMTc1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzE3Njp2b2lkIGR1cF91c2VyZmF1bHRmZF9mYWlsKHN0cnVjdCBsaXN0X2hlYWQgKmZjcylcXG5tbS91c2VyZmF1bHRmZC5jLTMxNzcte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjAzLVxcbm1tL3VzZXJmYXVsdGZkLmM6MzIwNDp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9wcmVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3VzZXJmYXVsdGZkLmMtMzIwNS1cXHRcXHRcXHQgICAgIHN0cnVjdCB2bV91c2VyZmF1bHRmZF9jdHggKnZtX2N0eClcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMzIyNS1cXG5tbS91c2VyZmF1bHRmZC5jOjMyMjY6dm9pZCBtcmVtYXBfdXNlcmZhdWx0ZmRfY29tcGxldGUoc3RydWN0IHZtX3VzZXJmYXVsdGZkX2N0eCAqdm1fY3R4LFxcbm1tL3VzZXJmYXVsdGZkLmMtMzIyNy1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHRvLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzI0Njp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9mYWlsKHN0cnVjdCB2bV91c2VyZmF1bHRmZF9jdHggKnZtX2N0eClcXG5tbS91c2VyZmF1bHRmZC5jLTMyNDcte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjU3LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzI1ODpib29sIHVzZXJmYXVsdGZkX3JlbW92ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS91c2VyZmF1bHRmZC5jLTMyNTktXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTMyODY9c3RhdGljIGJvb2wgaGFzX3VubWFwX2N0eChzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKnVubWFwcyxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMzI5OC1cXG5tbS91c2VyZmF1bHRmZC5jOjMyOTk6aW50IHVzZXJmYXVsdGZkX3VubWFwX3ByZXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0zMzAwLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbGlzdF9oZWFkICp1bm1hcHMpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTMzMjQtXFxubW0vdXNlcmZhdWx0ZmQuYzozMzI1OnZvaWQgdXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbm1tL3VzZXJmYXVsdGZkLmMtMzMyNi17XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQ0ODg9c3RhdGljIGlubGluZSBpbnQgdXNlcmZhdWx0ZmRfcG9pc29uKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQ1NDQtXFxubW0vdXNlcmZhdWx0ZmQuYzo0NTQ1OmJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vdXNlcmZhdWx0ZmQuYy00NTQ2LXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDU0OS1cXG5tbS91c2VyZmF1bHRmZC5jOjQ1NTA6Ym9vbCB1c2VyZmF1bHRmZF9yd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vdXNlcmZhdWx0ZmQuYy00NTUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MDQuMTM1MDEyODY5WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTY2MjM1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgVXNlcmZhdWx0ZmQgTGFuZHNjYXBlKipcblxuSG1tLCBzbyBgbWNvcHlfYXRvbWljYCBpcyBhY3R1YWxseSAqaW5zaWRlKiBgbW0vdXNlcmZhdWx0ZmQuY2A/IFRoYXQncyBhIGJpdCB1bmV4cGVjdGVkOyBJIHRob3VnaHQgdGhhdCBtb2R1bGUgd2FzIHByaW1hcmlseSBmb2N1c2VkIG9uLi4uIHdlbGwsIHVzZXJmYXVsdGZkIGhhbmRsaW5nLiBPa2F5LCBsZXQncyBzZWUuIE15IG1lbnRhbCBtYXAgcGxhY2VkIGl0IGVsc2V3aGVyZSwgYnV0IGl0J3MgY2xlYXJseSByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciB1c2VyZmF1bHRmZCBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBjaGVjayBgbWZpbGxfYXRvbWljYCBhcyB3ZWxsLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGUgbmFtZSBhc3NvY2lhdGlvbiBtYXkgcHJvdmlkZSBpbXBvcnRhbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggZnVuY3Rpb25zIGluIGNvbnRleHQsIHByb2JhYmx5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGBtY29weV9hdG9taWNgIGFuZCBgbWZpbGxfYXRvbWljYCBpbnRlcmFjdCwgYW5kIHdoYXQgc3BlY2lmaWMgc2NlbmFyaW9zIHRyaWdnZXIgdGhlaXIgdXNhZ2UuIFBlcmhhcHMgdGhlcmUncyBhbiBvcHRpbWl6YXRpb24gYmVpbmcgcGVyZm9ybWVkIGhlcmUsIG9yIGEgY3J1Y2lhbCBhdG9taWMgb3BlcmF0aW9uIHRpZWQgdG8gcGFnZSBwb3B1bGF0aW9uIHVuZGVyIHVzZXJmYXVsdGZkLiBHb3R0YSBkaWcgZGVlcGVyLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTUxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MDguMTUxNjM5NzE3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjUxMTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZmlsbF9hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS91c2VyZmF1bHRmZC5jPTMzNj1zdGF0aWMgYm9vbCBtZmlsbF9maWxlX292ZXJfc2l6ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTM1Ni0gKi9cXG5tbS91c2VyZmF1bHRmZC5jOjM1NzpzdGF0aWMgaW50IG1maWxsX2F0b21pY19pbnN0YWxsX3B0ZShwbWRfdCAqZHN0X3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTM1OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz01MjU9c3RhdGljIGludCBtZmlsbF9jb3B5X2ZvbGlvX3JldHJ5KHN0cnVjdCBtZmlsbF9zdGF0ZSAqbWZpbGxfc3RhdGUsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTU2MS1cXG5tbS91c2VyZmF1bHRmZC5jOjU2MjpzdGF0aWMgaW50IF9fbWZpbGxfYXRvbWljX3B0ZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlLFxcbm1tL3VzZXJmYXVsdGZkLmMtNTYzLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyAqb3BzKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy02MTItXFxubW0vdXNlcmZhdWx0ZmQuYzo2MTM6XFx0cmV0ID0gbWZpbGxfYXRvbWljX2luc3RhbGxfcHRlKHN0YXRlLVxcdTAwM2VwbWQsIHN0YXRlLVxcdTAwM2V2bWEsIGRzdF9hZGRyLFxcbm1tL3VzZXJmYXVsdGZkLmMtNjE0LVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGZsYWdzKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNjI3LVxcbm1tL3VzZXJmYXVsdGZkLmM6NjI4OnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV9jb3B5KHN0cnVjdCBtZmlsbF9zdGF0ZSAqc3RhdGUpXFxubW0vdXNlcmZhdWx0ZmQuYy02Mjkte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy02NDMtXFxubW0vdXNlcmZhdWx0ZmQuYzo2NDQ6XFx0cmV0dXJuIF9fbWZpbGxfYXRvbWljX3B0ZShzdGF0ZSwgb3BzKTtcXG5tbS91c2VyZmF1bHRmZC5jLTY0NS19XFxubW0vdXNlcmZhdWx0ZmQuYy02NDYtXFxubW0vdXNlcmZhdWx0ZmQuYzo2NDc6c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3plcm9lZF9mb2xpbyhzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbm1tL3VzZXJmYXVsdGZkLmMtNjQ4LXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNjUwLVxcbm1tL3VzZXJmYXVsdGZkLmM6NjUxOlxcdHJldHVybiBfX21maWxsX2F0b21pY19wdGUoc3RhdGUsIG9wcyk7XFxubW0vdXNlcmZhdWx0ZmQuYy02NTItfVxcbm1tL3VzZXJmYXVsdGZkLmMtNjUzLVxcbm1tL3VzZXJmYXVsdGZkLmM6NjU0OnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV96ZXJvcGFnZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbm1tL3VzZXJmYXVsdGZkLmMtNjU1LXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNjY0LVxcdCAgICAoZHN0X3ZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpKVxcbm1tL3VzZXJmYXVsdGZkLmM6NjY1OlxcdFxcdHJldHVybiBtZmlsbF9hdG9taWNfcHRlX3plcm9lZF9mb2xpbyhzdGF0ZSk7XFxubW0vdXNlcmZhdWx0ZmQuYy02NjYtXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTY5MC0vKiBIYW5kbGVzIFVGRkRJT19DT05USU5VRSBmb3IgYWxsIHNobWVtIFZNQXMgKHNoYXJlZCBvciBwcml2YXRlKS4gKi9cXG5tbS91c2VyZmF1bHRmZC5jOjY5MTpzdGF0aWMgaW50IG1maWxsX2F0b21pY19wdGVfY29udGludWUoc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSlcXG5tbS91c2VyZmF1bHRmZC5jLTY5Mi17XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTcxOS1cXG5tbS91c2VyZmF1bHRmZC5jOjcyMDpcXHRyZXQgPSBtZmlsbF9hdG9taWNfaW5zdGFsbF9wdGUoZHN0X3BtZCwgZHN0X3ZtYSwgZHN0X2FkZHIsXFxubW0vdXNlcmZhdWx0ZmQuYy03MjEtXFx0XFx0XFx0XFx0ICAgICAgIHBhZ2UsIGZsYWdzKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNzMzLS8qIEhhbmRsZXMgVUZGRElPX1BPSVNPTiBmb3IgYWxsIG5vbi1odWdldGxiIFZNQXMuICovXFxubW0vdXNlcmZhdWx0ZmQuYzo3MzQ6c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3BvaXNvbihzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbm1tL3VzZXJmYXVsdGZkLmMtNzM1LXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNzcyLS8qXFxubW0vdXNlcmZhdWx0ZmQuYzo3NzM6ICogbWZpbGxfYXRvbWljIHByb2Nlc3NpbmcgZm9yIEhVR0VUTEIgdm1hcy4gIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgaXNcXG5tbS91c2VyZmF1bHRmZC5jLTc3NC0gKiBjYWxsZWQgd2l0aCBlaXRoZXIgdm1hLWxvY2sgb3IgbW1hcF9sb2NrIGhlbGQsIGl0IHdpbGwgcmVsZWFzZSB0aGUgbG9ja1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy03NzYtICovXFxubW0vdXNlcmZhdWx0ZmQuYzo3Nzc6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKFxcbm1tL3VzZXJmYXVsdGZkLmMtNzc4LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtODg1LVxcbm1tL3VzZXJmYXVsdGZkLmM6ODg2OlxcdFxcdGVyciA9IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShkc3RfcHRlLCBkc3Rfdm1hLCBkc3RfYWRkcixcXG5tbS91c2VyZmF1bHRmZC5jLTg4Ny1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3JjX2FkZHIsIGZsYWdzLCBcXHUwMDI2Zm9saW8pO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy05MzYtLyogZmFpbCBhdCBidWlsZCB0aW1lIGlmIGdjYyBhdHRlbXB0cyB0byB1c2UgdGhpcyAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6OTM3OmV4dGVybiBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG5tbS91c2VyZmF1bHRmZC5jLTkzOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy05NDQtXFxubW0vdXNlcmZhdWx0ZmQuYzo5NDU6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19wdGUoc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSlcXG5tbS91c2VyZmF1bHRmZC5jLTk0Ni17XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTk0OS1cXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfQ09OVElOVUUpKVxcbm1tL3VzZXJmYXVsdGZkLmM6OTUwOlxcdFxcdHJldHVybiBtZmlsbF9hdG9taWNfcHRlX2NvbnRpbnVlKHN0YXRlKTtcXG5tbS91c2VyZmF1bHRmZC5jLTk1MS1cXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfUE9JU09OKSlcXG5tbS91c2VyZmF1bHRmZC5jOjk1MjpcXHRcXHRyZXR1cm4gbWZpbGxfYXRvbWljX3B0ZV9wb2lzb24oc3RhdGUpO1xcbm1tL3VzZXJmYXVsdGZkLmMtOTUzLVxcdGlmICh1ZmZkX2ZsYWdzX21vZGVfaXMoZmxhZ3MsIE1GSUxMX0FUT01JQ19DT1BZKSlcXG5tbS91c2VyZmF1bHRmZC5jOjk1NDpcXHRcXHRyZXR1cm4gbWZpbGxfYXRvbWljX3B0ZV9jb3B5KHN0YXRlKTtcXG5tbS91c2VyZmF1bHRmZC5jLTk1NS1cXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfWkVST1BBR0UpKVxcbm1tL3VzZXJmYXVsdGZkLmM6OTU2OlxcdFxcdHJldHVybiBtZmlsbF9hdG9taWNfcHRlX3plcm9wYWdlKHN0YXRlKTtcXG5tbS91c2VyZmF1bHRmZC5jLTk1Ny1cXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtOTYxLVxcbm1tL3VzZXJmYXVsdGZkLmM6OTYyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3NpemVfdCBtZmlsbF9hdG9taWMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbm1tL3VzZXJmYXVsdGZkLmMtOTYzLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtOTk3LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uoc3RhdGUudm1hKSlcXG5tbS91c2VyZmF1bHRmZC5jOjk5ODpcXHRcXHRyZXR1cm4gIG1maWxsX2F0b21pY19odWdldGxiKGN0eCwgc3RhdGUudm1hLCBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy05OTktXFx0XFx0XFx0XFx0XFx0ICAgICBzcmNfc3RhcnQsIGxlbiwgZmxhZ3MpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDEyLVxcbm1tL3VzZXJmYXVsdGZkLmM6MTAxMzpcXHRcXHRlcnIgPSBtZmlsbF9hdG9taWNfcHRlKFxcdTAwMjZzdGF0ZSk7XFxubW0vdXNlcmZhdWx0ZmQuYy0xMDE0LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDM1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MTAzNjpzdGF0aWMgc3NpemVfdCBtZmlsbF9hdG9taWNfY29weShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbm1tL3VzZXJmYXVsdGZkLmMtMTAzNy1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTAzOS17XFxubW0vdXNlcmZhdWx0ZmQuYzoxMDQwOlxcdHJldHVybiBtZmlsbF9hdG9taWMoY3R4LCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgbGVuLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTA0MS1cXHRcXHRcXHQgICAgdWZmZF9mbGFnc19zZXRfbW9kZShmbGFncywgTUZJTExfQVRPTUlDX0NPUFkpKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA0My1cXG5tbS91c2VyZmF1bHRmZC5jOjEwNDQ6c3RhdGljIHNzaXplX3QgbWZpbGxfYXRvbWljX3plcm9wYWdlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG5tbS91c2VyZmF1bHRmZC5jLTEwNDUtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA0Ny17XFxubW0vdXNlcmZhdWx0ZmQuYzoxMDQ4OlxcdHJldHVybiBtZmlsbF9hdG9taWMoY3R4LCBzdGFydCwgMCwgbGVuLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTA0OS1cXHRcXHRcXHQgICAgdWZmZF9mbGFnc19zZXRfbW9kZSgwLCBNRklMTF9BVE9NSUNfWkVST1BBR0UpKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA1MS1cXG5tbS91c2VyZmF1bHRmZC5jOjEwNTI6c3RhdGljIHNzaXplX3QgbWZpbGxfYXRvbWljX2NvbnRpbnVlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS91c2VyZmF1bHRmZC5jLTEwNTMtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVmZmRfZmxhZ3NfdCBmbGFncylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA2My1cXG5tbS91c2VyZmF1bHRmZC5jOjEwNjQ6XFx0cmV0dXJuIG1maWxsX2F0b21pYyhjdHgsIHN0YXJ0LCAwLCBsZW4sXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDY1LVxcdFxcdFxcdCAgICB1ZmZkX2ZsYWdzX3NldF9tb2RlKGZsYWdzLCBNRklMTF9BVE9NSUNfQ09OVElOVUUpKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA2Ny1cXG5tbS91c2VyZmF1bHRmZC5jOjEwNjg6c3RhdGljIHNzaXplX3QgbWZpbGxfYXRvbWljX3BvaXNvbihzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDY5LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbiwgdWZmZF9mbGFnc190IGZsYWdzKVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA3MC17XFxubW0vdXNlcmZhdWx0ZmQuYzoxMDcxOlxcdHJldHVybiBtZmlsbF9hdG9taWMoY3R4LCBzdGFydCwgMCwgbGVuLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTA3Mi1cXHRcXHRcXHQgICAgdWZmZF9mbGFnc19zZXRfbW9kZShmbGFncywgTUZJTExfQVRPTUlDX1BPSVNPTikpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00MTA5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfY29weShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQxNDYtXFx0aWYgKG1tZ2V0X25vdF96ZXJvKGN0eC1cXHUwMDNlbW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MTQ3OlxcdFxcdHJldCA9IG1maWxsX2F0b21pY19jb3B5KGN0eCwgdWZmZGlvX2NvcHkuZHN0LCB1ZmZkaW9fY29weS5zcmMsXFxubW0vdXNlcmZhdWx0ZmQuYy00MTQ4LVxcdFxcdFxcdFxcdFxcdHVmZmRpb19jb3B5LmxlbiwgZmxhZ3MpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00MTY5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfemVyb3BhZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MjAwLVxcdGlmIChtbWdldF9ub3RfemVybyhjdHgtXFx1MDAzZW1tKSkge1xcbm1tL3VzZXJmYXVsdGZkLmM6NDIwMTpcXHRcXHRyZXQgPSBtZmlsbF9hdG9taWNfemVyb3BhZ2UoY3R4LCB1ZmZkaW9femVyb3BhZ2UucmFuZ2Uuc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy00MjAyLVxcdFxcdFxcdFxcdFxcdCAgICB1ZmZkaW9femVyb3BhZ2UucmFuZ2UubGVuKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDQyNz1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX2NvbnRpbnVlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQ0NjItXFx0aWYgKG1tZ2V0X25vdF96ZXJvKGN0eC1cXHUwMDNlbW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0NDYzOlxcdFxcdHJldCA9IG1maWxsX2F0b21pY19jb250aW51ZShjdHgsIHVmZmRpb19jb250aW51ZS5yYW5nZS5zdGFydCxcXG5tbS91c2VyZmF1bHRmZC5jLTQ0NjQtXFx0XFx0XFx0XFx0XFx0ICAgIHVmZmRpb19jb250aW51ZS5yYW5nZS5sZW4sIGZsYWdzKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDQ4OD1zdGF0aWMgaW5saW5lIGludCB1c2VyZmF1bHRmZF9wb2lzb24oc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDUxOS1cXHRpZiAobW1nZXRfbm90X3plcm8oY3R4LVxcdTAwM2VtbSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jOjQ1MjA6XFx0XFx0cmV0ID0gbWZpbGxfYXRvbWljX3BvaXNvbihjdHgsIHVmZmRpb19wb2lzb24ucmFuZ2Uuc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy00NTIxLVxcdFxcdFxcdFxcdFxcdCAgdWZmZGlvX3BvaXNvbi5yYW5nZS5sZW4sIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzowOC4yMjQxNTU3M1oiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDMxNTU3ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKlJldmlld2luZyBNZW1vcnkgQ29uZmlndXJhdGlvbnMgZm9yIGEgUGF0Y2gqKlxuXG5SaWdodCwgc28gYHN5c191c2VyZmF1bHRmZGAgc2hvdWxkIGJlIG9rYXkuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIE5vdywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnczogSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGNvcnJlY3RseSBzZXQgdXAgdG8gaGFuZGxlIHRoZSBjaGFuZ2VzIHRoaXMgcGF0Y2ggd2lsbCBicmluZy4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IGhvdyBtZW1vcnkgaXMgaGFuZGxlZC5cblxuRmlyc3QsIEknbGwgY2hlY2sgdGhlIGBTV0FQYCBjb25maWd1cmF0aW9uIOKAkyBtYWtpbmcgc3VyZSBzd2FwIHNwYWNlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgcmVxdWlyZWQgYnkgdGhpcyBzeXN0ZW0uIEFmdGVyIHRoYXQgSSdsbCBsb29rIGF0IGBaU1dBUGAgYW5kIGl0cyBzdGF0dXMuIE9idmlvdXNseSwgYFVTRVJGQVVMVEZEYCBpcyBrZXkgaGVyZSwgSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBpdCBpcyBpbmNsdWRlZCBhcyB3ZWxsLCBvciBhdCBsZWFzdCBpcyBjb3JyZWN0bHkgc2V0IGluIG15IHRhcmdldCBzeXN0ZW0uIEknbGwgaW5jbHVkZSBgU0hNRU1gIGlmIGl0IHNlZW1zIG5lY2Vzc2FyeS4gSXQncyB1c3VhbGx5IGVuYWJsZWQgb3IgZGVmYXVsdHMgdG8gZW5hYmxlZCwgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnkuXG5cbldhaXQgYSBzZWNvbmTigKYgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL3NobWVtLmNgLiBUaGF0IG1lYW5zIEkgKm11c3QqIHZlcmlmeSBgQ09ORklHX1NITUVNYCBpcyBlbmFibGVkLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzIG9uIHNoYXJlZCBtZW1vcnkuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgcGF0Y2ggcmVsaWVzIG9uIG9yIGFmZmVjdHMgc2hhcmVkIG1lbW9yeSBjb25maWd1cmF0aW9ucy4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgdGhhdCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzoxMi4yNTU3MTcxMDZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDUwMzExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0hNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MTIuMzM1Nzc1OTA3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODc2NTc2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBMZXQncyBzZWUuLi4gdGhlIGBpbml0L2AgZGlyZWN0b3J5IGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBpdHMgcm9sZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gQW5kIHdpdGhpbiB0aGF0LCBgS2NvbmZpZ2AgaXMgdGhlIG9idmlvdXMgdGFyZ2V0LiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlY2xhcmVkLCBhbmQgaG9wZWZ1bGx5LCBvdXIgbXlzdGVyeSBvcHRpb24gaXMgZGVmaW5lZCB0aGVyZSwgYWxvbmcgd2l0aCBhbGwgdGhlIG1ldGFkYXRhIHdlIG5lZWQuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24gaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZXNjcmlwdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE2NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ3OjE1LjUyMzQzNTg1MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NTA3OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTSE1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEVWRU5URkRcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTMyLVxcbmluaXQvS2NvbmZpZzoxOTMzOmNvbmZpZyBTSE1FTVxcbmluaXQvS2NvbmZpZy0xOTM0LVxcdGJvb2wgXFxcIlVzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW1cXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzoxNS42MzI5NDgwMTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMTI2NzU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgLSBLZXkgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHNoYXJlZCBtZW1vcnksIHNvIGBDT05GSUdfU0hNRU1gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuIExldCdzIHNlZS4uLiB3ZSd2ZSBnb3Qgc29tZSBrZXJuZWwgY29uZmlncyB0byBrZWVwIGluIG1pbmQsIHNwZWNpZmljYWxseSBgU1dBUGAsIGBaU1dBUGAsIGBVU0VSRkFVTFRGRGAsIGFuZCBvZiBjb3Vyc2UsIGBTSE1FTWAuIFRob3NlIGFsbCBwbGF5IGludG8gdGhpcy5cblxuTm93LCB3aGljaCBzeW1ib2xzIGFyZSB0aGUgY29yZSBvZiB0aGlzIGRpc2N1c3Npb24/IFdlIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYHN5c19taW5jb3JlYCwgYHNobWVtX2dldF9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcGluX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgc3lzX3VzZXJmYXVsdGZkYCwgYHpzd2FwX3N0b3JlYCwgYW5kIGB6c3dhcF9sb2FkYC4gRWFjaCBvZiB0aGVzZSBhcmUgZXNzZW50aWFsIHBpZWNlcyBvZiB0aGUgcHV6emxlLlxuXG5XYWl0IGEgc2Vjb25kLCBob3cgaXMgYHN5c19taW5jb3JlYCBhY3R1YWxseSBkZWZpbmVkPyBJcyBpdCBzaW1wbHkgYHN5c19taW5jb3JlYCBvciBjb3VsZCBpdCBiZSB0aGUgeDY0IHNwZWNpZmljIHZlcnNpb24sIGBfX3g2NF9zeXNfbWluY29yZWA/IFN5c2NhbGxzIGFyZSB1c3VhbGx5IGRlZmluZWQgdXNpbmcgYFNZU0NBTExfREVGSU5FYCwgc28sIGxldCdzIHZlcmlmeS4gSSBjb3VsZCBwcm9iYWJseSBnZXQgYXdheSB3aXRoIGp1c3Qgc2VhcmNoaW5nIGZvciBgc3lzX21pbmNvcmVgIG9yIHNpbXBseSBgbWluY29yZWAuIExldCdzIGp1c3QgZG91YmxlIGNoZWNrIGluIGBtbS9taW5jb3JlLmNgIGZvciBhbnkgZGVmaW5pdGlvbnMgdXNpbmcgYFNZU0NBTExfREVGSU5FYC4gSSdsbCBjb25maXJtIGhvdyBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ3OjIwLjA2NDIxOTg5NFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4MDE5NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKm1pbmNvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWluY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pbmNvcmUuYz0yNDY9c3RhdGljIGxvbmcgZG9fbWluY29yZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGFnZXMsIHVuc2lnbmVkIGNoYXIgKnZlYylcXG4tLVxcbm1tL21pbmNvcmUuYy0yOTEtICovXFxubW0vbWluY29yZS5jOjI5MjpTWVNDQUxMX0RFRklORTMobWluY29yZSwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuLFxcbm1tL21pbmNvcmUuYy0yOTMtXFx0XFx0dW5zaWduZWQgY2hhciBfX3VzZXIgKiwgdmVjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzoyMC4xMzEwMjgyMDdaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzNjE5MzU0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgU2VsZWN0aW9uOiBBIEtlcm5lbCBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMgdG8gbGV2ZXJhZ2UgYGRvX21pbmNvcmVgLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQncyBzdGF0aWMuIFRoYXQncyBhIG5vLWdvIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdG8gYXZvaWQgaW5saW5pbmcgaXNzdWVzLiAgU28sIEknbGwgZ28gd2l0aCBgc3lzX21pbmNvcmVgIGFuZCBgc3lzX3VzZXJmYXVsdGZkYCBkaXJlY3RseS4gVGhleSBhcmUgc3lzY2FsbHMsIHdoaWNoIFN5emthbGxlciBzaG91bGQgaGFuZGxlIGVhc2lseS5cblxuSSd2ZSBnb3QgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLiBMZXQncyBzZWUuLi4gYHpzd2FwX3N0b3JlYCBhbmQgYHpzd2FwX2xvYWRgIGFyZSBnb29kLiAgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwaW5fcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgc3dwX3N3YXBjb3VudGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGFuZCBgc2htZW1fZ2V0X2ZvbGlvYCBhbGwgbG9vayBzb2xpZCB0b28uIEdvb2QsIGdvb2QsIHRoZXkncmUgYWxsIG5vbi1zdGF0aWMuXG5cbk5vdywgSSB3YXMgYSBiaXQgaHVuZyB1cCBvbiBgZG9fc3dhcF9wYWdlYC4gSXQncyBkZWZpbml0ZWx5IGEgaG90IHBhdGgsIHRoZSBtYWluIGZ1bmN0aW9uIG1vZGlmaWVkLiBUaGUgcGF0Y2ggYWN0dWFsbHkgY2hhbmdlcyBob3cgaXQgaGFuZGxlcyB0aGUgYFZNX0ZBVUxUX1NJR0JVU2AgcmV0dXJuLiBCdXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gc3dhcCwgYnV0IG1heWJlIEkgY2FuIGV4Y2x1ZGUgaXQuICBUaGUgbW9kaWZpZWQgYGdldF9zd2FwX2RldmljZWAgaXMgY2FsbGVkIGJ5IGFsbCB0aGVzZSBmdW5jdGlvbnMgSSd2ZSBsaXN0ZWQsIHNvIGZ1enppbmcgdGhvc2Ugc2hvdWxkIHN0aWxsIGhpdCB0aGUgcmVsZXZhbnQgbG9naWMsIHBhcnRpY3VsYXJseSB0aGUgYEVSUl9QVFIoLUVJTlZBTClgIGhhbmRsaW5nIGluIGBnZXRfc3dhcF9kZXZpY2VgLiBJIHdpbGwgcmVseSBvbiB0aGUgb3RoZXIgZnVuY3Rpb25zIHRvIGhpdCB0aGF0IGBnZXRfc3dhcF9kZXZpY2VgIGJlaGF2aW9yLiBUaGF0IHdpbGwgZ2l2ZSBnb29kIGNvdmVyYWdlIG9mIHRoZSBjaGFuZ2VzLlxuXG5TbywgbGV0J3MgcmV2aWV3OiB0aGUgcGF0Y2ggaXMgYWJvdXQgYGdldF9zd2FwX2RldmljZSgpYCBub3cgcmV0dXJuaW5nIGBFUlJfUFRSKC1FSU5WQUwpYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcy4gSXQgdXBkYXRlcyBtYW55IGNhbGxlcnMgaW4gdGhlIGtlcm5lbCB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgLCBhbmQgYGRvX3N3YXBfcGFnZWAgbm93IHVzZXMgYElTX0VSUigpYCB0byByZXR1cm4gYFZNX0ZBVUxUX1NJR0JVU2AuIFRoaXMgZml4ZXMgYSBwb3NzaWJsZSBpbmZpbml0ZSBsb29wIGZyb20gbWFsZm9ybWVkIGVudHJpZXMsIHNvIGl0J3MgYSBmdW5jdGlvbmFsLCB1c2VyLXJlYWNoYWJsZSBjaGFuZ2UgdGhhdCAqbmVlZHMqIGZ1enppbmcuXG5cbkknbGwgYmUgdXNpbmcgY29uZmlncyBgU1dBUGAsIGBaU1dBUGAsIGBVU0VSRkFVTFRGRGAsIGFuZCBgU0hNRU1gIHRvIGNvdmVyIGFsbCB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtcy5cblxuTXkgZmluYWwgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uIGlzOiBgc3lzX21pbmNvcmVgLCBgc3lzX3VzZXJmYXVsdGZkYCwgYHNobWVtX2dldF9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcGluX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgenN3YXBfc3RvcmVgLCBhbmQgYHpzd2FwX2xvYWRgLiAgSSBmZWVsIGNvbmZpZGVudCB0aGF0IHRoaXMgc2VsZWN0aW9uIHdpbGwgcHJvdmlkZSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIG9mIHRoZSBwYXRjaCdzIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDk3LCJPdXRwdXRUb2tlbnMiOjI2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MzQuNDkyOTY4ODI4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNjY5OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fZ2V0X2ZvbGlvXCIsXG4gICAgXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcIixcbiAgICBcInN3YXBpbl9yZWFkYWhlYWRcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIixcbiAgICBcInN3cF9zd2FwY291bnRcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU5WQUwpYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcy4gSXQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIChjb3JlIG1tLCBzaG1lbSwgbWluY29yZSwgc3dhcGZpbGUsIHVzZXJmYXVsdGZkLCB6c3dhcCkgdG8gaGFuZGxlIHRoZSBuZXcgcmV0dXJuIHR5cGUgdXNpbmcgYElTX0VSUl9PUl9OVUxMKClgLiBOb3RhYmx5LCBgZG9fc3dhcF9wYWdlKClgIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYElTX0VSUigpYCBhbmQgcmV0dXJucyBgVk1fRkFVTFRfU0lHQlVTYCBpbnN0ZWFkIG9mIHJldHJ5aW5nLCBmaXhpbmcgYSBwb3RlbnRpYWwgaW5maW5pdGUgcGFnZSBmYXVsdCBsb29wIGZvciBtYWxmb3JtZWQgZW50cmllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9nZXRfZm9saW9cIixcbiAgICBcInJlYWRfc3dhcF9jYWNoZV9hc3luY1wiLFxuICAgIFwic3dhcGluX3JlYWRhaGVhZFwiLFxuICAgIFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICAgIFwic3dwX3N3YXBjb3VudFwiLFxuICAgIFwic3dhcF9wdXRfZW50cmllc19kaXJlY3RcIixcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTlZBTClgIGluc3RlYWQgb2YgYE5VTExgIGZvciBtYWxmb3JtZWQgc3dhcCBlbnRyaWVzLiBJdCB1cGRhdGVzIG11bHRpcGxlIGNhbGxlcnMgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgKGNvcmUgbW0sIHNobWVtLCBtaW5jb3JlLCBzd2FwZmlsZSwgdXNlcmZhdWx0ZmQsIHpzd2FwKSB0byBoYW5kbGUgdGhlIG5ldyByZXR1cm4gdHlwZSB1c2luZyBgSVNfRVJSX09SX05VTEwoKWAuIE5vdGFibHksIGBkb19zd2FwX3BhZ2UoKWAgbm93IGV4cGxpY2l0bHkgY2hlY2tzIGZvciBgSVNfRVJSKClgIGFuZCByZXR1cm5zIGBWTV9GQVVMVF9TSUdCVVNgIGluc3RlYWQgb2YgcmV0cnlpbmcsIGZpeGluZyBhIHBvdGVudGlhbCBpbmZpbml0ZSBwYWdlIGZhdWx0IGxvb3AgZm9yIG1hbGZvcm1lZCBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ3OjM0LjYzNDY1OTMxM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2MDU0MTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ3OjM0LjYzNTIzNTIzM1oiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODU5OTU5NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBhbiBlcnJvciBwb2ludGVyIChgRVJSX1BUUigtRUlOVkFMKWApIGZvciBtYWxmb3JtZWQgc3dhcCBlbnRyaWVzLCByYXRoZXIgdGhhbiBqdXN0IGBOVUxMYC4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL21lbW9yeS5jYCwgYG1tL21pbmNvcmUuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYG1tL3VzZXJmYXVsdGZkLmNgLCBgbW0venN3YXAuY2ApIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoKWAgYW5kIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAoZS5nLiwgcmV0dXJuaW5nIGBWTV9GQVVMVF9TSUdCVVNgIGluIGBkb19zd2FwX3BhZ2UoKWApLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYnVncyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZykuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQsIG5vIG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1N2Y2ZDc1ZjhkNzVhNjE3N2I5ZmI5Njc5OTdhOGM1ZDFhNjc3ZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxOTozODoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGQ5Y2Y5NDE5NjdjZjAuLjI4NDJjZDk3NmYxZDMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC00OTU2LDggKzQ5NTYsMTMgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXG4gXHQvKiBQcmV2ZW50IHN3YXBvZmYgZnJvbSBoYXBwZW5pbmcgdG8gdXMuICovXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAodW5saWtlbHkoIXNpKSlcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbitcdFx0LyogQSBtYWxmb3JtZWQgZW50cnkgbmV2ZXIgYmVjb21lcyB2YWxpZCwgc28gZG9uJ3QgcmV0cnkgaXQuICovXG4rXHRcdGlmIChJU19FUlIoc2kpKVxuK1x0XHRcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0c2kgPSBOVUxMO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0aWYgKGZvbGlvKVxuZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuY1xuaW5kZXggZmY0YWM4MjgxNzY4My4uYzA4NjgzNmJjNGJjYyAxMDA2NDRcbi0tLSBhL21tL21pbmNvcmUuY1xuKysrIGIvbW0vbWluY29yZS5jXG5AQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pXG4gXHQgKi9cbiBcdGlmIChzaG1lbSkge1xuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICghc2kpXG4rXHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNjU1NzJjYmYxYmQzYy4uZDBhOWY1MmJmZWQ3MSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yMjc2LDcgKzIyNzYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpO1xuIFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKSB7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4gXHRcdGlmIChvcmRlciBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0ZWxzZVxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggNGI3YTMzMDNjNDYzYi4uZjJlODZkNjYyNmVjYyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNzE1LDcgKzcxNSw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRtcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCBcdTAwMjZpbHgpO1xuQEAgLTk1MSw3ICs5NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdCAqL1xuIFx0XHRpZiAoc3dwX3R5cGUoZW50cnkpICE9IHN3cF90eXBlKHRhcmdfZW50cnkpKSB7XG4gXHRcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRcdGlmICghc2kpXG4rXHRcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFx1MDAyNmN0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDRkNGUzZTMwNTlmNmIuLjI5NjEyYTBjZjdhZmEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTUwNCw3ICsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTtcbkBAIC0xODU5LDcgKzE4NTksOSBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbyxcbiAgKiByZXR1cm4gcG9pbnRlciB0byBzd2FwX2luZm9fc3RydWN0LCBhbmQga2VlcCB0aGUgc3dhcCBlbnRyeSB2YWxpZFxuICAqIHZpYSBwcmV2ZW50aW5nIHRoZSBzd2FwIGRldmljZSBmcm9tIGJlaW5nIHN3YXBvZmYsIHVudGlsXG4tICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLlxuKyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhXG4rICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTlZBTCkgaWYgdGhlIGVudHJ5IGl0c2VsZlxuKyAqIGlzIG1hbGZvcm1lZCBhbmQgY2FuIG5ldmVyIG5hbWUgYSBzbG90IG9uIGFueSBkZXZpY2UuXG4gICpcbiAgKiBOb3RpY2UgdGhhdCBzd2Fwb2ZmIG9yIHN3YXBvZmYrc3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbkBAIC0xODk5LDEzICsxOTAxLDE0IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4gXG4gXHRyZXR1cm4gc2k7XG4gYmFkX25vZmlsZTpcbi1cdHByX2VycihcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbitcdHByX2Vycl9yYXRlbGltaXRlZChcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbitcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIG91dDpcbiBcdHJldHVybiBOVUxMO1xuIHB1dF9vdXQ6XG4tXHRwcl9lcnIoXCIlczogJXMlMDhseFxcblwiLCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTtcbitcdHByX2Vycl9yYXRlbGltaXRlZChcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xuIFx0cGVyY3B1X3JlZl9wdXQoXHUwMDI2c2ktXHUwMDNldXNlcnMpO1xuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiB9XG4gXG4gLypcbkBAIC0yMDAxLDcgKzIwMDQsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbiBcdGludCBjb3VudDtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcbkBAIC0yMTI3LDcgKzIxMzAsNyBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFzaSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpXG4gXHRcdHJldHVybjtcbiBcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcdTAwM2Ugc2ktXHUwMDNlbWF4KSlcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDI0YTRkOTJmZmEzYzIuLmJmN2JjN2ZiMWFhMGYgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTcwMCw3ICsxNzAwLDggQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdFx0fVxuIFxuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICh1bmxpa2VseSghc2kpKSB7XG4rXHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbitcdFx0XHRzaSA9IE5VTEw7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmN2M5Yzg5ZjY0NDljLi5iYzliOTMxZDZmNDQ3IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk5Nyw3ICs5OTcsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzozNC42MzUyMzYxMzNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg1OTkyNDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBTd2FwIEVudHJ5IEVycm9yIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQncyBmb2N1c2VkIG9uIGltcHJvdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYGdldF9zd2FwX2RldmljZSgpYC4gU3BlY2lmaWNhbGx5LCBpbnN0ZWFkIG9mIHJldHVybmluZyBgTlVMTGAgZm9yIGNlcnRhaW4gZXJyb3JzIHdpdGggc3dhcCBlbnRyaWVzIChsaWtlIGJhZCBmaWxlcyBvciBvZmZzZXRzKSwgdGhlIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGFuIGVycm9yIHBvaW50ZXIsIGBFUlJfUFRSKC1FSU5WQUwpYC4gVGhlIHN1YnNlcXVlbnQgY2hhbmdlIGlzIHVwZGF0aW5nIHRoZSBjYWxsZXJzIG9mIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gdXNlIGBJU19FUlJfT1JfTlVMTCgpYCBmb3IgdGhlIGNoZWNrLCBpbnN0ZWFkIG9mIHNpbXBseSBgIXNpYC4gVGhpcyBwYXR0ZXJuIGlzIHNlZW4gdGhyb3VnaG91dCB0aGUgYG1tYCBzdWJzeXN0ZW0sIGFmZmVjdGluZyBhIHJhbmdlIG9mIGZpbGVzLiBJbiBgZG9fc3dhcF9wYWdlKClgLCBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBpZiBgSVNfRVJSKHNpKWAgaXMgdHJ1ZSwgaXQgdHJpZ2dlcnMgYFZNX0ZBVUxUX1NJR0JVU2AuXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0IHJvYnVzdGlmeWluZyB0aGUga2VybmVsJ3MgcmVzcG9uc2UgdG8gKm1hbGZvcm1lZCogb3IgKmludmFsaWQqIHN3YXAgZW50cmllcy4gSXQncyBhIGxvZ2ljIGFuZCBtZW1vcnkgc2FmZXR5IGltcHJvdmVtZW50LiBUaGUgaXNzdWUgYXQgaGFuZCBpcyBsaWtlbHkgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgcmVzdWx0aW5nIGluIGNyYXNoZXMgb3IgaW5maW5pdGUgbG9vcHMuIFRoaXMga2luZCBvZiBwcm9ibGVtIGlzIGV4YWN0bHkgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYXJlIGRlc2lnbmVkIHRvIGRldGVjdC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyBJIHRoaW5rIG5vdC4gYGdldF9zd2FwX2RldmljZSgpYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdGAsIHdoaWNoIGlzIHRoZW4gY2hlY2tlZCBieSBjYWxsZXJzLiBUaGVyZSdzIG5vIHNjZW5hcmlvIGhlcmUgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZGlyZWN0bHkgZXhwb3NlZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgbm8gdXNlci1zcGFjZSBjb3BpZXMgYXJlIG1vZGlmaWVkLCBhbmQgSSBzZWUgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdGhyb3VnaCB0aGlzIGNoYW5nZS5cblxuVGhlcmVmb3JlLCBhZnRlciBhIGNhcmVmdWwgcmV2aWV3LCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIGlzIGFib3V0IGJldHRlciBlcnJvciBoYW5kbGluZyBhbmQgcHJldmVudGluZyBjcmFzaGVzIGZyb20gYmFkIHN3YXAgZW50cmllcywgbm90IGFib3V0IGV4cG9zaW5nIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5OSwiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Nzo0My40OTUxNjUxMjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGFuIGVycm9yIHBvaW50ZXIgKGBFUlJfUFRSKC1FSU5WQUwpYCkgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMsIHJhdGhlciB0aGFuIGp1c3QgYE5VTExgLiBJdCB1cGRhdGVzIHZhcmlvdXMgY2FsbGVycyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vbWVtb3J5LmNgLCBgbW0vbWluY29yZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdXNlcmZhdWx0ZmQuY2AsIGBtbS96c3dhcC5jYCkgdG8gdXNlIGBJU19FUlJfT1JfTlVMTCgpYCBhbmQgaGFuZGxlIHRoZSBlcnJvciBhcHByb3ByaWF0ZWx5IChlLmcuLCByZXR1cm5pbmcgYFZNX0ZBVUxUX1NJR0JVU2AgaW4gYGRvX3N3YXBfcGFnZSgpYCkuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nKS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgaW50cm9kdWNlZCwgbm8gbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFIoLUVJTlZBTClgKSBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcywgcmF0aGVyIHRoYW4ganVzdCBgTlVMTGAuIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9tZW1vcnkuY2AsIGBtbS9taW5jb3JlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS91c2VyZmF1bHRmZC5jYCwgYG1tL3pzd2FwLmNgKSB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgIGFuZCBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHkgKGUuZy4sIHJldHVybmluZyBgVk1fRkFVTFRfU0lHQlVTYCBpbiBgZG9fc3dhcF9wYWdlKClgKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcpLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkLCBubyBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 19:36:12 +0000 UTC FinishedAt: 2026-08-10 19:47:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6b8c8af514d739d0335f5579b585e02babe8a727", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "USERFAULTFD", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "6b8c8af514d739d0335f5579b585e02babe8a727", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "USERFAULTFD", "SHMEM" ], "series_id": "e4858e98-a05e-4a6e-b7d9-4880a125695b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_get_folio", "read_swap_cache_async", "swapin_readahead", "swap_retry_table_alloc", "swp_swapcount", "swap_put_entries_direct", "zswap_store", "zswap_load" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7VVNFUkZBVUxURkQmIzM0OywKICAgICYjMzQ7U0hNRU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG1lbV9nZXRfZm9saW8mIzM0OywKICAgICYjMzQ7cmVhZF9zd2FwX2NhY2hlX2FzeW5jJiMzNDssCiAgICAmIzM0O3N3YXBpbl9yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7c3dhcF9yZXRyeV90YWJsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtzd3Bfc3dhcGNvdW50JiMzNDssCiAgICAmIzM0O3N3YXBfcHV0X2VudHJpZXNfZGlyZWN0JiMzNDssCiAgICAmIzM0O3pzd2FwX3N0b3JlJiMzNDssCiAgICAmIzM0O3pzd2FwX2xvYWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBhbiBlcnJvciBwb2ludGVyIChgRVJSX1BUUigtRUlOVkFMKWApIGZvciBtYWxmb3JtZWQgc3dhcCBlbnRyaWVzLCByYXRoZXIgdGhhbiBqdXN0IGBOVUxMYC4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL21lbW9yeS5jYCwgYG1tL21pbmNvcmUuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYG1tL3VzZXJmYXVsdGZkLmNgLCBgbW0venN3YXAuY2ApIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoKWAgYW5kIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAoZS5nLiwgcmV0dXJuaW5nIGBWTV9GQVVMVF9TSUdCVVNgIGluIGBkb19zd2FwX3BhZ2UoKWApLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYnVncyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZykuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQsIG5vIG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1N2Y2ZDc1ZjhkNzVhNjE3N2I5ZmI5Njc5OTdhOGM1ZDFhNjc3ZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxOTozODoyMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBkOWNmOTQxOTY3Y2YwLi4yODQyY2Q5NzZmMWQzIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtNDk1Niw4ICYjNDM7NDk1NiwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKVxuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiYjNDM7XHRcdC8qIEEgbWFsZm9ybWVkIGVudHJ5IG5ldmVyIGJlY29tZXMgdmFsaWQsIHNvIGRvbiYjMzk7dCByZXRyeSBpdC4gKi9cbiYjNDM7XHRcdGlmIChJU19FUlIoc2kpKVxuJiM0MztcdFx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0XHRzaSA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0aWYgKGZvbGlvKVxuZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuY1xuaW5kZXggZmY0YWM4MjgxNzY4My4uYzA4NjgzNmJjNGJjYyAxMDA2NDRcbi0tLSBhL21tL21pbmNvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWluY29yZS5jXG5AQCAtNzEsNyAmIzQzOzcxLDcgQEAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluY29yZV9zd2FwKHN3cF9lbnRyeV90IGVudHJ5LCBib29sIHNobWVtKVxuIFx0ICovXG4gXHRpZiAoc2htZW0pIHtcbiBcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRpZiAoIXNpKVxuJiM0MztcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA2NTU3MmNiZjFiZDNjLi5kMGE5ZjUyYmZlZDcxIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTIyNzYsNyAmIzQzOzIyNzYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpO1xuIFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKSB7XG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuIFx0XHRpZiAob3JkZXIgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXHRcdGVsc2VcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDRiN2EzMzAzYzQ2M2IuLmYyZTg2ZDY2MjZlY2MgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTcxNSw3ICYjNDM7NzE1LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRtcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCBcdTAwMjZpbHgpO1xuQEAgLTk1MSw3ICYjNDM7OTUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF92bWFfcmVhZGFoZWFkKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIFx0XHQgKi9cbiBcdFx0aWYgKHN3cF90eXBlKGVudHJ5KSAhPSBzd3BfdHlwZSh0YXJnX2VudHJ5KSkge1xuIFx0XHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0XHRpZiAoIXNpKVxuJiM0MztcdFx0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oXHUwMDI2Y3R4LCBlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNGQ0ZTNlMzA1OWY2Yi4uMjk2MTJhMGNmN2FmYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNTA0LDcgJiM0MzsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuJiM0MztcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIG9mZnNldCk7XG5AQCAtMTg1OSw3ICYjNDM7MTg1OSw5IEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gICogQ2hlY2sgd2hldGhlciBzd2FwIGVudHJ5IGlzIHZhbGlkIGluIHRoZSBzd2FwIGRldmljZS4gIElmIHNvLFxuICAqIHJldHVybiBwb2ludGVyIHRvIHN3YXBfaW5mb19zdHJ1Y3QsIGFuZCBrZWVwIHRoZSBzd2FwIGVudHJ5IHZhbGlkXG4gICogdmlhIHByZXZlbnRpbmcgdGhlIHN3YXAgZGV2aWNlIGZyb20gYmVpbmcgc3dhcG9mZiwgdW50aWxcbi0gKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuXG4mIzQzOyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhXG4mIzQzOyAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXksIGFuZCBFUlJfUFRSKC1FSU5WQUwpIGlmIHRoZSBlbnRyeSBpdHNlbGZcbiYjNDM7ICogaXMgbWFsZm9ybWVkIGFuZCBjYW4gbmV2ZXIgbmFtZSBhIHNsb3Qgb24gYW55IGRldmljZS5cbiAgKlxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZiYjNDM7c3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbkBAIC0xODk5LDEzICYjNDM7MTkwMSwxNCBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIFxuIFx0cmV0dXJuIHNpO1xuIGJhZF9ub2ZpbGU6XG4tXHRwcl9lcnIoXCYjMzQ7JXM6ICVzJTA4bHhcXG5cJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbiYjNDM7XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6ICVzJTA4bHhcXG5cJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBvdXQ6XG4gXHRyZXR1cm4gTlVMTDtcbiBwdXRfb3V0OlxuLVx0cHJfZXJyKFwmIzM0OyVzOiAlcyUwOGx4XFxuXCYjMzQ7LCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTtcbiYjNDM7XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6ICVzJTA4bHhcXG5cJiMzNDssIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xuIFx0cGVyY3B1X3JlZl9wdXQoXHUwMDI2c2ktXHUwMDNldXNlcnMpO1xuLVx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gfVxuIFxuIC8qXG5AQCAtMjAwMSw3ICYjNDM7MjAwNCw3IEBAIGludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0aW50IGNvdW50O1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKCFzaSlcbiYjNDM7XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcbkBAIC0yMTI3LDcgJiM0MzsyMTMwLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKFdBUk5fT05fT05DRSghc2kpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoSVNfRVJSX09SX05VTEwoc2kpKSlcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKFdBUk5fT05fT05DRShlbmRfb2Zmc2V0IFx1MDAzZSBzaS1cdTAwM2VtYXgpKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xuaW5kZXggMjRhNGQ5MmZmYTNjMi4uYmY3YmM3ZmIxYWEwZiAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0xNzAwLDcgJiM0MzsxNzAwLDggQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdFx0fVxuIFxuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICh1bmxpa2VseSghc2kpKSB7XG4mIzQzO1x0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4mIzQzO1x0XHRcdHNpID0gTlVMTDtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGY3YzljODlmNjQ0OWMuLmJjOWI5MzFkNmY0NDcgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtOTk3LDcgJiM0Mzs5OTcsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbi1cdGlmICghc2kpXG4mIzQzO1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjltPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fZ2V0X2ZvbGlvJiMzNDssCiAgICAmIzM0O3JlYWRfc3dhcF9jYWNoZV9hc3luYyYjMzQ7LAogICAgJiMzNDtzd2FwaW5fcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O3N3YXBfcmV0cnlfdGFibGVfYWxsb2MmIzM0OywKICAgICYjMzQ7c3dwX3N3YXBjb3VudCYjMzQ7LAogICAgJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7LAogICAgJiMzNDt6c3dhcF9zdG9yZSYjMzQ7LAogICAgJiMzNDt6c3dhcF9sb2FkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU5WQUwpYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcy4gSXQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIChjb3JlIG1tLCBzaG1lbSwgbWluY29yZSwgc3dhcGZpbGUsIHVzZXJmYXVsdGZkLCB6c3dhcCkgdG8gaGFuZGxlIHRoZSBuZXcgcmV0dXJuIHR5cGUgdXNpbmcgYElTX0VSUl9PUl9OVUxMKClgLiBOb3RhYmx5LCBgZG9fc3dhcF9wYWdlKClgIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYElTX0VSUigpYCBhbmQgcmV0dXJucyBgVk1fRkFVTFRfU0lHQlVTYCBpbnN0ZWFkIG9mIHJldHJ5aW5nLCBmaXhpbmcgYSBwb3RlbnRpYWwgaW5maW5pdGUgcGFnZSBmYXVsdCBsb29wIGZvciBtYWxmb3JtZWQgZW50cmllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDU3ZjZkNzVmOGQ3NWE2MTc3YjlmYjk2Nzk5N2E4YzVkMWE2NzdlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBkOWNmOTQxOTY3Y2YwLi4yODQyY2Q5NzZmMWQzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDk1Niw4ICYjNDM7NDk1NiwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAogCS8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi8KIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKHVubGlrZWx5KCFzaSkpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpIHsKJiM0MzsJCS8qIEEgbWFsZm9ybWVkIGVudHJ5IG5ldmVyIGJlY29tZXMgdmFsaWQsIHNvIGRvbiYjMzk7dCByZXRyeSBpdC4gKi8KJiM0MzsJCWlmIChJU19FUlIoc2kpKQomIzQzOwkJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKJiM0MzsJCXNpID0gTlVMTDsKIAkJZ290byBvdXQ7CiYjNDM7CX0KIAogCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCWlmIChmb2xpbykKZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuYwppbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NAotLS0gYS9tbS9taW5jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWluY29yZS5jCkBAIC03MSw3ICYjNDM7NzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pCiAJICovCiAJaWYgKHNobWVtKSB7CiAJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJaWYgKCFzaSkKJiM0MzsJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCQlyZXR1cm4gMDsKIAl9CiAJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA2NTU3MmNiZjFiZDNjLi5kMGE5ZjUyYmZlZDcxIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTIyNzYsNyAmIzQzOzIyNzYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpOwogCW9yZGVyID0gc2htZW1fY29uZmlybV9zd2FwKG1hcHBpbmcsIGluZGV4LCBpbmRleF9lbnRyeSk7Ci0JaWYgKHVubGlrZWx5KCFzaSkpIHsKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewogCQlpZiAob3JkZXIgJmx0OyAwKQogCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA0YjdhMzMwM2M0NjNiLi5mMmU4NmQ2NjI2ZWNjIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC03MTUsNyAmIzQzOzcxNSw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSwKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiBOVUxMOwogCiAJbXBvbCA9IGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgMCwgJmFtcDtpbHgpOwpAQCAtOTUxLDcgJiM0Mzs5NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJCSAqLwogCQlpZiAoc3dwX3R5cGUoZW50cnkpICE9IHN3cF90eXBlKHRhcmdfZW50cnkpKSB7CiAJCQlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JCQlpZiAoIXNpKQomIzQzOwkJCWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCQkJY29udGludWU7CiAJCX0KIAkJZm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oJmFtcDtjdHgsIGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNGQ0ZTNlMzA1OWY2Yi4uMjk2MTJhMGNmN2FmYSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0xNTA0LDcgJiM0MzsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCkKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAwOwogCiAJY2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIG9mZnNldCk7CkBAIC0xODU5LDcgJiM0MzsxODU5LDkgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbywKICAqIHJldHVybiBwb2ludGVyIHRvIHN3YXBfaW5mb19zdHJ1Y3QsIGFuZCBrZWVwIHRoZSBzd2FwIGVudHJ5IHZhbGlkCiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbAotICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLgomIzQzOyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhCiYjNDM7ICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTlZBTCkgaWYgdGhlIGVudHJ5IGl0c2VsZgomIzQzOyAqIGlzIG1hbGZvcm1lZCBhbmQgY2FuIG5ldmVyIG5hbWUgYSBzbG90IG9uIGFueSBkZXZpY2UuCiAgKgogICogTm90aWNlIHRoYXQgc3dhcG9mZiBvciBzd2Fwb2ZmJiM0Mztzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlCiAgKiBwZXJjcHVfcmVmX3RyeWdldF9saXZlKCkgaW4gZ2V0X3N3YXBfZGV2aWNlKCkgb3IgYWZ0ZXIgdGhlCkBAIC0xODk5LDEzICYjNDM7MTkwMSwxNCBAQCBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KQogCiAJcmV0dXJuIHNpOwogYmFkX25vZmlsZToKLQlwcl9lcnIoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTsKJiM0MzsJcHJfZXJyX3JhdGVsaW1pdGVkKCYjMzQ7JXM6ICVzJTA4bHhcbiYjMzQ7LCBfX2Z1bmNfXywgQmFkX2ZpbGUsIGVudHJ5LnZhbCk7CiYjNDM7CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogb3V0OgogCXJldHVybiBOVUxMOwogcHV0X291dDoKLQlwcl9lcnIoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpOwomIzQzOwlwcl9lcnJfcmF0ZWxpbWl0ZWQoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpOwogCXBlcmNwdV9yZWZfcHV0KCZhbXA7c2ktJmd0O3VzZXJzKTsKLQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKIC8qCkBAIC0yMDAxLDcgJiM0MzsyMDA0LDcgQEAgaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpCiAJaW50IGNvdW50OwogCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAwOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgc3dwX29mZnNldChlbnRyeSkpOwpAQCAtMjEyNyw3ICYjNDM7MjEzMCw3IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucikKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKFdBUk5fT05fT05DRSghc2kpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpCiAJCXJldHVybjsKIAlpZiAoV0FSTl9PTl9PTkNFKGVuZF9vZmZzZXQgJmd0OyBzaS0mZ3Q7bWF4KSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuYwppbmRleCAyNGE0ZDkyZmZhM2MyLi5iZjdiYzdmYjFhYTBmIDEwMDY0NAotLS0gYS9tbS91c2VyZmF1bHRmZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3VzZXJmYXVsdGZkLmMKQEAgLTE3MDAsNyAmIzQzOzE3MDAsOCBAQCBzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZAogCQl9CiAKIAkJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCQlpZiAodW5saWtlbHkoIXNpKSkgewomIzQzOwkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewomIzQzOwkJCXNpID0gTlVMTDsKIAkJCXJldCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmMKaW5kZXggZjdjOWM4OWY2NDQ5Yy4uYmM5YjkzMWQ2ZjQ0NyAxMDA2NDQKLS0tIGEvbW0venN3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jCkBAIC05OTcsNyAmIzQzOzk5Nyw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAKIAkvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqLwogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTsKLQlpZiAoIXNpKQomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKQogCQlyZXR1cm4gLUVFWElTVDsKIAogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU3dhcCBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIHNvbWUgc3dhcCBoYW5kbGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyB3ZSBkZWFsIHdpdGggdGhvc2UgcG90ZW50aWFsbHkgbmFzdHkgbWFsZm9ybWVkIHN3YXAgZW50cmllcy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBjaGFuZ2UgaXMgaW4gYGdldF9zd2FwX2RldmljZSgpYCwgd2hlcmUgaXQmIzM5O3Mgbm93IHJldHVybmluZyBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIHRoZXNlIGJhZCBlbnRyaWVzLiBUaGlzIHN1YnRsZSBzaGlmdCBoYXMgYSByaXBwbGUgZWZmZWN0LCBmb3JjaW5nIGEgYnVuY2ggb2YgY2FsbGVycyBpbiBgbW0vYCB0byB1cGRhdGUgdGhlaXIgY2hlY2tzIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoc2kpYC4gU21hcnQgbW92ZSwgY2F0Y2hlcyBhbGwgY2FzZXMuCgpUaGUgYGRvX3N3YXBfcGFnZSgpYCBmdW5jdGlvbiBpbiBgbW0vbWVtb3J5LmNgIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQuIFRoZSBwYXRjaCBleHBsaWNpdGx5IGFkZHJlc3NlcyBgSVNfRVJSKHNpKWAgYnkgcmV0dXJuaW5nIGBWTV9GQVVMVF9TSUdCVVNgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGJlY2F1c2Ugbm93LCBpbnN0ZWFkIG9mIGp1c3Qgc2lsZW50bHkgZmFpbGluZyBhbmQgcG90ZW50aWFsbHkgbG9vcGluZyBmb3JldmVyIG9uIGEgcGFnZSBmYXVsdCwgd2UmIzM5O3JlIGV4cGxpY2l0bHkgc2lnbmFsaW5nIGEgYnVzIGVycm9yLiBUaGlzIGlzIG11Y2ggYmV0dGVyLCBhbmQgcmVhbGx5IHdvcnRoIGZ1enppbmchCgpMZXQmIzM5O3Mgc2Vl4oCmIE1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBkb19zd2FwX3BhZ2VgLCBgbWluY29yZV9zd2FwYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcF92bWFfcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBPa2F5LCB0aGF0IGdpdmVzIHVzIGEgZ29vZCBvdmVydmlldy4KCkkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMuIGBkb19zd2FwX3BhZ2VgIGlzIGRlZmluaXRlbHkgaG90LCBidXQgdGhlIHBhdGNoJiMzOTtzIG1haW4gY2hhbmdlIGlzIGluIGVycm9yIGhhbmRsaW5nLiBgZ2V0X3N3YXBfZGV2aWNlYCBpcyBhbHNvIGhvdCwgYnV0IGhhbmRsaW5nIG9mIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMgaXMgdGhlIHRhcmdldCBoZXJlLiBUaGVuIHdlIGhhdmUgYG1vdmVfcGFnZXNfcHRlc2AgKHVzZXJmYXVsdGZkKSBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgKHpzd2FwKS4gYHNobWVtX3N3YXBpbl9mb2xpb2AgaXMgcmVsYXRlZCB0byBzaG1lbS4KCk9rYXksIGxldCYjMzk7cyB6b29tIGluIG9uIGBnZXRfc3dhcF9kZXZpY2VgIGFuZCBpdHMgY2FsbGVycy4gVGhlIGtleSBoZXJlIGlzIHRoZSBoYW5kbGluZyBvZiAqbWFsZm9ybWVkKiBlbnRyaWVzLiBNeSBndXQgdGVsbHMgbWUgdXNlciBzcGFjZSBpcyB3aGVyZSB0aGlzIHZ1bG5lcmFiaWxpdHkgd2lsbCBsaWtlbHkgYmUgZm91bmQuIFNvLCBpdCYjMzk7cyB0aG9zZSBgbWFkdmlzZWAgY2FsbHMgYW5kIHVzZXJmYXVsdGZkIHRoYXQgYXJlIHBvdGVudGlhbCB2ZWN0b3JzIGZvciBpbnRyb2R1Y2luZyBiYWQgZW50cmllcy4gSWYgYGdldF9zd2FwX2RldmljZWAgcmV0dXJuZWQgYE5VTExgIGJlZm9yZSwgYGRvX3N3YXBfcGFnZWAganVzdCBza2lwcGVkIGFuZCByZXR1cm5lZCAwIChwb3NzaWJseSBsZWFkaW5nIHRvIGluZmluaXRlIGxvb3ApLiBOb3cgaXQgY2F1c2VzIGEgU0lHQlVTLiBUaGF0JiMzOTtzIGEgZ29vZCBjaGFuZ2UuCgpMZXQgbWUgdGhpbmsgYWJvdXQgdGhlIGNvbmZpZyBvcHRpb25zLiBgQ09ORklHX1NXQVBgIGlzIG9idmlvdXNseSByZXF1aXJlZCBmb3Igc3dhcCBzdXBwb3J0LCBgQ09ORklHX1pTV0FQYCBmb3IgenN3YXAsIGBDT05GSUdfVVNFUkZBVUxURkRgIGZvciB1c2VyZmF1bHRmZCwgYW5kIGBDT05GSUdfU0hNRU1gIGZvciBzaG1lbS4gSSBzaG91bGQgY2hlY2sgYG1tL3N3YXBmaWxlLmNgIGFuZCBgbW0vbWVtb3J5LmNgIHRvIHNlZSBpZiB0aGV5IGRlcGVuZCBvbiBgQ09ORklHX1NXQVBgLiBZZXAsIGBtbS9zd2FwZmlsZS5jYCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX1NXQVBgLiBgbW0vbWVtb3J5LmNgIGlzIGFsd2F5cyBjb21waWxlZC4gVGltZSBmb3IgYSBxdWljayBncmVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O152bV9mYXVsdF90IGRvX3N3YXBfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXG4tLVxubW0vbWVtb3J5LmMtNDg4MC0gKi9cbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy00ODgyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTIwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBTd2FwIFBhZ2UgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgZG9fc3dhcF9wYWdlYCBpcyBvbmx5IGluY2x1ZGVkIHdoZW4gc3dhcCBzdXBwb3J0IGlzIGFjdHVhbGx5IGVuYWJsZWQuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgbWFpbnRhaW5hYmlsaXR5IGFuZCBwcmV2ZW50aW5nIGJ1aWxkIGlzc3Vlcy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYCNpZmRlZiBDT05GSUdfU1dBUGAgY29ycmVjdGx5IGVuY2Fwc3VsYXRlcyB0aGUgYGRvX3N3YXBfcGFnZWAgZnVuY3Rpb24gZGVmaW5pdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGVjaywgcmVhbGx5LiBJZiBpdCYjMzk7cyAqbm90KiBwcm9wZXJseSBndWFyZGVkLCB0aGUga2VybmVsIG1pZ2h0IGF0dGVtcHQgdG8gY2FsbCBzd2FwLXJlbGF0ZWQgZnVuY3Rpb25zIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gZGlzYWJsZSBzd2FwcGluZywgbGVhZGluZyB0byBwb3RlbnRpYWxseSBuYXN0eSBlcnJvcnMgb3IgaW5jb3JyZWN0IGJlaGF2aW9yLiBTbywgbGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyBkb2luZyBpdHMgam9iIGFzIGV4cGVjdGVkLiBUaGlzIHNob3VsZCBiZSBhIHRyaXZpYWwgY2hlY2ssIGJ1dCBpdCYjMzk7cyBhIGNyaXRpY2FsIG9uZSBmb3Iga2VlcGluZyB0aGUgc3lzdGVtIHN0YWJsZSBhbmQgcHJvcGVybHkgY29uZmlndXJlZC4gTm8gc2hvcnRjdXRzIGhlcmUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzY4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGVlcGVyIERpdmUgaW50byBgZG9fc3dhcF9wYWdlYCBMb2NhdGlvbioqCgpIbW0sIHNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHJpZ2h0LiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiByZXNpZGVkIGluIGBtbS9tZW1vcnkuY2AgYW5kIHdhcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19TV0FQYC4gQnV0IGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIGlzIGluZGljYXRpbmcgdGhpcyBtaWdodCBub3QgYmUgYWNjdXJhdGUuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIE1ha2VmaWxlIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBMZXQgbWUgZ28gYmFjayBhbmQgaW52ZXN0aWdhdGUgdGhlIGJ1aWxkIHByb2Nlc3MgaW4gYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYW5kIHJlc29sdmUgdGhpcyBkaXNjcmVwYW5jeSBxdWlja2x5LiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIGFuZCB0aGUgTWFrZWZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTAzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBTd2FwIFBhZ2UgRnVuY3Rpb25hbGl0eSBpbiB0aGUgS2VybmVsKioKClJpZ2h0LCBzbyBgbW0vbWVtb3J5LmNgIGlzIGRlZmluaXRlbHkgYSBjb3JlIGZpbGUsIHRoYXQmIzM5O3MgYSBnaXZlbi4gSXQmIzM5O3MgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLiBOb3csIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEkmIzM5O20gcHJldHR5IHN1cmUgaXQmIzM5O3Mgbm90IGFsd2F5cyBhY3RpdmVseSAqdXNlZCosIGJ1dCByYXRoZXIgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIHN3YXAgaXMgZW5hYmxlZCBpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEVpdGhlciB0aGF0LCBvciBpdCYjMzk7cyBhbHdheXMgY29tcGlsZWQgYnV0IG9ubHkgKmNhbGxlZCogaWYgc3dhcHBpbmcgaXMgZW5hYmxlZC4gVG8gYmUgY2VydGFpbiwgSSBzaG91bGQganVzdCBnbyBhbmQgY2hlY2sgZGlyZWN0bHkgaW4gYG1tL21lbW9yeS5jYCBhbmQgc2VlIGhvdyBgZG9fc3dhcF9wYWdlYCBpcyBoYW5kbGVkIHRoZXJlLiBUaGF0JiMzOTtsbCBjbGVhciB0aGluZ3MgdXAuIE5vIG5lZWQgdG8gcmVseSBvbiBhc3N1bXB0aW9ucyB3aGVuIHRoZSBzb3VyY2UgaXMgcmlnaHQgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc3dhcF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9OTQ3PXN0YXRpYyB2b2lkIHJlc3RvcmVfZXhjbHVzaXZlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1vcnkuYy05NjEtXG5tbS9tZW1vcnkuYzo5NjI6XHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cbm1tL21lbW9yeS5jLTk2My1cdGlmIChwdGVfc3dwX3VmZmQob3JpZ19wdGUpIFx1MDAyNlx1MDAyNiB1c2VyZmF1bHRmZF9yd3Aodm1hKSlcbi0tXG5tbS9tZW1vcnkuYz0zNjUyPWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtMzY2MS0gKiBvciBjb25maWd1cmF0aW9ucyAoZS5nLiBpMzg2IHdpdGggUEFFKSB3aGljaCBtaWdodCBnaXZlIGEgbWl4IG9mIHVubWF0Y2hlZFxubW0vbWVtb3J5LmM6MzY2MjogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXG5tbS9tZW1vcnkuYy0zNjYzLSAqIHByb2NlZWRpbmcgKGJ1dCBkb193cF9wYWdlIGlzIG9ubHkgY2FsbGVkIGFmdGVyIGFscmVhZHkgbWFraW5nIHN1Y2ggYSBjaGVjaztcbi0tXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ4MzktXHQvKlxubW0vbWVtb3J5LmM6NDg0MDpcdCAqIEZvciBkb19zd2FwX3BhZ2UsIGZpbmQgdGhlIGhpZ2hlc3Qgb3JkZXIgd2hlcmUgdGhlIGFsaWduZWQgcmFuZ2UgaXNcbm1tL21lbW9yeS5jLTQ4NDEtXHQgKiBjb21wbGV0ZWx5IHN3YXAgZW50cmllcyB3aXRoIGNvbnRpZ3VvdXMgc3dhcCBvZmZzZXRzLlxuLS1cbm1tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXG4tLVxubW0vbWVtb3J5LmMtNDg4MC0gKi9cbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5tbS9tZW1vcnkuYy00ODgyLXtcbi0tXG5tbS9tZW1vcnkuYy01MjMwLVx0c2V0X3B0ZXModm1hLVx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdGVwLCBwdGUsIG5yX3BhZ2VzKTtcbm1tL21lbW9yeS5jOjUyMzE6XHRhcmNoX2RvX3N3YXBfcGFnZV9ucih2bWEtXHUwMDNldm1fbW0sIHZtYSwgYWRkcmVzcyxcbm1tL21lbW9yeS5jLTUyMzItXHRcdFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1vcnkuYz02NTIwPXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNjU2Ni1cdGlmICghcHRlX3ByZXNlbnQodm1mLVx1MDAzZW9yaWdfcHRlKSlcbm1tL21lbW9yeS5jOjY1Njc6XHRcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcbm1tL21lbW9yeS5jLTY1NjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBTd2FwIFBhZ2UgQ29tcGlsYXRpb24qKgoKUmlnaHQsIHNvIGBkb19zd2FwX3BhZ2VgIGlzIGFsd2F5cyBjb21waWxlZCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgd2hhdCBhYm91dCBgZ2V0X3N3YXBfZGV2aWNlYD8gVGhhdCBmdW5jdGlvbiYjMzk7cyBidXJpZWQgaW4gYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBtZSB0aGluayBpdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBTaW5jZSBpdCBkZWFscyB3aXRoIHN3YXAgZmlsZXMsIG15IGd1ZXNzIGlzIGl0IGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19TV0FQYC4gQnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseS4gQmVzdCB3YXkgdG8gdmVyaWZ5IHdvdWxkIGJlIHRvIGNoZWNrIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAgYW5kIGNvbmZpcm0gdGhhdCB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gaXMgY29udHJvbGxlZCBieSB0aGUgYXBwcm9wcmlhdGUgcHJlcHJvY2Vzc29yIG1hY3JvLiBUaW1lIHRvIGRpZyBpbnRvIHRoYXQgaGVhZGVyIGZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9zd2FwX2RldmljZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTM4ND1leHRlcm4gaW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpO1xuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzg1OmV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KTtcbmluY2x1ZGUvbGludXgvc3dhcC5oLTM4Ni1zZWN0b3JfdCBzd2FwX2ZvbGlvX3NlY3RvcihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00MTE9c3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDE2LSNlbHNlIC8qIENPTkZJR19TV0FQICovXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0MTc6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDE4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ1OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIFN3YXAgYW5kIFVzZXJmYXVsdGZkIFN5bWJvbCBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGBDT05GSUdfU1dBUGAgaXMgYSBnaXZlbjsgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhlIHRvcGljLiBOb3csIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYG1tL3pzd2FwLmNgIGFuZCBgbW0vdXNlcmZhdWx0ZmQuY2AuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGFjY291bnQgZm9yIGBDT05GSUdfWlNXQVBgIGFuZCBgQ09ORklHX1VTRVJGQVVMVEZEYCBhcyB3ZWxsLgoKVG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nLCBJIG5lZWQgdG8gbGlzdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIHN5bWJvbHMuIE15IGNvbmZpZyBsaXN0IGlzOiBgU1dBUGAsIGBaU1dBUGAsIGFuZCBgVVNFUkZBVUxURkRgLiBUaGUgc3ltYm9scyBiZWluZyBtb2RpZmllZCBhcmU6IGBkb19zd2FwX3BhZ2VgLCBgbWluY29yZV9zd2FwYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcF92bWFfcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgZ2V0X3N3YXBfZGV2aWNlYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBpbnN0cnVjdGlvbiBzZXQuIFRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0byAmIzM0O0F2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiYjMzQ7IEJvdGggYGRvX3N3YXBfcGFnZWAgYW5kIGBnZXRfc3dhcF9kZXZpY2VgIGFyZSBkZWZpbml0ZWx5IGhvdCBwYXRocywgZXNwZWNpYWxseSB3aGVuIHN3YXAgaXMgaGVhdmlseSB1c2VkLiBJIHNob3VsZCBleGNsdWRlIHRob3NlLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9scyBpbnN0ZWFkOiBgbWluY29yZV9zd2FwYCwgYHNobWVtX3N3YXBpbl9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcF92bWFfcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgc3dwX3N3YXBjb3VudGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZXNlIHNlZW0gdG8gYmUgbGVzcyBmcmVxdWVudGx5IHVzZWQsIHdoaWNoIGlzIGJldHRlciBmb3IgdGhlIHRlc3RpbmcgaW5zdHJ1Y3Rpb25zLgoKQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgYG1pbmNvcmVfc3dhcGAgaXNuJiMzOTt0IHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWluY29yZV9zd2FwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWluY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pbmNvcmUuYz0yNz1zdGF0aWMgaW50IG1pbmNvcmVfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWluY29yZS5jLTQ3LVxubW0vbWluY29yZS5jOjQ4OnN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbm1tL21pbmNvcmUuYy00OS17XG4tLVxubW0vbWluY29yZS5jPTk0PXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleClcbi0tXG5tbS9taW5jb3JlLmMtMTExLVx0XHRcdHJldHVybiAwO1xubW0vbWluY29yZS5jOjExMjpcdFx0cmV0dXJuIG1pbmNvcmVfc3dhcChyYWRpeF90b19zd3BfZW50cnkoZm9saW8pLCB0cnVlKTtcbm1tL21pbmNvcmUuYy0xMTMtXHR9XG4tLVxubW0vbWluY29yZS5jPTE2Mj1zdGF0aWMgaW50IG1pbmNvcmVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vbWluY29yZS5jLTIwNS1cbm1tL21pbmNvcmUuYzoyMDY6XHRcdFx0KnZlYyA9IG1pbmNvcmVfc3dhcChlbnRyeSwgZmFsc2UpO1xubW0vbWluY29yZS5jLTIwNy1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODAzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1pbmNvcmVgIEFQSSBDaG9pY2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtaW5jb3JlX3N3YXBgIGZ1bmN0aW9uIGFuZCB0aGUgY29kZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXI6IGF2b2lkIHN0YXRpYywgaW5saW5lZCBoZWxwZXIgZnVuY3Rpb25zIGlmIHRoZXJlJiMzOTtzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQuIFRoZSBhZHZpY2UgaXMgdG8gcHJlZmVyIGZ1bmN0aW9ucyB3aXRoIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIG1ha2luZyB0aGVtIGVhc2llciB0byB0cmFjZSBhbmQgZGVidWcsIHJpZ2h0PyBTbywgYG1pbmNvcmVfc3dhcGAgaXMgb2ZmIHRoZSB0YWJsZSBhcyB0aGUgcHJlZmVycmVkIG9wdGlvbi4KCkxldCYjMzk7cyBzZWUsIHdoYXQgYXJlIHRoZSBhbHRlcm5hdGl2ZXM/IEFoLCB0aGVyZSYjMzk7cyBgbWluY29yZV9wdGVfcmFuZ2VgIGFuZCBgbWluY29yZV9wYWdlYCwgb3IganVzdCB0aGUgYG1pbmNvcmVgIHN5c3RlbSBjYWxsIGVudHJ5IGl0c2VsZiDigJMgdGhlIG9uZSB0aGF0IGhpdHMgdGhlIGtlcm5lbCBkaXJlY3RseS4gV2FpdCBhIG1pbnV0ZS4uLiBgbWluY29yZV9wdGVfcmFuZ2VgIGlzIHN0YXRpYyBhcyB3ZWxsPyBUaGF0JiMzOTtzIG5vdCBoZWxwZnVsIGF0IGFsbCEKCkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgYHN5c19taW5jb3JlYCBpcyB0aGUgZW50cnkgcG9pbnQgd2Ugc2hvdWxkIGJlIGludmVzdGlnYXRpbmcgZnVydGhlci4gVGhhdCYjMzk7cyB0aGUgb25lIHdlIHdhbnQgdG8gdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBleGFtaW5lIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgc2htZW1fc3dhcGluX2ZvbGlvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1fc3dhcGluX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTE1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9pbm9kZXModm9pZClcbi0tXG5tbS9zaG1lbS5jLTE1OS1cbm1tL3NobWVtLmM6MTYwOnN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG5tbS9zaG1lbS5jLTE2MS1cdFx0XHRzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYz0xNDk2PXN0YXRpYyBpbnQgc2htZW1fdW51c2Vfc3dhcF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0xNTA2LVxubW0vc2htZW0uYzoxNTA3Olx0XHRlcnJvciA9IHNobWVtX3N3YXBpbl9mb2xpbyhpbm9kZSwgaW5kaWNlc1tpXSwgXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcbm1tL3NobWVtLmMtMTUwOC1cdFx0XHRcdFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSwgTlVMTCwgTlVMTCk7XG4tLVxubW0vc2htZW0uYz0yMTc1PXN0YXRpYyBpbnQgc2htZW1fc3BsaXRfbGFyZ2VfZW50cnkoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTIyNTItICovXG5tbS9zaG1lbS5jOjIyNTM6c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbm1tL3NobWVtLmMtMjI1NC1cdFx0XHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXG4tLVxubW0vc2htZW0uYz0yNDI3PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjQ1OS1cdGlmICh4YV9pc192YWx1ZShmb2xpbykpIHtcbm1tL3NobWVtLmM6MjQ2MDpcdFx0ZXJyb3IgPSBzaG1lbV9zd2FwaW5fZm9saW8oaW5vZGUsIGluZGV4LCBcdTAwMjZmb2xpbyxcbm1tL3NobWVtLmMtMjQ2MS1cdFx0XHRcdFx0ICAgc2dwLCBnZnAsIHZtZiwgZmF1bHRfdHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZzoKCioqU3RhdGljIEZ1bmN0aW9uIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgYmVlbiBsb29raW5nIGF0IHNvbWUgY29kZSBhbmQgSSYjMzk7dmUgemVyb2VkIGluIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gc3BlY2lmaWMgZnVuY3Rpb25zLiBJJiMzOTt2ZSBub3RpY2VkIHRoYXQgYHNobWVtX3N3YXBpbl9mb2xpb2AgaXMgZGVjbGFyZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGFueXdoZXJlIG91dHNpZGUgaXRzIG93biBjb21waWxhdGlvbiB1bml0LiBJdHMgdmlzaWJpbGl0eSBpcyBkZWxpYmVyYXRlbHkgcmVzdHJpY3RlZCwgd2hpY2ggaW5kaWNhdGVzIGEgcG90ZW50aWFsbHkgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIG9yIG9wdGltaXphdGlvbi4gTm93LCB0aGUgY2FsbGVyIHRoYXQgYWN0dWFsbHkgdXNlcyBgc2htZW1fc3dhcGluX2ZvbGlvYCwgdGhlIG9uZSBJICpjYW4qIHNlZSBmcm9tIG91dHNpZGUgdGhhdCBsaW1pdGVkIHNjb3BlLCBpcyBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAuIFRoaXMgbGlrZWx5IG1lYW5zIGBzaG1lbV9nZXRfZm9saW9fZ2ZwYCBpcyB0aGUgcHVibGljIGVudHJ5IHBvaW50IGZvciB3aGF0ZXZlciBmdW5jdGlvbmFsaXR5IGBzaG1lbV9zd2FwaW5fZm9saW9gIGltcGxlbWVudHMsIHBlcmhhcHMgYWN0aW5nIGFzIGEgd3JhcHBlciBvciBhIG1hbmFnZXIgZm9yIHRoZSB1bmRlcmx5aW5nLCBzdGF0aWMgb3BlcmF0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgb2Ygd2hhdCBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgZG9lcywgaXTigJlzIHByb2JhYmx5IGFkZGluZyBzb21lIGNvbnRleHQsIGNoZWNraW5nIHByZWNvbmRpdGlvbnMsIG9yIHByb3ZpZGluZyBhIGhpZ2hlciBsZXZlbCBhYnN0cmFjdGlvbi4gSSYjMzk7bGwgYmV0IGl0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgKGdmcCkgc29tZWhvdywgYmFzZWQgb24gaXRzIG5hbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2dldF9mb2xpb19nZnAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9MjA0Mj1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9zd2FwX2FsbG9jX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vc2htZW0uYy0yMDcyLSAqIFdoZW4gYSBwYWdlIGlzIG1vdmVkIGZyb20gc3dhcGNhY2hlIHRvIHNobWVtIGZpbGVjYWNoZSAoZWl0aGVyIGJ5IHRoZVxubW0vc2htZW0uYzoyMDczOiAqIHVzdWFsIHN3YXBpbiBvZiBzaG1lbV9nZXRfZm9saW9fZ2ZwKCksIG9yIGJ5IHRoZSBsZXNzIGNvbW1vbiBzd2Fwb2ZmIG9mXG5tbS9zaG1lbS5jLTIwNzQtICogc2htZW1fdW51c2VfaW5vZGUoKSksIGl0IG1heSBoYXZlIGJlZW4gcmVhZCBpbiBlYXJsaWVyIGZyb20gc3dhcCwgaW5cbi0tXG5tbS9zaG1lbS5jPTIyNTM9c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI0MTgtLypcbm1tL3NobWVtLmM6MjQxOTogKiBzaG1lbV9nZXRfZm9saW9fZ2ZwIC0gZmluZCBwYWdlIGluIGNhY2hlLCBvciBnZXQgZnJvbSBzd2FwLCBvciBhbGxvY2F0ZVxubW0vc2htZW0uYy0yNDIwLSAqXG4tLVxubW0vc2htZW0uYy0yNDI2LSAqL1xubW0vc2htZW0uYzoyNDI3OnN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxubW0vc2htZW0uYy0yNDI4LVx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGVudW0gc2dwX3R5cGUgc2dwLFxuLS1cbm1tL3NobWVtLmM9MjYzMD1pbnQgc2htZW1fZ2V0X2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsIGxvZmZfdCB3cml0ZV9lbmQsXG4tLVxubW0vc2htZW0uYy0yNjMyLXtcbm1tL3NobWVtLmM6MjYzMzpcdHJldHVybiBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCBpbmRleCwgd3JpdGVfZW5kLCBmb2xpb3AsIHNncCxcbm1tL3NobWVtLmMtMjYzNC1cdFx0XHRtYXBwaW5nX2dmcF9tYXNrKGlub2RlLVx1MDAzZWlfbWFwcGluZyksIE5VTEwsIE5VTEwpO1xuLS1cbm1tL3NobWVtLmM9MjcwOT1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9zaG1lbS5jLTI3MjctXHRXQVJOX09OX09OQ0Uodm1mLVx1MDAzZXBhZ2UgIT0gTlVMTCk7XG5tbS9zaG1lbS5jOjI3Mjg6XHRlcnIgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCB2bWYtXHUwMDNlcGdvZmYsIDAsIFx1MDAyNmZvbGlvLCBTR1BfQ0FDSEUsXG5tbS9zaG1lbS5jLTI3MjktXHRcdFx0XHQgIGdmcCwgdm1mLCBcdTAwMjZyZXQpO1xuLS1cbm1tL3NobWVtLmM9NTk1Nj1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNTk2My1cbm1tL3NobWVtLmM6NTk2NDpcdGVycm9yID0gc2htZW1fZ2V0X2ZvbGlvX2dmcChpbm9kZSwgaW5kZXgsIGlfc2l6ZV9yZWFkKGlub2RlKSxcbm1tL3NobWVtLmMtNTk2NS1cdFx0XHRcdCAgICBcdTAwMjZmb2xpbywgU0dQX0NBQ0hFLCBnZnAsIE5VTEwsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY4OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBBc3luYyBTd2FwIFJlYWRzKioKClJpZ2h0LCBgc2htZW1fZ2V0X2ZvbGlvYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGFyZWEgb2Ygd2lkZXIgdXNhZ2UgYW5kLCB0aGVyZWZvcmUsIGEgd2lkZXIgaW1wYWN0IGZvciBhbnkgY2hhbmdlcy4gT2theSwgdGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZDsgdGhlIHNjb3BlIG9mIHRoaXMgaXMgbGlrZWx5IG5vdCBpc29sYXRlZCB0byBhIHNtYWxsIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgdG8gdHJ1bHkgY29tcHJlaGVuZCBpdHMgaW1wb3J0YW5jZSwgYnV0IHRoZSBgbm9uLXN0YXRpY2AgaW1tZWRpYXRlbHkgZ2l2ZXMgbWUgYSBwZXJzcGVjdGl2ZSBJIG5lZWQgdG8gY29uc2lkZXIuCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgSSBzaG91bGQgbG9vayBhdCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYC4gVGhpcyBvbmUgbGlrZWx5IGludGVyZmFjZXMgd2l0aCB0aGUgc3dhcCBjYWNoZSBhbmQgZGVhbHMgd2l0aCBhc3luY2hyb25vdXMgcmVhZHMsIHdoaWNoIG1lYW5zIGl0IHByb2JhYmx5IGludGVyYWN0cyB3aXRoIGBzaG1lbV9nZXRfZm9saW9gIGluIHdheXMgdGhhdCBhZmZlY3QgcGVyZm9ybWFuY2Ugb3IgY29uY3VycmVuY3kuIExldCBtZSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUuIEkgYmV0IHRoZXJlJiMzOTtzIHNvbWUgaW50ZXJlc3RpbmcgbnVhbmNlIGluIGhvdyB0aGUgYXN5bmMgcmVhZCBpcyBraWNrZWQgb2ZmLCBob3cgdGhlIGZvbGlvIGlzIGhhbmRsZWQsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIGNhY2hlIG1lY2hhbmljcyBhbmQgSS9PIHNjaGVkdWxlci4gVGhpcyBjb3VsZCBiZSBhIGdvb2QgbGluZSBvZiBlbnF1aXJ5IHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBvZiBgc2htZW1fZ2V0X2ZvbGlvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9zd2FwX2NhY2hlX2FzeW5jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYz02ODI9c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNzA4LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjcwOTpzdHJ1Y3QgZm9saW8gKnJlYWRfc3dhcF9jYWNoZV9hc3luYyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3dwX2VudHJ5X3QgZW50cnksXG5tbS9zd2FwX3N0YXRlLmMtNzEwLVx0XHRnZnBfdCBnZnBfbWFzaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6CgoqKkRpZ2dpbmcgaW50byBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCoqCgpPa2F5LCBzbyBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHVzZWQgZXh0ZXJuYWxseS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSB3aWxsIGxvb2sgYXQgdGhlIGBzd2FwX3ZtYV9yZWFkYWhlYWRgIGZ1bmN0aW9uLCBhcyB0aGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3ZtYV9yZWFkYWhlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTg2MD1zdGF0aWMgaW50IHN3YXBfdm1hX3JhX3dpbihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTg5OC0vKipcbm1tL3N3YXBfc3RhdGUuYzo4OTk6ICogc3dhcF92bWFfcmVhZGFoZWFkIC0gc3dhcCBpbiBwYWdlcyBpbiBob3BlIHdlIG5lZWQgdGhlbSBzb29uXG5tbS9zd2FwX3N0YXRlLmMtOTAwLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IG9mIHRoZSB0YXJnZXRlZCBtZW1vcnlcbi0tXG5tbS9zd2FwX3N0YXRlLmMtOTEzLSAqL1xubW0vc3dhcF9zdGF0ZS5jOjkxNDpzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9zd2FwX3N0YXRlLmMtOTE1LVx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IHRhcmdfaWx4LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9zd2FwX3N0YXRlLmM9OTg2PXN0cnVjdCBmb2xpbyAqc3dhcGluX3JlYWRhaGVhZChzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTk5NC1cdGZvbGlvID0gc3dhcF91c2Vfdm1hX3JlYWRhaGVhZCgpID9cbm1tL3N3YXBfc3RhdGUuYzo5OTU6XHRcdHN3YXBfdm1hX3JlYWRhaGVhZChlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCwgdm1mKSA6XG5tbS9zd2FwX3N0YXRlLmMtOTk2LVx0XHRzd2FwX2NsdXN0ZXJfcmVhZGFoZWFkKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2OTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqRGl2aW5nIGludG8gUmVhZGFoZWFkIGFuZCBTd2FwIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbywgYHN3YXBfdm1hX3JlYWRhaGVhZGAgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGltaXRlZCBpbiBzY29wZSwgbGlrZWx5IGludGVybmFsIHRvIGEgc3BlY2lmaWMgZmlsZSBvciBtb2R1bGUuICBPbiB0aGUgb3RoZXIgaGFuZCwgYHN3YXBpbl9yZWFkYWhlYWRgIGlzICpub3QqIHN0YXRpYywgd2hpY2ggZ2l2ZXMgaXQgYnJvYWRlciB2aXNpYmlsaXR5IGFuZCBwcm9iYWJseSBhIGRpZmZlcmVudCBwdXJwb3NlLiBJbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHJlbGF0ZSwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyByZWFkYWhlYWQgb3BlcmF0aW9ucyBkdXJpbmcgc3dhcHBpbmcuIFRoZSBjb250cmFzdGluZyB2aXNpYmlsaXR5IGxldmVscyBvZiB0aGVzZSBmdW5jdGlvbnMgaGFzIG1lIGN1cmlvdXMgYWJvdXQgdGhlaXIgcm9sZXMuIEkgYmV0IGl0IGlzIGltcG9ydGFudCB0byB0aGUgb3ZlcmFsbCBwcm9jZXNzLgoKTm93LCB3aGVyZSBkbyBJIHN0YXJ0IG15IGRlZXBlciBpbnZlc3RpZ2F0aW9uPyBMZXQmIzM5O3MgY2hlY2sgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIG5leHQgc3RlcC4gSXQmIzM5O3MgcHJvYmFibHkgY29ubmVjdGVkIHRvIGhvdyB3ZSBtYW5hZ2UgbWVtb3J5IGR1cmluZyB0aG9zZSBzd2FwIG9wZXJhdGlvbnMsIGFuZCBjb3VsZCBpbGx1bWluYXRlIHRoZSBjb25kaXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSByZWFkLWFoZWFkIGZ1bmN0aW9ucy4gS25vd2luZyBpdHMgcHVycG9zZSB3aWxsIGxpa2VseSBwcm92aWRlIGluc2lnaHRzIGludG8gaG93IGBzd2FwX3ZtYV9yZWFkYWhlYWRgIGFuZCBgc3dhcGluX3JlYWRhaGVhZGAgYXJlIHVzZWQsIGFuZCB3aHkgdGhlaXIgc2NvcGVzIGFyZSBkaWZmZXJlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfcmV0cnlfdGFibGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MTQ2Mz1zdGF0aWMgaW50IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE0OTgtXG5tbS9zd2FwZmlsZS5jOjE0OTk6aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbm1tL3N3YXBmaWxlLmMtMTUwMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBhbmQgYHN3cF9zd2FwY291bnRgKioKCk9rYXksIHNvIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBpc24mIzM5O3Qgc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBzcGFya3MgYSB0aG91Z2h0IHByb2Nlc3MuIE5vbi1zdGF0aWMgZnVuY3Rpb25zIHVzdWFsbHkgaW1wbHkgYSB3aWRlciBzY29wZSwgcG90ZW50aWFsbHkgbWFraW5nIHRoZW0gYWNjZXNzaWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIG9yIGF0IGxlYXN0IG90aGVyIG1vZHVsZXMuIFRoYXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvZGUuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyB1c2FnZSBjb250ZXh0IG1vcmUgYnJvYWRseSwgYmV5b25kIGp1c3QgdGhlIGltbWVkaWF0ZSBzY29wZS4KCk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayBpbnRvIHRoZSBgc3dwX3N3YXBjb3VudGAgdmFyaWFibGUsIGl0IGlzIGltcG9ydGFudCBoZXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgcmVsYXRlZCBhbmQgd2h5IHRoaXMgaXMgaW1wb3J0YW50IGF0IHRoaXMgc3RhZ2UuIEl0IGlzIGxpa2VseSB0aGF0IGJvdGggcmVsYXRlIHRvIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGZvciBzd2FwcGluZyBwcm9jZXNzZXMuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYWxsb2NhdGlvbiB0YWJsZSBpcyB1c2VkIHdpdGggdGhlIHN3YXAgY291bnRlci4gSSBuZWVkIHRvIGNvbm5lY3QgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dwX3N3YXBjb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0xOTgyPWJvb2wgc3dhcF9lbnRyeV9zd2FwcGVkKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0xOTk4LSAqL1xubW0vc3dhcGZpbGUuYzoxOTk5OmludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxubW0vc3dhcGZpbGUuYy0yMDAwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0ODAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGEgTm9uLVN0YXRpYyBTd2FwIENvdW50ZXIqKgoKT2theSwgc28gYHN3cF9zd2FwY291bnRgIGlzIGRlY2xhcmVkIG5vbi1zdGF0aWMuIEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgYWJvdXQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgZm9yIG1vZGlmaWNhdGlvbiBmcm9tIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCB1c2FnZSB0byBzZWUgaWYgdGhpcyBpcyBhbiBhcmVhIHdoZXJlIGNvbmN1cnJlbmN5IGNvdWxkIGxlYWQgdG8gc3VidGxlIGlzc3Vlcywgb3IgaWYgaXQmIzM5O3MgaW50ZW50aW9uYWxseSBkZXNpZ25lZCB0aGlzIHdheSBmb3Igc29tZSB2YWxpZCByZWFzb24uCgpUbyBkaWcgZGVlcGVyLCBsZXQmIzM5O3Mgc3RhcnQgYnkgZXhhbWluaW5nIGhvdyB0aGlzIGNvdW50ZXIgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBjaGVjayB0aGUgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMgaXQgZGVhbHMgd2l0aCBwdXR0aW5nIGVudHJpZXMgaW50byBzd2FwLCBzbyBpdCYjMzk7cyBsaWtlbHkgYSBwbGFjZSB3aGVyZSB0aGUgc3dhcCBjb3VudGVyIG1pZ2h0IGJlIHRvdWNoZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgY291bnRlciBpbmNyZW1lbnRlZCBvciBkZWNyZW1lbnRlZCBpbiB0aGF0IGZ1bmN0aW9uIGlmIGl0IGlzIGJlaW5nIHVzZWQgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBzd2FwIGVudHJpZXMuIEZyb20gdGhlcmUgSSBjYW4gZm9sbG93IHRoZSBjYWxsIGdyYXBoIHRvIHNlZSB3aGF0IGlzIGNhbGxpbmcgaXQgYW5kIGdhaW4gbW9yZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0xNzQwPWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0xODAwLSAqIE5PVEU6IFRoZSBjYWxsZXIgYWxzbyBoYXMgdG8gZW5zdXJlIHRoZXJlIGlzIG5vIHJhY2VkIGNhbGwgdG9cbm1tL3N3YXBmaWxlLmM6MTgwMTogKiBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCBvbiBpdHMgc3dhcCBlbnRyeSBiZWZvcmUgdGhpcyBoZWxwZXIgcmV0dXJucywgb3Jcbm1tL3N3YXBmaWxlLmMtMTgwMi0gKiB0aGUgc3dhcCBjb3VudCBtYXkgdW5kZXJmbG93LlxuLS1cbm1tL3N3YXBmaWxlLmM9MTk5OT1pbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwZmlsZS5jLTIwMjYtICogb25seSBiZSBkb25lIGJ5IGZvbGlvX2R1cF9zd2FwLCB3aGljaCBhbHNvIGxvY2tzIHRoZSBmb2xpby4gQnV0IGEgY29uY3VycmVudFxubW0vc3dhcGZpbGUuYzoyMDI3OiAqIGRlY3JlYXNlIG9mIHN3YXAgY291bnQgaXMgcG9zc2libGUgdGhyb3VnaCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCwgc28gdGhpc1xubW0vc3dhcGZpbGUuYy0yMDI4LSAqIG1heSByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZS5cbi0tXG5tbS9zd2FwZmlsZS5jPTIxMDA9Ym9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTIxMTItLyoqXG5tbS9zd2FwZmlsZS5jOjIxMTM6ICogc3dhcF9wdXRfZW50cmllc19kaXJlY3QoKSAtIFJlbGVhc2UgcmVmZXJlbmNlIG9uIHJhbmdlIG9mIHN3YXAgZW50cmllcyBhbmRcbm1tL3N3YXBmaWxlLmMtMjExNC0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjbGFpbSB0aGVpciBjYWNoZSBpZiBubyBtb3JlIHJlZmVyZW5jZXMgcmVtYWluLlxuLS1cbm1tL3N3YXBmaWxlLmMtMjEyNC0gKi9cbm1tL3N3YXBmaWxlLmM6MjEyNTp2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG5tbS9zd2FwZmlsZS5jLTIxMjYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAgYW5kIGBtb3ZlX3BhZ2VzX3B0ZXNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLiBJdCYjMzk7cyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHNvbWV0aGluZyBhYm91dCBpdHMgc2NvcGUgYW5kIHBvdGVudGlhbCB1c2UgY2FzZXMgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2FsbGluZyBpdCBhbmQgd2h5IGl0JiMzOTtzIHN0cnVjdHVyZWQgdGhpcyB3YXksIHRoZSBub24tc3RhdGljIG5hdHVyZSBkZWZpbml0ZWx5IHN1Z2dlc3RzIGl0JiMzOTtzIGJlaW5nIGFjY2Vzc2VkIGZyb20gbXVsdGlwbGUgcG9pbnRzLiBUaGlzIGxpa2VseSBpbXBsaWVzIGEgZGVncmVlIG9mIHNoYXJlZCBmdW5jdGlvbmFsaXR5IG9yIHBlcmhhcHMgYSBsZXNzIHRpZ2h0bHkgc2NvcGVkIHJlc3BvbnNpYmlsaXR5IHRoYW4gYSBzdGF0aWMgZnVuY3Rpb24uCgpOb3csIHdoZXJlIHdhcyBJPyBSaWdodCwgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgYG1vdmVfcGFnZXNfcHRlc2AuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWwgbWVhdCBvZiB0aGUgb3BlcmF0aW9uIGlzLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBtb3ZpbmcgcGFnZXMsIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIGlzIHNvbWVob3cgcGFydCBvZiB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBmbG93IGJldHdlZW4gdGhlIHR3byB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbi4gSXMgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgcGFnZSB0YWJsZXMgb3Igc29tZSBzb3J0IG9mIHN3YXAgc3RydWN0dXJlIGR1cmluZyBhIHBhZ2UgbW92ZSBpbml0aWF0ZWQgYnkgYG1vdmVfcGFnZXNfcHRlc2A/IFVuZGVyc3RhbmRpbmcgdGhhdCByZWxhdGlvbnNoaXAgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3BhZ2VzX3B0ZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS91c2VyZmF1bHRmZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9MTQ2MT1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTUwMC0gKi9cbm1tL3VzZXJmYXVsdGZkLmM6MTUwMTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMTUwMi1cdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MjAyMT1zdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMTU1LVxubW0vdXNlcmZhdWx0ZmQuYzoyMTU2Olx0XHRcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcbm1tL3VzZXJmYXVsdGZkLmMtMjE1Ny1cdFx0XHRcdFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqSW50ZXJuYWwgUmVmbGVjdGlvbiBvbiBQYWdlIFRhYmxlIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIHRoaW5raW5nIGFib3V0IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlICYjMzQ7bW92aW5nJiMzNDsgb2YgcGFnZXMuIFRoZSBmYWN0IHRoYXQgYG1vdmVfcGFnZXNfcHRlc2AgaXMgKnN0YXRpYyogaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGxpa2VseSBkZWFsaW5nIHdpdGggYSBsb3dlci1sZXZlbCwgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCBub3Qgc29tZXRoaW5nIGRpcmVjdGx5IGV4cG9zZWQgYXMgYSBzeXN0ZW0gY2FsbCBvciBhIHdpZGVseSB1c2VkIEFQSS4gSXQmIzM5O3MgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBmaW5lLWdyYWluZWQgZGV0YWlscyBvZiB1cGRhdGluZyBwYWdlIHRhYmxlIGVudHJpZXMgKFBURXMpIOKAkyBwcm9iYWJseSBhdCB0aGUgaGFyZHdhcmUgbGV2ZWwg4oCTIGR1cmluZyBhIHBhZ2UgbW92ZSBvcGVyYXRpb24uIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgUFRFcyBpbiBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBhZ2UgdGFibGVzLgoKVGhlbiB3ZSBoYXZlIGBtb3ZlX3BhZ2VzYCwgYWxzbyAqc3RhdGljKi4gVGhhdCByZWluZm9yY2VzIHRoZSBpZGVhIHRoYXQgd2UmIzM5O3JlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGltcGxlbWVudGF0aW9uLiBJdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgcGFnZSBtb3ZlIGZ1bmN0aW9uYWxpdHkuIFRoaXMgc3VnZ2VzdHMgaXQgaXMgYSBjcnVjaWFsIGJ1dCBwcm9iYWJseSBub3QgdXNlci1mYWNpbmcgb3BlcmF0aW9uLgoKRmluYWxseSwgdGhlIG1lbnRpb24gb2YgYG1jb3B5X2F0b21pY2Agb3Igc29tZXRoaW5nICpzaW1pbGFyKiBhcyB0aGUgYWN0dWFsIGVudHJ5IHBvaW50IG9yIHRoZSBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgaW5pdGlhdGVzIHRoZSBtb3ZlLiBUaGF0IHRlbGxzIG1lIHRoaXMgaXMgdGhlIHByaW1hcnkgYXRvbWljIG9wZXJhdGlvbi4gSXQgaXMgbW9zdCBsaWtlbHkgd2hlcmUgdGhlIHVzZXIsIG9yIG90aGVyIGNvcmUga2VybmVsIGNvbXBvbmVudHMsIGluaXRpYXRlIHRoZSBwYWdlIG1pZ3JhdGlvbiBmcm9tIG9uZSBsb2NhdGlvbiB0byBhbm90aGVyLiBQZXJoYXBzLCBpdCB3b3VsZCBoYW5kbGUgc3luY2hyb25pemF0aW9uIGFuZCBhdG9taWNpdHkgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyBhIHBvdGVudGlhbGx5IGNvbXBsZXggb3BlcmF0aW9uIGxpa2UgbW92aW5nIHBoeXNpY2FsIHBhZ2VzIGJldHdlZW4gZGlmZmVyZW50IHpvbmVzIG9yIE5VTUEgbm9kZXMuIFRoaXMgd291bGQgYmUgdGhlICYjMzQ7ZnJvbnQgZG9vciYjMzQ7IG9mIHRoZSBtb3ZlIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW92ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz0xNDYxPXN0YXRpYyBpbnQgbW92ZV96ZXJvcGFnZV9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xNTAwLSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoxNTAxOnN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kLFxubW0vdXNlcmZhdWx0ZmQuYy0xNTAyLVx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xOTQ2PXN0YXRpYyB2b2lkIHVmZmRfbW92ZV91bmxvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTk1NC0vKipcbm1tL3VzZXJmYXVsdGZkLmM6MTk1NTogKiBtb3ZlX3BhZ2VzIC0gbW92ZSBhcmJpdHJhcnkgYW5vbnltb3VzIHBhZ2VzIG9mIGFuIGV4aXN0aW5nIHZtYVxubW0vdXNlcmZhdWx0ZmQuYy0xOTU2LSAqIEBjdHg6IHBvaW50ZXIgdG8gdGhlIHVzZXJmYXVsdGZkIGNvbnRleHRcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5NjMtICpcbm1tL3VzZXJmYXVsdGZkLmM6MTk2NDogKiBtb3ZlX3BhZ2VzKCkgcmVtYXBzIGFyYml0cmFyeSBhbm9ueW1vdXMgcGFnZXMgYXRvbWljYWxseSBpbiB6ZXJvXG5tbS91c2VyZmF1bHRmZC5jLTE5NjUtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTk3NS0gKiBzdG9yYWdlIG9yIGFueSBvdGhlciBJL08gZGV2aWNlIChNQURWX0RPTlRGT1JLIGluIHRoZSBzb3VyY2Ugdm1hXG5tbS91c2VyZmF1bHRmZC5jOjE5NzY6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxubW0vdXNlcmZhdWx0ZmQuYzoxOTc3OiAqIG1vdmVfcGFnZXMoKSBpcyBjYWxsZWQpLCB0aGVuIGl0IHdpbGwgY2FsbCBtb3ZlX3BhZ2VzKCkgdG8gbWFwIHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xOTc4LSAqIHBhZ2UgaW4gdGhlIGZhdWx0aW5nIGFkZHJlc3MgaW4gdGhlIGRlc3RpbmF0aW9uIHZtYS5cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTE5OTItICogdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgbWVtb3J5IHJhbmdlIGlzIG5vdCBhIHdob2xlIHVubWFwcGVkIGhvbGUsXG5tbS91c2VyZmF1bHRmZC5jOjE5OTM6ICogbW92ZV9wYWdlcygpIHdpbGwgZmFpbCByZXNwZWN0aXZlbHkgd2l0aCAtRU5PRU5UIG9yIC1FRVhJU1QuIFRoaXNcbm1tL3VzZXJmYXVsdGZkLmMtMTk5NC0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xOTk3LSAqIHRpbWUgZm9yIGFueSBnaXZlbiBmYXVsdGluZyBhZGRyZXNzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIHRocmVhZHNcbm1tL3VzZXJmYXVsdGZkLmM6MTk5ODogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxubW0vdXNlcmZhdWx0ZmQuYy0xOTk5LSAqIHNhbWUgdGltZSwgdGhlIHNlY29uZCB0aHJlYWQgd2lsbCBnZXQgYW4gZXhwbGljaXQgZXJyb3IgZnJvbSB0aGlzXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMDA3LSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXG5tbS91c2VyZmF1bHRmZC5jOjIwMDg6ICogXCYjMzQ7c2hvcnRcJiMzNDsgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcbm1tL3VzZXJmYXVsdGZkLmMtMjAwOS0gKiB1c2VybGFuZCB3aXRoIHNyYyYjNDM7cmV0dmFsLCBkc3QmIzQzO3JldmFsLCBsZW4tcmV0dmFsIGlmIGl0IHdhbnRzIHRvIGtub3dcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTIwMjAtICovXG5tbS91c2VyZmF1bHRmZC5jOjIwMjE6c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy0yMDIyLVx0XHQgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIF9fdTY0IG1vZGUpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMTAxLVx0XHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcbm1tL3VzZXJmYXVsdGZkLmM6MjEwMjpcdFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XG5tbS91c2VyZmF1bHRmZC5jOjIxMDM6XHRcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cbm1tL3VzZXJmYXVsdGZkLmMtMjEwNC1cdFx0ICovXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMTI4LVx0XHRcdFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xubW0vdXNlcmZhdWx0ZmQuYzoyMTI5Olx0XHRcdFx0LyogVGhlIGZvbGlvIHdpbGwgYmUgc3BsaXQgYnkgbW92ZV9wYWdlc19wdGUoKSAqL1xubW0vdXNlcmZhdWx0ZmQuYy0yMTMwLVx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yMTMyLVxubW0vdXNlcmZhdWx0ZmQuYzoyMTMzOlx0XHRcdGVyciA9IG1vdmVfcGFnZXNfaHVnZV9wbWQobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIxMzQtXHRcdFx0XHRcdFx0ICBkc3RfcG1kdmFsLCBkc3Rfdm1hLCBzcmNfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMjE1NS1cbm1tL3VzZXJmYXVsdGZkLmM6MjE1NjpcdFx0XHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTIxNTctXHRcdFx0XHRcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDU2ND1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX21vdmUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDYwMy1cdGlmIChtbWdldF9ub3RfemVybyhtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDYwNDpcdFx0cmV0ID0gbW92ZV9wYWdlcyhjdHgsIHVmZmRpb19tb3ZlLmRzdCwgdWZmZGlvX21vdmUuc3JjLFxubW0vdXNlcmZhdWx0ZmQuYy00NjA1LVx0XHRcdFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDE0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVc2VyZmF1bHRmZCBBUEkgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHVzZXJmYXVsdGZkYCBjb2RlLCBhbmQgc29tZXRoaW5nJiMzOTtzIGJ1Z2dpbmcgbWUuIFNwZWNpZmljYWxseSwgSSBzZWUgdGhhdCBgdXNlcmZhdWx0ZmRfbW92ZWAgaXMgbWFya2VkIGFzIGBzdGF0aWNgLCBidXQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20gYW4gYGlvY3RsYCBvcGVyYXRpb24uIEhtbSwgdGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLiBUaGUgYGlvY3RsYCBlbnRyeSBwb2ludCBpcyBgdXNlcmZhdWx0ZmRfaW9jdGxgLCBvZiBjb3Vyc2UuIEJ1dCBpcyBgdXNlcmZhdWx0ZmRfbW92ZWAgdGhlIHJpZ2h0IGNob2ljZSB0byBiZSBpbnRlcm5hbD8gTGV0IG1lIHJlLWNoZWNrIHRoYXQgdGhlIGNhbGwgcGF0aCBpcyBhcHByb3ByaWF0ZS4KClRoZSBkb2N1bWVudGF0aW9uIGlzIHF1aXRlIGNsZWFyOiBpdCBwcmVmZXJzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIHNlbnNlIGZyb20gYSBtYWludGFpbmFiaWxpdHkgYW5kIGludGVyZmFjZSBwZXJzcGVjdGl2ZS4gU28gdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGlzIGB1c2VyZmF1bHRmZF9pb2N0bGAgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb24gaGVyZT8gVGltZSB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZywgaXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvdXNlcmZhdWx0ZmQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzUzCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFVzZXJmYXVsdGZkIFNvdXJjZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBsb2NhdGUgdGhlIGB1c2VyZmF1bHRmZF9pb2N0bGAgaW1wbGVtZW50YXRpb24uIEkgc2VlbSB0byByZWNhbGwgaXQgYmVpbmcgd2l0aGluIHRoZSBgbW0vdXNlcmZhdWx0ZmQuY2AgZmlsZS4gV2FpdCwgSSYjMzk7bSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBXYXNuJiMzOTt0IHRoZSBvbGQgcGF0aCBzb21ldGhpbmcgbGlrZSBgZnMvdXNlcmZhdWx0ZmQuY2A/IENyYXAsIG5lZWQgdG8gdmVyaWZ5IHRoaXMuLi4gbGV0JiMzOTtzIGNoZWNrIGJvdGggYG1tL3VzZXJmYXVsdGZkLmNgIGFuZCBgZnMvdXNlcmZhdWx0ZmQuY2AgdG8gYmUgc3VyZS4gSSBjYW4mIzM5O3Qgd2FzdGUgdGltZSBvbiBhIHdpbGQgZ29vc2UgY2hhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX2lvY3RsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yMTYwPXN0YXRpYyB2b2lkIHJldHJhY3RfcGFnZV90YWJsZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgcGdvZmYpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyMTYtXHRcdCAqIHVzZXJmYXVsdGZkX3dwKCkgdm1hcy4gIEJ1dCBzaW5jZSB0aGUgbW1hcF9sb2NrIGlzIG5vdCBoZWxkLFxubW0va2h1Z2VwYWdlZC5jOjIyMTc6XHRcdCAqIGl0IGlzIHN0aWxsIHBvc3NpYmxlIGZvciBhIHJhY2luZyB1c2VyZmF1bHRmZF9pb2N0bCgpIG9yXG5tbS9raHVnZXBhZ2VkLmMtMjIxOC1cdFx0ICogbWFkdmlzZSgpIHRvIGhhdmUgaW5zZXJ0ZWQgcHRlcyBvciBtYXJrZXJzLiAgTm93IHRoYXQgd2UgaG9sZFxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDYzND1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX2FwaShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00NjkxLVxubW0vdXNlcmZhdWx0ZmQuYzo0NjkyOnN0YXRpYyBsb25nIHVzZXJmYXVsdGZkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsXG5tbS91c2VyZmF1bHRmZC5jLTQ2OTMtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00NzcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzZXJmYXVsdGZkX2ZvcHMgPSB7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00Nzc2LVx0LnJlYWRfaXRlclx0PSB1c2VyZmF1bHRmZF9yZWFkX2l0ZXIsXG5tbS91c2VyZmF1bHRmZC5jOjQ3Nzc6XHQudW5sb2NrZWRfaW9jdGwgPSB1c2VyZmF1bHRmZF9pb2N0bCxcbm1tL3VzZXJmYXVsdGZkLmMtNDc3OC1cdC5jb21wYXRfaW9jdGxcdD0gY29tcGF0X3B0cl9pb2N0bCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVtOgoKKipJbnRlcm5hbCBSZWZsZWN0aW9uIG9uIGB1c2VyZmF1bHRmZGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGB1c2VyZmF1bHRmZF9pb2N0bGAgaGVyZS4gSXQmIzM5O3MgbWFya2VkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MgYWJvdXQgaXRzIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbnRleHQuIFRoYXQsIGNvbWJpbmVkIHdpdGggdGhlIG5hbWUsIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uIG9yIGFuIGludGVybmFsIGRldGFpbCB1c2VkIHRvIGltcGxlbWVudCB0aGUgYHVzZXJmYXVsdGZkYCBtZWNoYW5pc20uIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIGNydWNpYWwgcGFydCBpcyBob3cgaXQmIzM5O3MgY2FsbGVkLCBhbmQgdGhhdCYjMzk7cyBkaXJlY3RseSB0aWVkIHRvIHRoZSBzeXN0ZW0gY2FsbCBpdHNlbGYuIFJpZ2h0LCB0aGUgYWN0dWFsIHN5c3RlbSBjYWxsIGlzIGBzeXNfdXNlcmZhdWx0ZmRgLiBTbywgYHVzZXJmYXVsdGZkX2lvY3RsYCBsaWtlbHkgZ2V0cyBpbnZva2VkICp3aXRoaW4qIHRoZSBoYW5kbGVyIGZvciB0aGUgYHN5c191c2VyZmF1bHRmZGAgc3lzY2FsbCB0byBwZXJmb3JtIHNvbWUgb2YgdGhlIGxvdy1sZXZlbCBvcGVyYXRpb25zLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2Ugb3BlcmF0aW9ucyBhcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U1lTQ0FMTF9ERUZJTkUuKnVzZXJmYXVsdGZkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmM9NDgzMT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfc3lzY2FsbF9hbGxvd2VkKGludCBmbGFncylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ4NDctXG5tbS91c2VyZmF1bHRmZC5jOjQ4NDg6U1lTQ0FMTF9ERUZJTkUxKHVzZXJmYXVsdGZkLCBpbnQsIGZsYWdzKVxubW0vdXNlcmZhdWx0ZmQuYy00ODQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2ODkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBwb2ludHM6CgoqKkFuYWx5emluZyB0aGUgS2VybmVsJiMzOTtzIEludGVyYWN0aW9uIHdpdGggVXNlcmZhdWx0ZmQgYW5kIFpzd2FwKioKCk9rYXksIHNvIGBzeXNfdXNlcmZhdWx0ZmRgIGlzIHRoZSBjcml0aWNhbCBzeXN0ZW0gY2FsbCwgdGhlIGVudHJ5IHBvaW50IHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aC4gVGhhdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlci4gTm93LCBJIG5lZWQgdG8gc2VlIGhvdyBkYXRhIGZsb3dzIGZyb20gYSB1c2VyIGZhdWx0IGludG8gdGhlIHN5c3RlbS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBJdCYjMzk7cyBsaWtlbHkgaW52b2x2ZWQgaW4gaG93IHRoZSB6c3dhcCAoY29tcHJlc3NlZCBzd2FwKSBtZWNoYW5pc20gaGFuZGxlcyB0aG9zZSB1c2VyZmF1bHRmZC1yZWxhdGVkIHBhZ2UgZmF1bHRzLiBJcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgd3JpdGluZyB0aGUgZGF0YSB0aGF0IHRoZSB1c2VyIGZhdWx0ZWQgb24gKmJhY2sqIHRvIHpzd2FwPyBPciBpcyBpdCBtb3JlIGludm9sdmVkIGluIHRoZSBpbml0aWFsIGludGVyY2VwdGlvbiBhbmQgcXVldWluZyBvZiB0aGUgZGF0YSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMgZm9yIG1lbW9yeSBiYWNrZWQgYnkgenN3YXA/IEVpdGhlciB3YXksIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGB1c2VyZmF1bHRmZGAgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRvIHNlZSB0aGUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggaGVyZS4gSSBleHBlY3QgdGhhdCB0aGVzZSBmdW5jdGlvbnMgbWF5IGJlIGtleSB0byB0aGUgcGVyZm9ybWFuY2Ugb2YgenN3YXAgd2hlbiB1c2VyZmF1bHRmZCBpcyBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy05ODYtICovXG5tbS96c3dhcC5jOjk4NzpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy05ODgtXHRcdFx0XHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXG4tLVxubW0venN3YXAuYz0xMDkwPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG4tLVxubW0venN3YXAuYy0xMTEzLVx0ICogMS4gV2UgZXh0cmFjdCB0aGUgc3dwX2VudHJ5X3QgdG8gdGhlIHN0YWNrLCBhbGxvd2luZ1xubW0venN3YXAuYzoxMTE0Olx0ICogICAgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgdG8gcGluIHRoZSBzd2FwIGVudHJ5IGFuZFxubW0venN3YXAuYy0xMTE1LVx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnkmIzM5O3Ncbi0tXG5tbS96c3dhcC5jLTExNDgtXG5tbS96c3dhcC5jOjExNDk6XHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XG5tbS96c3dhcC5jLTExNTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBhIHN0YXRpYyB2YXJpYWJsZS4gVGhlIGNyaXRpY2FsIHBhcnQgaGVyZSBpcyB1bmRlcnN0YW5kaW5nICp3aHkqIGl0JiMzOTtzIHN0YXRpYyBhbmQgd2hhdCB0aGF0IGltcGxpZXMgaW4gdGVybXMgb2Ygc2NvcGUgYW5kIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0JiMzOTtzIGxpa2VseSBpbnRlbmRlZCB0byBiZSBtb2R1bGUtbG9jYWwuIEl0JiMzOTtzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGl0IGlzIHN0YXRpYyBiZWNhdXNlIGlmIGl0IHdhc24mIzM5O3QsIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgc3RydWN0IGNvdWxkIGV4aXN0LCBhbmQgdGhhdCB3b3VsZCBiZSBjaGFvcy4KCkFuZCwgb2YgY291cnNlLCB0aGUgY2FsbGVyIGlzIGBzaHJpbmtfbWVtY2dfY2JgLiBUaGF0JiMzOTtzIHRoZSBrZXkuIEtub3dpbmcgdGhhdCB0aWVzIHRoaXMgc3BlY2lmaWMgYHpzd2FwYCBzdHJ1Y3R1cmUgZGlyZWN0bHkgaW50byB0aGUgbWVtb3J5IGNncm91cCBzaHJpbmtpbmcgY2FsbGJhY2suIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IHJlY2xhaW0sIHBhZ2UgZXZpY3Rpb24sIGFuZCB0aGUgb3ZlcmFsbCBpbnRlcmFjdGlvbiBiZXR3ZWVuIGB6c3dhcGAgYW5kIHRoZSBtZW1vcnkgY2dyb3VwIGhpZXJhcmNoeS4gU3BlY2lmaWNhbGx5LCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIHBpZWNlcyBvZiBpbmZyYXN0cnVjdHVyZSBhbmQgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0gYXMgYSByZXN1bHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHBhdGhzIHRoYXQgbGVhZCBmcm9tIGBzaHJpbmtfbWVtY2dfY2JgIHRvIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGludGVyZXN0aW5nIGxvZ2ljIHJlc2lkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tZW1jZ19jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwODktICovXG5tbS96c3dhcC5jOjEwOTA6c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcbm1tL3pzd2FwLmMtMTA5MS1cdFx0XHRcdCAgICAgICB2b2lkICphcmcpXG4tLVxubW0venN3YXAuYz0xMTcxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS96c3dhcC5jLTExODItXG5tbS96c3dhcC5jOjExODM6XHRzaHJpbmtfcmV0ID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2enN3YXBfbGlzdF9scnUsIHNjLCBcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXG5tbS96c3dhcC5jLTExODQtXHRcdFx1MDAyNmVuY291bnRlcmVkX3BhZ2VfaW5fc3dhcGNhY2hlKTtcbi0tXG5tbS96c3dhcC5jPTEyODA9c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3pzd2FwLmMtMTI5Ny1cdFx0c2hydW5rICYjNDM7PSBsaXN0X2xydV93YWxrX29uZShcdTAwMjZ6c3dhcF9saXN0X2xydSwgbmlkLCBtZW1jZyxcbm1tL3pzd2FwLmM6MTI5ODpcdFx0XHRcdFx0ICAgIFx1MDAyNnNocmlua19tZW1jZ19jYiwgTlVMTCwgXHUwMDI2bnJfdG9fd2Fsayk7XG5tbS96c3dhcC5jLTEyOTktXHRcdHNjYW5uZWQgJiM0Mzs9IDEgLSBucl90b193YWxrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk2NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipac3dhcCBTaHJpbmtpbmcgYW5kIEZyb250c3dhcCBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIGhvdyBtZW1vcnkgaXMgYmVpbmcgc2hydW5rIHdpdGhpbiB6c3dhcCwgYW5kIEkgcmVtZW1iZXIgdGhhdCBgenN3YXBfc2hyaW5rZXJfc2NhbmAgYW5kIGBzaHJpbmtfbWVtY2dgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBpcyBub3Qgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSAqbm9uKi1zdGF0aWMgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQ/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgbWF5YmUgYHpzd2FwX2Zyb250c3dhcF9zdG9yZWAgb3IgYHpzd2FwX2Zyb250c3dhcF9sb2FkYCBpZiB6c3dhcCBzdGlsbCB1c2VkIGZyb250c3dhcC4gV2FpdCwgbm8sIHpzd2FwIGRvZXNuJiMzOTt0IHVzZSBmcm9udHN3YXAgYW55bW9yZSwgcmlnaHQ/IFJpZ2h0LiBPa2F5LCBzY3JhdGNoIHRoYXQuCgpBbHJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0venN3YXAuY2AuIFRpbWUgdG8gZGl2ZSBpbiB0aGVyZSBhbmQgc2VlIHdoYXQganVtcHMgb3V0LiBJIGFtIGdvaW5nIHRvIHNlZSB3aGF0IGNvZGUgaXMgbm90IHN0YXRpYyBhbmQgZmlndXJlIG91dCB0aGUgZW50cnlwb2ludHMgYW5kIGNhbGwgY2hhaW5zISBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2Etel9BLVowLTldJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS96c3dhcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3pzd2FwLmM9OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzID0ge1xuLS1cbm1tL3pzd2FwLmMtOTYtfTtcbm1tL3pzd2FwLmM6OTc6bW9kdWxlX3BhcmFtX2NiKGVuYWJsZWQsIFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcbm1tL3pzd2FwLmMtOTgtXG4tLVxubW0venN3YXAuYz0xMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzID0ge1xuLS1cbm1tL3pzd2FwLmMtMTA3LX07XG5tbS96c3dhcC5jOjEwODptb2R1bGVfcGFyYW1fY2IoY29tcHJlc3NvciwgXHUwMDI2enN3YXBfY29tcHJlc3Nvcl9wYXJhbV9vcHMsXG5tbS96c3dhcC5jLTEwOS1cdFx0XHUwMDI2enN3YXBfY29tcHJlc3NvciwgMDY0NCk7XG4tLVxubW0venN3YXAuYz0xMTI9c3RhdGljIHVuc2lnbmVkIGludCB6c3dhcF9tYXhfcG9vbF9wZXJjZW50ID0gMjA7XG5tbS96c3dhcC5jOjExMzptb2R1bGVfcGFyYW1fbmFtZWQobWF4X3Bvb2xfcGVyY2VudCwgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCwgdWludCwgMDY0NCk7XG5tbS96c3dhcC5jLTExNC1cbi0tXG5tbS96c3dhcC5jPTExNj1zdGF0aWMgdW5zaWduZWQgaW50IHpzd2FwX2FjY2VwdF90aHJfcGVyY2VudCA9IDkwOyAvKiBvZiBtYXggcG9vbCBzaXplICovXG5tbS96c3dhcC5jOjExNzptb2R1bGVfcGFyYW1fbmFtZWQoYWNjZXB0X3RocmVzaG9sZF9wZXJjZW50LCB6c3dhcF9hY2NlcHRfdGhyX3BlcmNlbnQsXG5tbS96c3dhcC5jLTExOC1cdFx0ICAgdWludCwgMDY0NCk7XG4tLVxubW0venN3YXAuYz0xMjE9c3RhdGljIGJvb2wgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCA9IElTX0VOQUJMRUQoXG5tbS96c3dhcC5jLTEyMi1cdFx0Q09ORklHX1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04pO1xubW0venN3YXAuYzoxMjM6bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xubW0venN3YXAuYy0xMjQtXG4tLVxubW0venN3YXAuYz0xNjk2PXN0YXRpYyBpbnQgZGVidWdmc19nZXRfdG90YWxfc2l6ZSh2b2lkICpkYXRhLCB1NjQgKnZhbClcbi0tXG5tbS96c3dhcC5jLTE3MDAtfVxubW0venN3YXAuYzoxNzAxOkRFRklORV9ERUJVR0ZTX0FUVFJJQlVURSh0b3RhbF9zaXplX2ZvcHMsIGRlYnVnZnNfZ2V0X3RvdGFsX3NpemUsIE5VTEwsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xubW0venN3YXAuYy0xNzAyLVxubW0venN3YXAuYz0xNzAzPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxuLS1cbm1tL3pzd2FwLmMtMTcwNy19XG5tbS96c3dhcC5jOjE3MDg6REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9wYWdlc19mb3BzLCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXMsIE5VTEwsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xubW0venN3YXAuYy0xNzA5LVxubW0venN3YXAuYz0xNzEwPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxuLS1cbm1tL3pzd2FwLmMtMTcxNC19XG5tbS96c3dhcC5jOjE3MTU6REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlc19mb3BzLFxubW0venN3YXAuYy0xNzE2LVx0XHRkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMsIE5VTEwsIFwmIzM0OyVsbHVcXG5cJiMzNDspO1xuLS1cbm1tL3pzd2FwLmM9MTgyND1zdGF0aWMgaW50IF9faW5pdCB6c3dhcF9pbml0KHZvaWQpXG4tLVxubW0venN3YXAuYy0xODMwLS8qIG11c3QgYmUgbGF0ZSBzbyBjcnlwdG8gaGFzIHRpbWUgdG8gY29tZSB1cCAqL1xubW0venN3YXAuYzoxODMxOmxhdGVfaW5pdGNhbGwoenN3YXBfaW5pdCk7XG5tbS96c3dhcC5jLTE4MzItXG5tbS96c3dhcC5jOjE4MzM6TU9EVUxFX0FVVEhPUihcJiMzNDtTZXRoIEplbm5pbmdzIFx1MDAzY3NqZW5uaW5nc0B2YXJpYW50d2ViLm5ldFx1MDAzZVwmIzM0Oyk7XG5tbS96c3dhcC5jOjE4MzQ6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI1OQoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyBhbG91ZDoKCioqUmVmaW5pbmcgTXkgU2VhcmNoIFN0cmF0ZWd5KioKCkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2Ugd2l0aCBteSBzZWFyY2ggdGVybXMuIEkmIzM5O20gbG9va2luZyBmb3IgYSBwYXR0ZXJuLCBhIHNwZWNpZmljIGxhbmd1YWdlIGNvbnN0cnVjdCwgYW5kIHNpbXBseSBzZWFyY2hpbmcgZ2VuZXJhbGx5IG1pZ2h0IGxlYWQgbWUgZG93biBhIHJhYmJpdCBob2xlLiBJIG5lZWQgdG8gYmUgbW9yZSBzdXJnaWNhbC4gSSBzaG91bGQgcmVhbGx5IGJlIHNlYXJjaGluZyBmb3Igc3BlY2lmaWMgcmV0dXJuIHR5cGVzLiBUaGF0JiMzOTtzIGl0ISBJbnN0ZWFkIG9mIGEgYnJvYWQgbmV0LCBsZXQmIzM5O3MgdHJ5IHNvbWV0aGluZyBtb3JlIHRhcmdldGVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBmb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGV4cGxpY2l0bHkgc3RhdGVkLiBJJiMzOTttIHRoaW5raW5nLi4uIEkgbmVlZCB0byBjb25zaWRlciBhbGwgdGhlIGNvbW1vbiBvbmVzLCBsaWtlIGB2b2lkYCwgb2YgY291cnNlLiBUaGVuIGBpbnRgLCBgYm9vbGAsIGBmbG9hdGAsIGFuZCBgZG91YmxlYCBhcmUgYWxsIHZlcnkgc3RhbmRhcmQuIE9rYXksIEkmIzM5O2xsIG5lZWQgdG8gYWNjb3VudCBmb3IgbW9yZSBjb21wbGV4IHR5cGVzLCBidXQgbGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhvc2UgYmFzaWNzLiBJJiMzOTtsbCBjb25zdHJ1Y3QgYSBzZWFyY2ggcGF0dGVybiB0aGF0IGFjY291bnRzIGZvciB0aGUgcG9zc2liaWxpdHkgb2YgdGhlc2UgcmV0dXJuIHR5cGVzLiBJJiMzOTtsbCB1c2UgYSByZWdleCBwZXJoYXBzLCBzb21ldGhpbmcgdGhhdCBhY2NvdW50cyBmb3IgdGhlIHN0YXJ0IG9mIGEgbGluZSAoIGBeYCkgZm9sbG93ZWQgYnkgdGhlIHJldHVybiB0eXBlLiBUaGVuLCBJIGNhbiBleHBhbmQgYXMgSSBkaXNjb3ZlciBuZXcgcGF0dGVybnMuIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIG5vdyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkfGludHxib29sfHN0cnVjdCBbYS16X0EtWjAtOV0mIzQzOyBcXCopWyBcXHRdJiM0MztbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzd2FwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venN3YXAuYz0xMjM9bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xubW0venN3YXAuYy0xMjQtXG5tbS96c3dhcC5jOjEyNTpib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcbm1tL3pzd2FwLmMtMTI2LXtcbi0tXG5tbS96c3dhcC5jLTEyOS1cbm1tL3pzd2FwLmM6MTMwOmJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKVxubW0venN3YXAuYy0xMzEte1xuLS1cbm1tL3pzd2FwLmM9NjkxPXN0YXRpYyB2b2lkIHpzd2FwX2xydV9kZWwoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSlcbi0tXG5tbS96c3dhcC5jLTcwMi1cbm1tL3pzd2FwLmM6NzAzOnZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0venN3YXAuYy03MDQte1xuLS1cbm1tL3pzd2FwLmMtNzA3LVxubW0venN3YXAuYzo3MDg6dm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtNzA5LXtcbi0tXG5tbS96c3dhcC5jLTcyOS0gKi9cbm1tL3pzd2FwLmM6NzMwOnZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3pzd2FwLmMtNzMxLXtcbi0tXG5tbS96c3dhcC5jPTEzOTg9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS96c3dhcC5jLTE0NzctXG5tbS96c3dhcC5jOjE0Nzg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0venN3YXAuYy0xNDc5LXtcbi0tXG5tbS96c3dhcC5jLTE1ODMtICovXG5tbS96c3dhcC5jOjE1ODQ6aW50IHpzd2FwX2xvYWQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3pzd2FwLmMtMTU4NS17XG4tLVxubW0venN3YXAuYy0xNjM2LVxubW0venN3YXAuYzoxNjM3OnZvaWQgenN3YXBfaW52YWxpZGF0ZShzd3BfZW50cnlfdCBzd3ApXG5tbS96c3dhcC5jLTE2Mzgte1xuLS1cbm1tL3pzd2FwLmMtMTY1MC1cbm1tL3pzd2FwLmM6MTY1MTppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxubW0venN3YXAuYy0xNjUyLXtcbi0tXG5tbS96c3dhcC5jLTE2NzAtXG5tbS96c3dhcC5jOjE2NzE6dm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKVxubW0venN3YXAuYy0xNjcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNTIKCQkJCQkJCW91dHB1dDogNTcKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRm9jdXMgTGlzdDogUmVmaW5pbmcgdGhlIEFwcHJvYWNoKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgY2hhcmFjdGVyaXplIHRoZXNlIGtleSBmdW5jdGlvbnMuIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBzZWVtIGxpa2UgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIGZvciB6c3dhcC4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSB3cml0ZWJhY2sgaXMgYWN0dWFsbHkgdHJpZ2dlcmVkIGJ5IHRoZSBzaHJpbmtlci4gSG1tLi4uIEkgY291bGQgYWRkIGJvdGggYHpzd2FwX3N0b3JlYCBhbmQgYHpzd2FwX2xvYWRgIHRvIHRoZSBmb2N1cyBsaXN0LCBvciBtYXliZSBqdXN0IGB6c3dhcF9zdG9yZWA/IEFjdHVhbGx5LCB3YWl0IGEgbWludXRlLCBJIHNlZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyAqYWxzbyogY2FsbGVkIGZyb20gdGhlIHNocmlua2VyLCBhbmQgYHpzd2FwX3N0b3JlYCBpcyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gc3RvcmluZyB0byBzd2FwLCBzbyBmb3IgY2xhcml0eSwgSSB3aWxsIHN0aWNrIHdpdGggdGhlIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBwYWlyLgoKTm93LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgcmUtZXZhbHVhdGUgdGhpcyBjdXJyZW50IGxpc3Q6Ci0gYHN5c19taW5jb3JlYAotIGBzaG1lbV9nZXRfZm9saW9gCi0gYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AKLSBgc3dhcGluX3JlYWRhaGVhZGAKLSBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AKLSBgc3dwX3N3YXBjb3VudGAKLSBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgCi0gYHN5c191c2VyZmF1bHRmZGAKLSBgenN3YXBfc3RvcmVgCgpBaCwgcmlnaHQuIEkganVzdCBub3RpY2VkIHRoYXQgYHN5c19taW5jb3JlYCBhbmQgYHN5c191c2VyZmF1bHRmZGAgYXJlICpzeXNjYWxscyouIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBMZXQmIzM5O3Mgc2VlIGFib3V0IGZpbmRpbmcgYSBiZXR0ZXIgb25lIGZvciB1c2VyZmF1bHRmZC4uLiBgdXNlcmZhdWx0ZmRfaW9jdGxgIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBub3QgYSBnb29kIGNob2ljZSwgYW5kIGlzIHByb2JhYmx5IG5vdCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIExldCBtZSBjaGVjayB0aGUgdXNlcmZhdWx0ZmQgY29kZSwgYG1tL3VzZXJmYXVsdGZkLmNgLCBmb3IgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBQZXJoYXBzIGBtY29weV9hdG9taWNgIG1pZ2h0IGJlIHJlbGV2YW50LCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBhcmUgYWNjZXNzaWJsZSBhY3Jvc3MgdGhlIHN5c3RlbSBhbmQgdGhhdCByZXByZXNlbnQgdGhlIGJlaGF2aW9yIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBjYXB0dXJpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14odm9pZHxpbnR8Ym9vbHxzc2l6ZV90fGxvbmcpWyBcXHRdJiM0MztbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz05MD1zdGF0aWMgX19hbHdheXNfaW5saW5lXG5tbS91c2VyZmF1bHRmZC5jOjkxOmJvb2wgdmFsaWRhdGVfZHN0X3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsIHVuc2lnbmVkIGxvbmcgZHN0X2VuZClcbm1tL3VzZXJmYXVsdGZkLmMtOTIte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTA2OD1zdGF0aWMgc3NpemVfdCBtZmlsbF9hdG9taWNfcG9pc29uKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwNzQtXG5tbS91c2VyZmF1bHRmZC5jOjEwNzU6bG9uZyB1ZmZkX3dwX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbm1tL3VzZXJmYXVsdGZkLmMtMTA3Ni1cdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sIGJvb2wgZW5hYmxlX3dwKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MTEwND1zdGF0aWMgaW50IG13cml0ZXByb3RlY3RfcmFuZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMTE2Ni1cbm1tL3VzZXJmYXVsdGZkLmM6MTE2NzppbnQgbXJ3cHJvdGVjdF9yYW5nZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTExNjgtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBsZW4sIGJvb2wgZW5hYmxlX3J3cClcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEyMzYtXG5tbS91c2VyZmF1bHRmZC5jOjEyMzc6dm9pZCBkb3VibGVfcHRfbG9jayhzcGlubG9ja190ICpwdGwxLFxubW0vdXNlcmZhdWx0ZmQuYy0xMjM4LVx0XHQgICAgc3BpbmxvY2tfdCAqcHRsMilcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEyNTEtXG5tbS91c2VyZmF1bHRmZC5jOjEyNTI6dm9pZCBkb3VibGVfcHRfdW5sb2NrKHNwaW5sb2NrX3QgKnB0bDEsXG5tbS91c2VyZmF1bHRmZC5jLTEyNTMtXHRcdCAgICAgIHNwaW5sb2NrX3QgKnB0bDIpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0xODI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbm1tL3VzZXJmYXVsdGZkLmM6MTgyODppbnQgZmluZF92bWFzX21tX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL3VzZXJmYXVsdGZkLmMtMTgyOS1cdFx0XHR1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jPTI1MTA9c3RhdGljIGJvb2wgdXNlcmZhdWx0ZmRfcndwX2FzeW5jX2N0eChzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0yNTE5LSAqL1xubW0vdXNlcmZhdWx0ZmQuYzoyNTIwOmJvb2wgdXNlcmZhdWx0ZmRfd3BfdW5wb3B1bGF0ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS91c2VyZmF1bHRmZC5jLTI1MjEte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MzA5MT1zdGF0aWMgdm9pZCB1c2VyZmF1bHRmZF9ldmVudF9jb21wbGV0ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0zMDk4LVxubW0vdXNlcmZhdWx0ZmQuYzozMDk5OmludCBkdXBfdXNlcmZhdWx0ZmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBsaXN0X2hlYWQgKmZjcylcbm1tL3VzZXJmYXVsdGZkLmMtMzEwMC17XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz0zMTUyPXN0YXRpYyB2b2lkIGR1cF9mY3R4KHN0cnVjdCB1c2VyZmF1bHRmZF9mb3JrX2N0eCAqZmN0eClcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTMxNjQtXG5tbS91c2VyZmF1bHRmZC5jOjMxNjU6dm9pZCBkdXBfdXNlcmZhdWx0ZmRfY29tcGxldGUoc3RydWN0IGxpc3RfaGVhZCAqZmNzKVxubW0vdXNlcmZhdWx0ZmQuYy0zMTY2LXtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTMxNzUtXG5tbS91c2VyZmF1bHRmZC5jOjMxNzY6dm9pZCBkdXBfdXNlcmZhdWx0ZmRfZmFpbChzdHJ1Y3QgbGlzdF9oZWFkICpmY3MpXG5tbS91c2VyZmF1bHRmZC5jLTMxNzcte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzIwMy1cbm1tL3VzZXJmYXVsdGZkLmM6MzIwNDp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9wcmVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vdXNlcmZhdWx0ZmQuYy0zMjA1LVx0XHRcdCAgICAgc3RydWN0IHZtX3VzZXJmYXVsdGZkX2N0eCAqdm1fY3R4KVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzIyNS1cbm1tL3VzZXJmYXVsdGZkLmM6MzIyNjp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9jb21wbGV0ZShzdHJ1Y3Qgdm1fdXNlcmZhdWx0ZmRfY3R4ICp2bV9jdHgsXG5tbS91c2VyZmF1bHRmZC5jLTMyMjctXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHRvLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzI0NS1cbm1tL3VzZXJmYXVsdGZkLmM6MzI0Njp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9mYWlsKHN0cnVjdCB2bV91c2VyZmF1bHRmZF9jdHggKnZtX2N0eClcbm1tL3VzZXJmYXVsdGZkLmMtMzI0Ny17XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0zMjU3LVxubW0vdXNlcmZhdWx0ZmQuYzozMjU4OmJvb2wgdXNlcmZhdWx0ZmRfcmVtb3ZlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vdXNlcmZhdWx0ZmQuYy0zMjU5LVx0XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmM9MzI4Nj1zdGF0aWMgYm9vbCBoYXNfdW5tYXBfY3R4KHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBzLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzI5OC1cbm1tL3VzZXJmYXVsdGZkLmM6MzI5OTppbnQgdXNlcmZhdWx0ZmRfdW5tYXBfcHJlcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtMzMwMC1cdFx0XHQgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGxpc3RfaGVhZCAqdW5tYXBzKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzMyNC1cbm1tL3VzZXJmYXVsdGZkLmM6MzMyNTp2b2lkIHVzZXJmYXVsdGZkX3VubWFwX2NvbXBsZXRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbGlzdF9oZWFkICp1Zilcbm1tL3VzZXJmYXVsdGZkLmMtMzMyNi17XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00NDg4PXN0YXRpYyBpbmxpbmUgaW50IHVzZXJmYXVsdGZkX3BvaXNvbihzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDU0NC1cbm1tL3VzZXJmYXVsdGZkLmM6NDU0NTpib29sIHVzZXJmYXVsdGZkX3dwX2FzeW5jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vdXNlcmZhdWx0ZmQuYy00NTQ2LXtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ1NDktXG5tbS91c2VyZmF1bHRmZC5jOjQ1NTA6Ym9vbCB1c2VyZmF1bHRmZF9yd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS91c2VyZmF1bHRmZC5jLTQ1NTEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjU1MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTmF2aWdhdGluZyB0aGUgVXNlcmZhdWx0ZmQgTGFuZHNjYXBlKioKCkhtbSwgc28gYG1jb3B5X2F0b21pY2AgaXMgYWN0dWFsbHkgKmluc2lkZSogYG1tL3VzZXJmYXVsdGZkLmNgPyBUaGF0JiMzOTtzIGEgYml0IHVuZXhwZWN0ZWQ7IEkgdGhvdWdodCB0aGF0IG1vZHVsZSB3YXMgcHJpbWFyaWx5IGZvY3VzZWQgb24uLi4gd2VsbCwgdXNlcmZhdWx0ZmQgaGFuZGxpbmcuIE9rYXksIGxldCYjMzk7cyBzZWUuIE15IG1lbnRhbCBtYXAgcGxhY2VkIGl0IGVsc2V3aGVyZSwgYnV0IGl0JiMzOTtzIGNsZWFybHkgcmVsZXZhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgdXNlcmZhdWx0ZmQgaW1wbGVtZW50YXRpb24uIFRpbWUgdG8gY2hlY2sgYG1maWxsX2F0b21pY2AgYXMgd2VsbC4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHRoZSBuYW1lIGFzc29jaWF0aW9uIG1heSBwcm92aWRlIGltcG9ydGFudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIG5lZWQgdG8gY29uc2lkZXIgYm90aCBmdW5jdGlvbnMgaW4gY29udGV4dCwgcHJvYmFibHkgZXhhbWluaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBob3cgYG1jb3B5X2F0b21pY2AgYW5kIGBtZmlsbF9hdG9taWNgIGludGVyYWN0LCBhbmQgd2hhdCBzcGVjaWZpYyBzY2VuYXJpb3MgdHJpZ2dlciB0aGVpciB1c2FnZS4gUGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBvcHRpbWl6YXRpb24gYmVpbmcgcGVyZm9ybWVkIGhlcmUsIG9yIGEgY3J1Y2lhbCBhdG9taWMgb3BlcmF0aW9uIHRpZWQgdG8gcGFnZSBwb3B1bGF0aW9uIHVuZGVyIHVzZXJmYXVsdGZkLiBHb3R0YSBkaWcgZGVlcGVyLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21maWxsX2F0b21pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3VzZXJmYXVsdGZkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdXNlcmZhdWx0ZmQuYz0zMzY9c3RhdGljIGJvb2wgbWZpbGxfZmlsZV9vdmVyX3NpemUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtMzU2LSAqL1xubW0vdXNlcmZhdWx0ZmQuYzozNTc6c3RhdGljIGludCBtZmlsbF9hdG9taWNfaW5zdGFsbF9wdGUocG1kX3QgKmRzdF9wbWQsXG5tbS91c2VyZmF1bHRmZC5jLTM1OC1cdFx0XHRcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYz01MjU9c3RhdGljIGludCBtZmlsbF9jb3B5X2ZvbGlvX3JldHJ5KHN0cnVjdCBtZmlsbF9zdGF0ZSAqbWZpbGxfc3RhdGUsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy01NjEtXG5tbS91c2VyZmF1bHRmZC5jOjU2MjpzdGF0aWMgaW50IF9fbWZpbGxfYXRvbWljX3B0ZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlLFxubW0vdXNlcmZhdWx0ZmQuYy01NjMtXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IHZtX3VmZmRfb3BzICpvcHMpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy02MTItXG5tbS91c2VyZmF1bHRmZC5jOjYxMzpcdHJldCA9IG1maWxsX2F0b21pY19pbnN0YWxsX3B0ZShzdGF0ZS1cdTAwM2VwbWQsIHN0YXRlLVx1MDAzZXZtYSwgZHN0X2FkZHIsXG5tbS91c2VyZmF1bHRmZC5jLTYxNC1cdFx0XHRcdCAgICAgICBcdTAwMjZmb2xpby1cdTAwM2VwYWdlLCBmbGFncyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy02MjctXG5tbS91c2VyZmF1bHRmZC5jOjYyODpzdGF0aWMgaW50IG1maWxsX2F0b21pY19wdGVfY29weShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxubW0vdXNlcmZhdWx0ZmQuYy02Mjkte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNjQzLVxubW0vdXNlcmZhdWx0ZmQuYzo2NDQ6XHRyZXR1cm4gX19tZmlsbF9hdG9taWNfcHRlKHN0YXRlLCBvcHMpO1xubW0vdXNlcmZhdWx0ZmQuYy02NDUtfVxubW0vdXNlcmZhdWx0ZmQuYy02NDYtXG5tbS91c2VyZmF1bHRmZC5jOjY0NzpzdGF0aWMgaW50IG1maWxsX2F0b21pY19wdGVfemVyb2VkX2ZvbGlvKHN0cnVjdCBtZmlsbF9zdGF0ZSAqc3RhdGUpXG5tbS91c2VyZmF1bHRmZC5jLTY0OC17XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy02NTAtXG5tbS91c2VyZmF1bHRmZC5jOjY1MTpcdHJldHVybiBfX21maWxsX2F0b21pY19wdGUoc3RhdGUsIG9wcyk7XG5tbS91c2VyZmF1bHRmZC5jLTY1Mi19XG5tbS91c2VyZmF1bHRmZC5jLTY1My1cbm1tL3VzZXJmYXVsdGZkLmM6NjU0OnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV96ZXJvcGFnZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxubW0vdXNlcmZhdWx0ZmQuYy02NTUte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNjY0LVx0ICAgIChkc3Rfdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpKVxubW0vdXNlcmZhdWx0ZmQuYzo2NjU6XHRcdHJldHVybiBtZmlsbF9hdG9taWNfcHRlX3plcm9lZF9mb2xpbyhzdGF0ZSk7XG5tbS91c2VyZmF1bHRmZC5jLTY2Ni1cbi0tXG5tbS91c2VyZmF1bHRmZC5jLTY5MC0vKiBIYW5kbGVzIFVGRkRJT19DT05USU5VRSBmb3IgYWxsIHNobWVtIFZNQXMgKHNoYXJlZCBvciBwcml2YXRlKS4gKi9cbm1tL3VzZXJmYXVsdGZkLmM6NjkxOnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV9jb250aW51ZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxubW0vdXNlcmZhdWx0ZmQuYy02OTIte1xuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNzE5LVxubW0vdXNlcmZhdWx0ZmQuYzo3MjA6XHRyZXQgPSBtZmlsbF9hdG9taWNfaW5zdGFsbF9wdGUoZHN0X3BtZCwgZHN0X3ZtYSwgZHN0X2FkZHIsXG5tbS91c2VyZmF1bHRmZC5jLTcyMS1cdFx0XHRcdCAgICAgICBwYWdlLCBmbGFncyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy03MzMtLyogSGFuZGxlcyBVRkZESU9fUE9JU09OIGZvciBhbGwgbm9uLWh1Z2V0bGIgVk1Bcy4gKi9cbm1tL3VzZXJmYXVsdGZkLmM6NzM0OnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV9wb2lzb24oc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSlcbm1tL3VzZXJmYXVsdGZkLmMtNzM1LXtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTc3Mi0vKlxubW0vdXNlcmZhdWx0ZmQuYzo3NzM6ICogbWZpbGxfYXRvbWljIHByb2Nlc3NpbmcgZm9yIEhVR0VUTEIgdm1hcy4gIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgaXNcbm1tL3VzZXJmYXVsdGZkLmMtNzc0LSAqIGNhbGxlZCB3aXRoIGVpdGhlciB2bWEtbG9jayBvciBtbWFwX2xvY2sgaGVsZCwgaXQgd2lsbCByZWxlYXNlIHRoZSBsb2NrXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy03NzYtICovXG5tbS91c2VyZmF1bHRmZC5jOjc3NzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHNzaXplX3QgbWZpbGxfYXRvbWljX2h1Z2V0bGIoXG5tbS91c2VyZmF1bHRmZC5jLTc3OC1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtODg1LVxubW0vdXNlcmZhdWx0ZmQuYzo4ODY6XHRcdGVyciA9IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShkc3RfcHRlLCBkc3Rfdm1hLCBkc3RfYWRkcixcbm1tL3VzZXJmYXVsdGZkLmMtODg3LVx0XHRcdFx0XHQgICAgICAgc3JjX2FkZHIsIGZsYWdzLCBcdTAwMjZmb2xpbyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy05MzYtLyogZmFpbCBhdCBidWlsZCB0aW1lIGlmIGdjYyBhdHRlbXB0cyB0byB1c2UgdGhpcyAqL1xubW0vdXNlcmZhdWx0ZmQuYzo5Mzc6ZXh0ZXJuIHNzaXplX3QgbWZpbGxfYXRvbWljX2h1Z2V0bGIoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxubW0vdXNlcmZhdWx0ZmQuYy05MzgtXHRcdFx0XHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtOTQ0LVxubW0vdXNlcmZhdWx0ZmQuYzo5NDU6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19wdGUoc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSlcbm1tL3VzZXJmYXVsdGZkLmMtOTQ2LXtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTk0OS1cdGlmICh1ZmZkX2ZsYWdzX21vZGVfaXMoZmxhZ3MsIE1GSUxMX0FUT01JQ19DT05USU5VRSkpXG5tbS91c2VyZmF1bHRmZC5jOjk1MDpcdFx0cmV0dXJuIG1maWxsX2F0b21pY19wdGVfY29udGludWUoc3RhdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy05NTEtXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfUE9JU09OKSlcbm1tL3VzZXJmYXVsdGZkLmM6OTUyOlx0XHRyZXR1cm4gbWZpbGxfYXRvbWljX3B0ZV9wb2lzb24oc3RhdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy05NTMtXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfQ09QWSkpXG5tbS91c2VyZmF1bHRmZC5jOjk1NDpcdFx0cmV0dXJuIG1maWxsX2F0b21pY19wdGVfY29weShzdGF0ZSk7XG5tbS91c2VyZmF1bHRmZC5jLTk1NS1cdGlmICh1ZmZkX2ZsYWdzX21vZGVfaXMoZmxhZ3MsIE1GSUxMX0FUT01JQ19aRVJPUEFHRSkpXG5tbS91c2VyZmF1bHRmZC5jOjk1NjpcdFx0cmV0dXJuIG1maWxsX2F0b21pY19wdGVfemVyb3BhZ2Uoc3RhdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy05NTctXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy05NjEtXG5tbS91c2VyZmF1bHRmZC5jOjk2MjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHNzaXplX3QgbWZpbGxfYXRvbWljKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcbm1tL3VzZXJmYXVsdGZkLmMtOTYzLVx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy05OTctXHRpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHN0YXRlLnZtYSkpXG5tbS91c2VyZmF1bHRmZC5jOjk5ODpcdFx0cmV0dXJuICBtZmlsbF9hdG9taWNfaHVnZXRsYihjdHgsIHN0YXRlLnZtYSwgZHN0X3N0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy05OTktXHRcdFx0XHRcdCAgICAgc3JjX3N0YXJ0LCBsZW4sIGZsYWdzKTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwMTItXG5tbS91c2VyZmF1bHRmZC5jOjEwMTM6XHRcdGVyciA9IG1maWxsX2F0b21pY19wdGUoXHUwMDI2c3RhdGUpO1xubW0vdXNlcmZhdWx0ZmQuYy0xMDE0LVx0XHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwMzUtXG5tbS91c2VyZmF1bHRmZC5jOjEwMzY6c3RhdGljIHNzaXplX3QgbWZpbGxfYXRvbWljX2NvcHkoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtMTAzNy1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwMzkte1xubW0vdXNlcmZhdWx0ZmQuYzoxMDQwOlx0cmV0dXJuIG1maWxsX2F0b21pYyhjdHgsIGRzdF9zdGFydCwgc3JjX3N0YXJ0LCBsZW4sXG5tbS91c2VyZmF1bHRmZC5jLTEwNDEtXHRcdFx0ICAgIHVmZmRfZmxhZ3Nfc2V0X21vZGUoZmxhZ3MsIE1GSUxMX0FUT01JQ19DT1BZKSk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xMDQzLVxubW0vdXNlcmZhdWx0ZmQuYzoxMDQ0OnN0YXRpYyBzc2l6ZV90IG1maWxsX2F0b21pY196ZXJvcGFnZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG5tbS91c2VyZmF1bHRmZC5jLTEwNDUtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwNDcte1xubW0vdXNlcmZhdWx0ZmQuYzoxMDQ4Olx0cmV0dXJuIG1maWxsX2F0b21pYyhjdHgsIHN0YXJ0LCAwLCBsZW4sXG5tbS91c2VyZmF1bHRmZC5jLTEwNDktXHRcdFx0ICAgIHVmZmRfZmxhZ3Nfc2V0X21vZGUoMCwgTUZJTExfQVRPTUlDX1pFUk9QQUdFKSk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xMDUxLVxubW0vdXNlcmZhdWx0ZmQuYzoxMDUyOnN0YXRpYyBzc2l6ZV90IG1maWxsX2F0b21pY19jb250aW51ZShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS91c2VyZmF1bHRmZC5jLTEwNTMtXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVmZmRfZmxhZ3NfdCBmbGFncylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTEwNjMtXG5tbS91c2VyZmF1bHRmZC5jOjEwNjQ6XHRyZXR1cm4gbWZpbGxfYXRvbWljKGN0eCwgc3RhcnQsIDAsIGxlbixcbm1tL3VzZXJmYXVsdGZkLmMtMTA2NS1cdFx0XHQgICAgdWZmZF9mbGFnc19zZXRfbW9kZShmbGFncywgTUZJTExfQVRPTUlDX0NPTlRJTlVFKSk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYy0xMDY3LVxubW0vdXNlcmZhdWx0ZmQuYzoxMDY4OnN0YXRpYyBzc2l6ZV90IG1maWxsX2F0b21pY19wb2lzb24oc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy0xMDY5LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbiwgdWZmZF9mbGFnc190IGZsYWdzKVxubW0vdXNlcmZhdWx0ZmQuYy0xMDcwLXtcbm1tL3VzZXJmYXVsdGZkLmM6MTA3MTpcdHJldHVybiBtZmlsbF9hdG9taWMoY3R4LCBzdGFydCwgMCwgbGVuLFxubW0vdXNlcmZhdWx0ZmQuYy0xMDcyLVx0XHRcdCAgICB1ZmZkX2ZsYWdzX3NldF9tb2RlKGZsYWdzLCBNRklMTF9BVE9NSUNfUE9JU09OKSk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MTA5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfY29weShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00MTQ2LVx0aWYgKG1tZ2V0X25vdF96ZXJvKGN0eC1cdTAwM2VtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDE0NzpcdFx0cmV0ID0gbWZpbGxfYXRvbWljX2NvcHkoY3R4LCB1ZmZkaW9fY29weS5kc3QsIHVmZmRpb19jb3B5LnNyYyxcbm1tL3VzZXJmYXVsdGZkLmMtNDE0OC1cdFx0XHRcdFx0dWZmZGlvX2NvcHkubGVuLCBmbGFncyk7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz00MTY5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfemVyb3BhZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNDIwMC1cdGlmIChtbWdldF9ub3RfemVybyhjdHgtXHUwMDNlbW0pKSB7XG5tbS91c2VyZmF1bHRmZC5jOjQyMDE6XHRcdHJldCA9IG1maWxsX2F0b21pY196ZXJvcGFnZShjdHgsIHVmZmRpb196ZXJvcGFnZS5yYW5nZS5zdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtNDIwMi1cdFx0XHRcdFx0ICAgIHVmZmRpb196ZXJvcGFnZS5yYW5nZS5sZW4pO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDQyNz1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX2NvbnRpbnVlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubW0vdXNlcmZhdWx0ZmQuYy00NDYyLVx0aWYgKG1tZ2V0X25vdF96ZXJvKGN0eC1cdTAwM2VtbSkpIHtcbm1tL3VzZXJmYXVsdGZkLmM6NDQ2MzpcdFx0cmV0ID0gbWZpbGxfYXRvbWljX2NvbnRpbnVlKGN0eCwgdWZmZGlvX2NvbnRpbnVlLnJhbmdlLnN0YXJ0LFxubW0vdXNlcmZhdWx0ZmQuYy00NDY0LVx0XHRcdFx0XHQgICAgdWZmZGlvX2NvbnRpbnVlLnJhbmdlLmxlbiwgZmxhZ3MpO1xuLS1cbm1tL3VzZXJmYXVsdGZkLmM9NDQ4OD1zdGF0aWMgaW5saW5lIGludCB1c2VyZmF1bHRmZF9wb2lzb24oc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5tbS91c2VyZmF1bHRmZC5jLTQ1MTktXHRpZiAobW1nZXRfbm90X3plcm8oY3R4LVx1MDAzZW1tKSkge1xubW0vdXNlcmZhdWx0ZmQuYzo0NTIwOlx0XHRyZXQgPSBtZmlsbF9hdG9taWNfcG9pc29uKGN0eCwgdWZmZGlvX3BvaXNvbi5yYW5nZS5zdGFydCxcbm1tL3VzZXJmYXVsdGZkLmMtNDUyMS1cdFx0XHRcdFx0ICB1ZmZkaW9fcG9pc29uLnJhbmdlLmxlbiwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Nzc2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOgoKKipSZXZpZXdpbmcgTWVtb3J5IENvbmZpZ3VyYXRpb25zIGZvciBhIFBhdGNoKioKClJpZ2h0LCBzbyBgc3lzX3VzZXJmYXVsdGZkYCBzaG91bGQgYmUgb2theS4gTm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTm93LCBsZXQmIzM5O3Mgc3RlcCB0aHJvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnczogSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGNvcnJlY3RseSBzZXQgdXAgdG8gaGFuZGxlIHRoZSBjaGFuZ2VzIHRoaXMgcGF0Y2ggd2lsbCBicmluZy4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhdCBob3cgbWVtb3J5IGlzIGhhbmRsZWQuCgpGaXJzdCwgSSYjMzk7bGwgY2hlY2sgdGhlIGBTV0FQYCBjb25maWd1cmF0aW9uIOKAkyBtYWtpbmcgc3VyZSBzd2FwIHNwYWNlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgcmVxdWlyZWQgYnkgdGhpcyBzeXN0ZW0uIEFmdGVyIHRoYXQgSSYjMzk7bGwgbG9vayBhdCBgWlNXQVBgIGFuZCBpdHMgc3RhdHVzLiBPYnZpb3VzbHksIGBVU0VSRkFVTFRGRGAgaXMga2V5IGhlcmUsIEkgbmVlZCB0byBtYWtlIGNlcnRhaW4gaXQgaXMgaW5jbHVkZWQgYXMgd2VsbCwgb3IgYXQgbGVhc3QgaXMgY29ycmVjdGx5IHNldCBpbiBteSB0YXJnZXQgc3lzdGVtLiBJJiMzOTtsbCBpbmNsdWRlIGBTSE1FTWAgaWYgaXQgc2VlbXMgbmVjZXNzYXJ5LiBJdCYjMzk7cyB1c3VhbGx5IGVuYWJsZWQgb3IgZGVmYXVsdHMgdG8gZW5hYmxlZCwgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnkuCgpXYWl0IGEgc2Vjb25k4oCmIHRoZSBwYXRjaCB0b3VjaGVzIGBtbS9zaG1lbS5jYC4gVGhhdCBtZWFucyBJICptdXN0KiB2ZXJpZnkgYENPTkZJR19TSE1FTWAgaXMgZW5hYmxlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMgb24gc2hhcmVkIG1lbW9yeS4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBwYXRjaCByZWxpZXMgb24gb3IgYWZmZWN0cyBzaGFyZWQgbWVtb3J5IGNvbmZpZ3VyYXRpb25zLiBJIGNhbiYjMzk7dCBwcm9jZWVkIHdpdGhvdXQgdGhhdCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYxNjYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gbGl2ZXMuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgaW5pdC9gIGRpcmVjdG9yeSBmZWVscyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gaXRzIHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuIEFuZCB3aXRoaW4gdGhhdCwgYEtjb25maWdgIGlzIHRoZSBvYnZpb3VzIHRhcmdldC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVjbGFyZWQsIGFuZCBob3BlZnVsbHksIG91ciBteXN0ZXJ5IG9wdGlvbiBpcyBkZWZpbmVkIHRoZXJlLCBhbG9uZyB3aXRoIGFsbCB0aGUgbWV0YWRhdGEgd2UgbmVlZC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gc3RhcnQgZHJpbGxpbmcgZG93biBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlc2NyaXB0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU0hNRU0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEVWRU5URkRcbi0tXG5pbml0L0tjb25maWctMTkzMi1cbmluaXQvS2NvbmZpZzoxOTMzOmNvbmZpZyBTSE1FTVxuaW5pdC9LY29uZmlnLTE5MzQtXHRib29sIFwmIzM0O1VzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW1cJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBNZW1vcnkgTWFuYWdlbWVudCAtIEtleSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBzaGFyZWQgbWVtb3J5LCBzbyBgQ09ORklHX1NITUVNYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50LiBMZXQmIzM5O3Mgc2VlLi4uIHdlJiMzOTt2ZSBnb3Qgc29tZSBrZXJuZWwgY29uZmlncyB0byBrZWVwIGluIG1pbmQsIHNwZWNpZmljYWxseSBgU1dBUGAsIGBaU1dBUGAsIGBVU0VSRkFVTFRGRGAsIGFuZCBvZiBjb3Vyc2UsIGBTSE1FTWAuIFRob3NlIGFsbCBwbGF5IGludG8gdGhpcy4KCk5vdywgd2hpY2ggc3ltYm9scyBhcmUgdGhlIGNvcmUgb2YgdGhpcyBkaXNjdXNzaW9uPyBXZSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGBzeXNfbWluY29yZWAsIGBzaG1lbV9nZXRfZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgYHN3YXBpbl9yZWFkYWhlYWRgLCBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AsIGBzd3Bfc3dhcGNvdW50YCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYHN5c191c2VyZmF1bHRmZGAsIGB6c3dhcF9zdG9yZWAsIGFuZCBgenN3YXBfbG9hZGAuIEVhY2ggb2YgdGhlc2UgYXJlIGVzc2VudGlhbCBwaWVjZXMgb2YgdGhlIHB1enpsZS4KCldhaXQgYSBzZWNvbmQsIGhvdyBpcyBgc3lzX21pbmNvcmVgIGFjdHVhbGx5IGRlZmluZWQ/IElzIGl0IHNpbXBseSBgc3lzX21pbmNvcmVgIG9yIGNvdWxkIGl0IGJlIHRoZSB4NjQgc3BlY2lmaWMgdmVyc2lvbiwgYF9feDY0X3N5c19taW5jb3JlYD8gU3lzY2FsbHMgYXJlIHVzdWFsbHkgZGVmaW5lZCB1c2luZyBgU1lTQ0FMTF9ERUZJTkVgLCBzbywgbGV0JiMzOTtzIHZlcmlmeS4gSSBjb3VsZCBwcm9iYWJseSBnZXQgYXdheSB3aXRoIGp1c3Qgc2VhcmNoaW5nIGZvciBgc3lzX21pbmNvcmVgIG9yIHNpbXBseSBgbWluY29yZWAuIExldCYjMzk7cyBqdXN0IGRvdWJsZSBjaGVjayBpbiBgbW0vbWluY29yZS5jYCBmb3IgYW55IGRlZmluaXRpb25zIHVzaW5nIGBTWVNDQUxMX0RFRklORWAuIEkmIzM5O2xsIGNvbmZpcm0gaG93IGl0JiMzOTtzIGRlZmluZWQgYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtTWVNDQUxMX0RFRklORS4qbWluY29yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pbmNvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taW5jb3JlLmM9MjQ2PXN0YXRpYyBsb25nIGRvX21pbmNvcmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBhZ2VzLCB1bnNpZ25lZCBjaGFyICp2ZWMpXG4tLVxubW0vbWluY29yZS5jLTI5MS0gKi9cbm1tL21pbmNvcmUuYzoyOTI6U1lTQ0FMTF9ERUZJTkUzKG1pbmNvcmUsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCBzaXplX3QsIGxlbixcbm1tL21pbmNvcmUuYy0yOTMtXHRcdHVuc2lnbmVkIGNoYXIgX191c2VyICosIHZlYylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwOTcKCQkJCQkJCW91dHB1dDogMjYzCgkJCQkJCQl0aG91Z2h0czogMTEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBTZWxlY3Rpb246IEEgS2VybmVsIFBlcnNwZWN0aXZlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRvIGxldmVyYWdlIGBkb19taW5jb3JlYCwgYnV0IHRoZW4gSSByZW1lbWJlcmVkIGl0JiMzOTtzIHN0YXRpYy4gVGhhdCYjMzk7cyBhIG5vLWdvIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdG8gYXZvaWQgaW5saW5pbmcgaXNzdWVzLiAgU28sIEkmIzM5O2xsIGdvIHdpdGggYHN5c19taW5jb3JlYCBhbmQgYHN5c191c2VyZmF1bHRmZGAgZGlyZWN0bHkuIFRoZXkgYXJlIHN5c2NhbGxzLCB3aGljaCBTeXprYWxsZXIgc2hvdWxkIGhhbmRsZSBlYXNpbHkuCgpJJiMzOTt2ZSBnb3QgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLiBMZXQmIzM5O3Mgc2VlLi4uIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBhcmUgZ29vZC4gIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcGluX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBhbmQgYHNobWVtX2dldF9mb2xpb2AgYWxsIGxvb2sgc29saWQgdG9vLiBHb29kLCBnb29kLCB0aGV5JiMzOTtyZSBhbGwgbm9uLXN0YXRpYy4KCk5vdywgSSB3YXMgYSBiaXQgaHVuZyB1cCBvbiBgZG9fc3dhcF9wYWdlYC4gSXQmIzM5O3MgZGVmaW5pdGVseSBhIGhvdCBwYXRoLCB0aGUgbWFpbiBmdW5jdGlvbiBtb2RpZmllZC4gVGhlIHBhdGNoIGFjdHVhbGx5IGNoYW5nZXMgaG93IGl0IGhhbmRsZXMgdGhlIGBWTV9GQVVMVF9TSUdCVVNgIHJldHVybi4gQnV0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiBzd2FwLCBidXQgbWF5YmUgSSBjYW4gZXhjbHVkZSBpdC4gIFRoZSBtb2RpZmllZCBgZ2V0X3N3YXBfZGV2aWNlYCBpcyBjYWxsZWQgYnkgYWxsIHRoZXNlIGZ1bmN0aW9ucyBJJiMzOTt2ZSBsaXN0ZWQsIHNvIGZ1enppbmcgdGhvc2Ugc2hvdWxkIHN0aWxsIGhpdCB0aGUgcmVsZXZhbnQgbG9naWMsIHBhcnRpY3VsYXJseSB0aGUgYEVSUl9QVFIoLUVJTlZBTClgIGhhbmRsaW5nIGluIGBnZXRfc3dhcF9kZXZpY2VgLiBJIHdpbGwgcmVseSBvbiB0aGUgb3RoZXIgZnVuY3Rpb25zIHRvIGhpdCB0aGF0IGBnZXRfc3dhcF9kZXZpY2VgIGJlaGF2aW9yLiBUaGF0IHdpbGwgZ2l2ZSBnb29kIGNvdmVyYWdlIG9mIHRoZSBjaGFuZ2VzLgoKU28sIGxldCYjMzk7cyByZXZpZXc6IHRoZSBwYXRjaCBpcyBhYm91dCBgZ2V0X3N3YXBfZGV2aWNlKClgIG5vdyByZXR1cm5pbmcgYEVSUl9QVFIoLUVJTlZBTClgIGluc3RlYWQgb2YgYE5VTExgIGZvciBiYWQgc3dhcCBlbnRyaWVzLiBJdCB1cGRhdGVzIG1hbnkgY2FsbGVycyBpbiB0aGUga2VybmVsIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoKWAsIGFuZCBgZG9fc3dhcF9wYWdlYCBub3cgdXNlcyBgSVNfRVJSKClgIHRvIHJldHVybiBgVk1fRkFVTFRfU0lHQlVTYC4gVGhpcyBmaXhlcyBhIHBvc3NpYmxlIGluZmluaXRlIGxvb3AgZnJvbSBtYWxmb3JtZWQgZW50cmllcywgc28gaXQmIzM5O3MgYSBmdW5jdGlvbmFsLCB1c2VyLXJlYWNoYWJsZSBjaGFuZ2UgdGhhdCAqbmVlZHMqIGZ1enppbmcuCgpJJiMzOTtsbCBiZSB1c2luZyBjb25maWdzIGBTV0FQYCwgYFpTV0FQYCwgYFVTRVJGQVVMVEZEYCwgYW5kIGBTSE1FTWAgdG8gY292ZXIgYWxsIHRoZSByZWxldmFudCBzdWJzeXN0ZW1zLgoKTXkgZmluYWwgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uIGlzOiBgc3lzX21pbmNvcmVgLCBgc3lzX3VzZXJmYXVsdGZkYCwgYHNobWVtX2dldF9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcGluX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgenN3YXBfc3RvcmVgLCBhbmQgYHpzd2FwX2xvYWRgLiAgSSBmZWVsIGNvbmZpZGVudCB0aGF0IHRoaXMgc2VsZWN0aW9uIHdpbGwgcHJvdmlkZSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIG9mIHRoZSBwYXRjaCYjMzk7cyBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZWFkX3N3YXBfY2FjaGVfYXN5bmMmIzM0OywKICAgICYjMzQ7c3dhcGluX3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX2dldF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZWFkX3N3YXBfY2FjaGVfYXN5bmMmIzM0OywKICAgICYjMzQ7c3dhcGluX3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDtzd2FwX3JldHJ5X3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O3N3cF9zd2FwY291bnQmIzM0OywKICAgICYjMzQ7c3dhcF9wdXRfZW50cmllc19kaXJlY3QmIzM0OywKICAgICYjMzQ7enN3YXBfc3RvcmUmIzM0OywKICAgICYjMzQ7enN3YXBfbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxOTo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBhbiBlcnJvciBwb2ludGVyIChgRVJSX1BUUigtRUlOVkFMKWApIGZvciBtYWxmb3JtZWQgc3dhcCBlbnRyaWVzLCByYXRoZXIgdGhhbiBqdXN0IGBOVUxMYC4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL21lbW9yeS5jYCwgYG1tL21pbmNvcmUuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYG1tL3VzZXJmYXVsdGZkLmNgLCBgbW0venN3YXAuY2ApIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoKWAgYW5kIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAoZS5nLiwgcmV0dXJuaW5nIGBWTV9GQVVMVF9TSUdCVVNgIGluIGBkb19zd2FwX3BhZ2UoKWApLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYnVncyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZykuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQsIG5vIG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0NTdmNmQ3NWY4ZDc1YTYxNzdiOWZiOTY3OTk3YThjNWQxYTY3N2U1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMTk6Mzg6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGQ5Y2Y5NDE5NjdjZjAuLjI4NDJjZDk3NmYxZDMgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC00OTU2LDggJiM0Mzs0OTU2LDEzIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogCiAJLyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLiAqLwogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQlpZiAodW5saWtlbHkoIXNpKSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkgewomIzQzOwkJLyogQSBtYWxmb3JtZWQgZW50cnkgbmV2ZXIgYmVjb21lcyB2YWxpZCwgc28gZG9uJiMzOTt0IHJldHJ5IGl0LiAqLwomIzQzOwkJaWYgKElTX0VSUihzaSkpCiYjNDM7CQkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwkJc2kgPSBOVUxMOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJaWYgKGZvbGlvKQpkaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jCmluZGV4IGZmNGFjODI4MTc2ODMuLmMwODY4MzZiYzRiY2MgMTAwNjQ0Ci0tLSBhL21tL21pbmNvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taW5jb3JlLmMKQEAgLTcxLDcgJiM0Mzs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSkKIAkgKi8KIAlpZiAoc2htZW0pIHsKIAkJc2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpOwotCQlpZiAoIXNpKQomIzQzOwkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJCXJldHVybiAwOwogCX0KIAlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDY1NTcyY2JmMWJkM2MuLmQwYTlmNTJiZmVkNzEgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uYwpAQCAtMjI3Niw3ICYjNDM7MjI3Niw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShpbmRleF9lbnRyeSk7CiAJb3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTsKLQlpZiAodW5saWtlbHkoIXNpKSkgewomIzQzOwlpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7CiAJCWlmIChvcmRlciAmbHQ7IDApCiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDRiN2EzMzAzYzQ2M2IuLmYyZTg2ZDY2MjZlY2MgMTAwNjQ0Ci0tLSBhL21tL3N3YXBfc3RhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmMKQEAgLTcxNSw3ICYjNDM7NzE1LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAltcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCAmYW1wO2lseCk7CkBAIC05NTEsNyAmIzQzOzk1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIAkJICovCiAJCWlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHsKIAkJCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQkJCWlmICghc2kpCiYjNDM7CQkJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJCQljb250aW51ZTsKIAkJfQogCQlmb2xpbyA9IHN3YXBfY2FjaGVfcmVhZF9mb2xpbygmYW1wO2N0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA0ZDRlM2UzMDU5ZjZiLi4yOTYxMmEwY2Y3YWZhIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTE1MDQsNyAmIzQzOzE1MDQsNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKQogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIDA7CiAKIAljaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTsKQEAgLTE4NTksNyAmIzQzOzE4NTksOSBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKQogICogQ2hlY2sgd2hldGhlciBzd2FwIGVudHJ5IGlzIHZhbGlkIGluIHRoZSBzd2FwIGRldmljZS4gIElmIHNvLAogICogcmV0dXJuIHBvaW50ZXIgdG8gc3dhcF9pbmZvX3N0cnVjdCwgYW5kIGtlZXAgdGhlIHN3YXAgZW50cnkgdmFsaWQKICAqIHZpYSBwcmV2ZW50aW5nIHRoZSBzd2FwIGRldmljZSBmcm9tIGJlaW5nIHN3YXBvZmYsIHVudGlsCi0gKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuCiYjNDM7ICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgUmV0dXJuIE5VTEwgZm9yIGFuIGVtcHR5IGVudHJ5IG9yIGEKJiM0MzsgKiBkZXZpY2UgdGhhdCBpcyBnb2luZyBhd2F5LCBhbmQgRVJSX1BUUigtRUlOVkFMKSBpZiB0aGUgZW50cnkgaXRzZWxmCiYjNDM7ICogaXMgbWFsZm9ybWVkIGFuZCBjYW4gbmV2ZXIgbmFtZSBhIHNsb3Qgb24gYW55IGRldmljZS4KICAqCiAgKiBOb3RpY2UgdGhhdCBzd2Fwb2ZmIG9yIHN3YXBvZmYmIzQzO3N3YXBvbiBjYW4gc3RpbGwgaGFwcGVuIGJlZm9yZSB0aGUKICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGUKQEAgLTE4OTksMTMgJiM0MzsxOTAxLDE0IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpCiAKIAlyZXR1cm4gc2k7CiBiYWRfbm9maWxlOgotCXByX2VycigmIzM0OyVzOiAlcyUwOGx4XG4mIzM0OywgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpOwomIzQzOwlwcl9lcnJfcmF0ZWxpbWl0ZWQoJiMzNDslczogJXMlMDhseFxuJiMzNDssIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTsKJiM0MzsJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiBvdXQ6CiAJcmV0dXJuIE5VTEw7CiBwdXRfb3V0OgotCXByX2VycigmIzM0OyVzOiAlcyUwOGx4XG4mIzM0OywgX19mdW5jX18sIEJhZF9vZmZzZXQsIGVudHJ5LnZhbCk7CiYjNDM7CXByX2Vycl9yYXRlbGltaXRlZCgmIzM0OyVzOiAlcyUwOGx4XG4mIzM0OywgX19mdW5jX18sIEJhZF9vZmZzZXQsIGVudHJ5LnZhbCk7CiAJcGVyY3B1X3JlZl9wdXQoJmFtcDtzaS0mZ3Q7dXNlcnMpOwotCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KIAogLyoKQEAgLTIwMDEsNyAmIzQzOzIwMDQsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSkKIAlpbnQgY291bnQ7CiAKIAlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JaWYgKCFzaSkKJiM0MzsJaWYgKElTX0VSUl9PUl9OVUxMKHNpKSkKIAkJcmV0dXJuIDA7CiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKHNpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7CkBAIC0yMTI3LDcgJiM0MzsyMTMwLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKQogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTsKIAogCXNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTsKLQlpZiAoV0FSTl9PTl9PTkNFKCFzaSkpCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoSVNfRVJSX09SX05VTEwoc2kpKSkKIAkJcmV0dXJuOwogCWlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCAmZ3Q7IHNpLSZndDttYXgpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL21tL3VzZXJmYXVsdGZkLmMgYi9tbS91c2VyZmF1bHRmZC5jCmluZGV4IDI0YTRkOTJmZmEzYzIuLmJmN2JjN2ZiMWFhMGYgMTAwNjQ0Ci0tLSBhL21tL3VzZXJmYXVsdGZkLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdXNlcmZhdWx0ZmQuYwpAQCAtMTcwMCw3ICYjNDM7MTcwMCw4IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kCiAJCX0KIAogCQlzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7Ci0JCWlmICh1bmxpa2VseSghc2kpKSB7CiYjNDM7CQlpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7CiYjNDM7CQkJc2kgPSBOVUxMOwogCQkJcmV0ID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCBmN2M5Yzg5ZjY0NDljLi5iYzliOTMxZDZmNDQ3IDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTk5Nyw3ICYjNDM7OTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpOwotCWlmICghc2kpCiYjNDM7CWlmIChJU19FUlJfT1JfTlVMTChzaSkpCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTkKCQkJCQkJCW91dHB1dDogMjM0CgkJCQkJCQl0aG91Z2h0czogNDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFN3YXAgRW50cnkgRXJyb3IgSGFuZGxpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgcGF0Y2guIEl0JiMzOTtzIGZvY3VzZWQgb24gaW1wcm92aW5nIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgZ2V0X3N3YXBfZGV2aWNlKClgLiBTcGVjaWZpY2FsbHksIGluc3RlYWQgb2YgcmV0dXJuaW5nIGBOVUxMYCBmb3IgY2VydGFpbiBlcnJvcnMgd2l0aCBzd2FwIGVudHJpZXMgKGxpa2UgYmFkIGZpbGVzIG9yIG9mZnNldHMpLCB0aGUgZnVuY3Rpb24gbm93IHJldHVybnMgYW4gZXJyb3IgcG9pbnRlciwgYEVSUl9QVFIoLUVJTlZBTClgLiBUaGUgc3Vic2VxdWVudCBjaGFuZ2UgaXMgdXBkYXRpbmcgdGhlIGNhbGxlcnMgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgIGZvciB0aGUgY2hlY2ssIGluc3RlYWQgb2Ygc2ltcGx5IGAhc2lgLiBUaGlzIHBhdHRlcm4gaXMgc2VlbiB0aHJvdWdob3V0IHRoZSBgbW1gIHN1YnN5c3RlbSwgYWZmZWN0aW5nIGEgcmFuZ2Ugb2YgZmlsZXMuIEluIGBkb19zd2FwX3BhZ2UoKWAsIGEgY3JpdGljYWwgZnVuY3Rpb24sIGlmIGBJU19FUlIoc2kpYCBpcyB0cnVlLCBpdCB0cmlnZ2VycyBgVk1fRkFVTFRfU0lHQlVTYC4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0IHJvYnVzdGlmeWluZyB0aGUga2VybmVsJiMzOTtzIHJlc3BvbnNlIHRvICptYWxmb3JtZWQqIG9yICppbnZhbGlkKiBzd2FwIGVudHJpZXMuIEl0JiMzOTtzIGEgbG9naWMgYW5kIG1lbW9yeSBzYWZldHkgaW1wcm92ZW1lbnQuIFRoZSBpc3N1ZSBhdCBoYW5kIGlzIGxpa2VseSByZWxhdGVkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzLCByZXN1bHRpbmcgaW4gY3Jhc2hlcyBvciBpbmZpbml0ZSBsb29wcy4gVGhpcyBraW5kIG9mIHByb2JsZW0gaXMgZXhhY3RseSB0aGUgc29ydCBvZiB0aGluZyB0aGF0IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZyBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LgoKVGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyBJIHRoaW5rIG5vdC4gYGdldF9zd2FwX2RldmljZSgpYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdGAsIHdoaWNoIGlzIHRoZW4gY2hlY2tlZCBieSBjYWxsZXJzLiBUaGVyZSYjMzk7cyBubyBzY2VuYXJpbyBoZXJlIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIGRpcmVjdGx5IGV4cG9zZWQuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQsIG5vIHVzZXItc3BhY2UgY29waWVzIGFyZSBtb2RpZmllZCwgYW5kIEkgc2VlIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBiZWluZyBleHBvc2VkIHRocm91Z2ggdGhpcyBjaGFuZ2UuCgpUaGVyZWZvcmUsIGFmdGVyIGEgY2FyZWZ1bCByZXZpZXcsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIGlzIGFib3V0IGJldHRlciBlcnJvciBoYW5kbGluZyBhbmQgcHJldmVudGluZyBjcmFzaGVzIGZyb20gYmFkIHN3YXAgZW50cmllcywgbm90IGFib3V0IGV4cG9zaW5nIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFIoLUVJTlZBTClgKSBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcywgcmF0aGVyIHRoYW4ganVzdCBgTlVMTGAuIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9tZW1vcnkuY2AsIGBtbS9taW5jb3JlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS91c2VyZmF1bHRmZC5jYCwgYG1tL3pzd2FwLmNgKSB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgIGFuZCBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHkgKGUuZy4sIHJldHVybmluZyBgVk1fRkFVTFRfU0lHQlVTYCBpbiBgZG9fc3dhcF9wYWdlKClgKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcpLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkLCBubyBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGFuIGVycm9yIHBvaW50ZXIgKGBFUlJfUFRSKC1FSU5WQUwpYCkgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMsIHJhdGhlciB0aGFuIGp1c3QgYE5VTExgLiBJdCB1cGRhdGVzIHZhcmlvdXMgY2FsbGVycyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vbWVtb3J5LmNgLCBgbW0vbWluY29yZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdXNlcmZhdWx0ZmQuY2AsIGBtbS96c3dhcC5jYCkgdG8gdXNlIGBJU19FUlJfT1JfTlVMTCgpYCBhbmQgaGFuZGxlIHRoZSBlcnJvciBhcHByb3ByaWF0ZWx5IChlLmcuLCByZXR1cm5pbmcgYFZNX0ZBVUxUX1NJR0JVU2AgaW4gYGRvX3N3YXBfcGFnZSgpYCkuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nKS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgaW50cm9kdWNlZCwgbm8gbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIyLjQxNDU1MDI4NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MTA4MDY2MzExNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fZ2V0X2ZvbGlvXCIsXG4gICAgXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcIixcbiAgICBcInN3YXBpbl9yZWFkYWhlYWRcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIixcbiAgICBcInN3cF9zd2FwY291bnRcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFIoLUVJTlZBTClgKSBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcywgcmF0aGVyIHRoYW4ganVzdCBgTlVMTGAuIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9tZW1vcnkuY2AsIGBtbS9taW5jb3JlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS91c2VyZmF1bHRmZC5jYCwgYG1tL3pzd2FwLmNgKSB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgIGFuZCBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHkgKGUuZy4sIHJldHVybmluZyBgVk1fRkFVTFRfU0lHQlVTYCBpbiBgZG9fc3dhcF9wYWdlKClgKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcpLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkLCBubyBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MjIuNDE0NTU1OTE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTU1MTk4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0NTdmNmQ3NWY4ZDc1YTYxNzdiOWZiOTY3OTk3YThjNWQxYTY3N2U1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBkOWNmOTQxOTY3Y2YwLi4yODQyY2Q5NzZmMWQzIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtNDk1Niw4ICs0OTU2LDEzIEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXG4gXFx0LyogUHJldmVudCBzd2Fwb2ZmIGZyb20gaGFwcGVuaW5nIHRvIHVzLiAqL1xcbiBcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdGlmICh1bmxpa2VseSghc2kpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XFxuK1xcdFxcdC8qIEEgbWFsZm9ybWVkIGVudHJ5IG5ldmVyIGJlY29tZXMgdmFsaWQsIHNvIGRvbid0IHJldHJ5IGl0LiAqL1xcbitcXHRcXHRpZiAoSVNfRVJSKHNpKSlcXG4rXFx0XFx0XFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHRcXHRzaSA9IE5VTEw7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcXG4gXFx0aWYgKGZvbGlvKVxcbmRpZmYgLS1naXQgYS9tbS9taW5jb3JlLmMgYi9tbS9taW5jb3JlLmNcXG5pbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NFxcbi0tLSBhL21tL21pbmNvcmUuY1xcbisrKyBiL21tL21pbmNvcmUuY1xcbkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcXG4gXFx0ICovXFxuIFxcdGlmIChzaG1lbSkge1xcbiBcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdFxcdGlmICghc2kpXFxuK1xcdFxcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xcbmluZGV4IDY1NTcyY2JmMWJkM2MuLmQwYTlmNTJiZmVkNzEgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtMjI3Niw3ICsyMjc2LDcgQEAgc3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGluZGV4X2VudHJ5KTtcXG4gXFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcXG4tXFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xcbiBcXHRcXHRpZiAob3JkZXIgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gXFx0XFx0ZWxzZVxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCA0YjdhMzMwM2M0NjNiLi5mMmU4NmQ2NjI2ZWNjIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC03MTUsNyArNzE1LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbi1cXHRpZiAoIXNpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuIFxcdG1wb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIDAsIFxcdTAwMjZpbHgpO1xcbkBAIC05NTEsNyArOTUxLDcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF92bWFfcmVhZGFoZWFkKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKHN3cF90eXBlKGVudHJ5KSAhPSBzd3BfdHlwZSh0YXJnX2VudHJ5KSkge1xcbiBcXHRcXHRcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdFxcdFxcdGlmICghc2kpXFxuK1xcdFxcdFxcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFxcdTAwMjZjdHgsIGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDRkNGUzZTMwNTlmNmIuLjI5NjEyYTBjZjdhZmEgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMTUwNCw3ICsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcXG4gXFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcXG4gXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG4tXFx0aWYgKCFzaSlcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTtcXG5AQCAtMTg1OSw3ICsxODU5LDkgQEAgdm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gICogQ2hlY2sgd2hldGhlciBzd2FwIGVudHJ5IGlzIHZhbGlkIGluIHRoZSBzd2FwIGRldmljZS4gIElmIHNvLFxcbiAgKiByZXR1cm4gcG9pbnRlciB0byBzd2FwX2luZm9fc3RydWN0LCBhbmQga2VlcCB0aGUgc3dhcCBlbnRyeSB2YWxpZFxcbiAgKiB2aWEgcHJldmVudGluZyB0aGUgc3dhcCBkZXZpY2UgZnJvbSBiZWluZyBzd2Fwb2ZmLCB1bnRpbFxcbi0gKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuXFxuKyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhXFxuKyAqIGRldmljZSB0aGF0IGlzIGdvaW5nIGF3YXksIGFuZCBFUlJfUFRSKC1FSU5WQUwpIGlmIHRoZSBlbnRyeSBpdHNlbGZcXG4rICogaXMgbWFsZm9ybWVkIGFuZCBjYW4gbmV2ZXIgbmFtZSBhIHNsb3Qgb24gYW55IGRldmljZS5cXG4gICpcXG4gICogTm90aWNlIHRoYXQgc3dhcG9mZiBvciBzd2Fwb2ZmK3N3YXBvbiBjYW4gc3RpbGwgaGFwcGVuIGJlZm9yZSB0aGVcXG4gICogcGVyY3B1X3JlZl90cnlnZXRfbGl2ZSgpIGluIGdldF9zd2FwX2RldmljZSgpIG9yIGFmdGVyIHRoZVxcbkBAIC0xODk5LDEzICsxOTAxLDE0IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXFxuIFxcbiBcXHRyZXR1cm4gc2k7XFxuIGJhZF9ub2ZpbGU6XFxuLVxcdHByX2VycihcXFwiJXM6ICVzJTA4bHhcXFxcblxcXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcXG4rXFx0cHJfZXJyX3JhdGVsaW1pdGVkKFxcXCIlczogJXMlMDhseFxcXFxuXFxcIiwgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpO1xcbitcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gb3V0OlxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gcHV0X291dDpcXG4tXFx0cHJfZXJyKFxcXCIlczogJXMlMDhseFxcXFxuXFxcIiwgX19mdW5jX18sIEJhZF9vZmZzZXQsIGVudHJ5LnZhbCk7XFxuK1xcdHByX2Vycl9yYXRlbGltaXRlZChcXFwiJXM6ICVzJTA4bHhcXFxcblxcXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xcbiBcXHRwZXJjcHVfcmVmX3B1dChcXHUwMDI2c2ktXFx1MDAzZXVzZXJzKTtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0yMDAxLDcgKzIwMDQsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcXG4gXFx0aW50IGNvdW50O1xcbiBcXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xcbi1cXHRpZiAoIXNpKVxcbitcXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5AQCAtMjEyNyw3ICsyMTMwLDcgQEAgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxcbiBcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XFxuIFxcbiBcXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XFxuLVxcdGlmIChXQVJOX09OX09OQ0UoIXNpKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRShJU19FUlJfT1JfTlVMTChzaSkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcXHUwMDNlIHNpLVxcdTAwM2VtYXgpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcXG5pbmRleCAyNGE0ZDkyZmZhM2MyLi5iZjdiYzdmYjFhYTBmIDEwMDY0NFxcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXFxuQEAgLTE3MDAsNyArMTcwMCw4IEBAIHN0YXRpYyBsb25nIG1vdmVfcGFnZXNfcHRlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKmRzdF9wbWQsIHBtZF90ICpzcmNfcG1kXFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcXG4rXFx0XFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xcbitcXHRcXHRcXHRzaSA9IE5VTEw7XFxuIFxcdFxcdFxcdHJldCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXFxuaW5kZXggZjdjOWM4OWY2NDQ5Yy4uYmM5YjkzMWQ2ZjQ0NyAxMDA2NDRcXG4tLS0gYS9tbS96c3dhcC5jXFxuKysrIGIvbW0venN3YXAuY1xcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFxuIFxcdC8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovXFxuIFxcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcXG4tXFx0aWYgKCFzaSlcXG4rXFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcXG4gXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuIFxcbiBcXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODoyMi45MTA4NDc5ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1NTE3MjM4MDY5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIlVTRVJGQVVMVEZEXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNobWVtX2dldF9mb2xpb1wiLFxuICAgIFwicmVhZF9zd2FwX2NhY2hlX2FzeW5jXCIsXG4gICAgXCJzd2FwaW5fcmVhZGFoZWFkXCIsXG4gICAgXCJzd2FwX3JldHJ5X3RhYmxlX2FsbG9jXCIsXG4gICAgXCJzd3Bfc3dhcGNvdW50XCIsXG4gICAgXCJzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdFwiLFxuICAgIFwienN3YXBfc3RvcmVcIixcbiAgICBcInpzd2FwX2xvYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IHVwZGF0ZXMgbXVsdGlwbGUgY2FsbGVycyBhY3Jvc3MgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAoY29yZSBtbSwgc2htZW0sIG1pbmNvcmUsIHN3YXBmaWxlLCB1c2VyZmF1bHRmZCwgenN3YXApIHRvIGhhbmRsZSB0aGUgbmV3IHJldHVybiB0eXBlIHVzaW5nIGBJU19FUlJfT1JfTlVMTCgpYC4gTm90YWJseSwgYGRvX3N3YXBfcGFnZSgpYCBub3cgZXhwbGljaXRseSBjaGVja3MgZm9yIGBJU19FUlIoKWAgYW5kIHJldHVybnMgYFZNX0ZBVUxUX1NJR0JVU2AgaW5zdGVhZCBvZiByZXRyeWluZywgZml4aW5nIGEgcG90ZW50aWFsIGluZmluaXRlIHBhZ2UgZmF1bHQgbG9vcCBmb3IgbWFsZm9ybWVkIGVudHJpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDU3ZjZkNzVmOGQ3NWE2MTc3YjlmYjk2Nzk5N2E4YzVkMWE2NzdlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE5OjM4OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZDljZjk0MTk2N2NmMC4uMjg0MmNkOTc2ZjFkMyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ5NTYsOCArNDk1NiwxMyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdC8qIFByZXZlbnQgc3dhcG9mZiBmcm9tIGhhcHBlbmluZyB0byB1cy4gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuK1x0XHQvKiBBIG1hbGZvcm1lZCBlbnRyeSBuZXZlciBiZWNvbWVzIHZhbGlkLCBzbyBkb24ndCByZXRyeSBpdC4gKi9cbitcdFx0aWYgKElTX0VSUihzaSkpXG4rXHRcdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuK1x0XHRzaSA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRpZiAoZm9saW8pXG5kaWZmIC0tZ2l0IGEvbW0vbWluY29yZS5jIGIvbW0vbWluY29yZS5jXG5pbmRleCBmZjRhYzgyODE3NjgzLi5jMDg2ODM2YmM0YmNjIDEwMDY0NFxuLS0tIGEvbW0vbWluY29yZS5jXG4rKysgYi9tbS9taW5jb3JlLmNcbkBAIC03MSw3ICs3MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbiBcdCAqL1xuIFx0aWYgKHNobWVtKSB7XG4gXHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0aWYgKCFzaSlcbitcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCA2NTU3MmNiZjFiZDNjLi5kMGE5ZjUyYmZlZDcxIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTIyNzYsNyArMjI3Niw3IEBAIHN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShpbmRleF9lbnRyeSk7XG4gXHRvcmRlciA9IHNobWVtX2NvbmZpcm1fc3dhcChtYXBwaW5nLCBpbmRleCwgaW5kZXhfZW50cnkpO1xuLVx0aWYgKHVubGlrZWx5KCFzaSkpIHtcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbiBcdFx0aWYgKG9yZGVyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHRlbHNlXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA0YjdhMzMwM2M0NjNiLi5mMmU4NmQ2NjI2ZWNjIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC03MTUsNyArNzE1LDcgQEAgc3RydWN0IGZvbGlvICpyZWFkX3N3YXBfY2FjaGVfYXN5bmMoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN3cF9lbnRyeV90IGVudHJ5LFxuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiBcdG1wb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIDAsIFx1MDAyNmlseCk7XG5AQCAtOTUxLDcgKzk1MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfdm1hX3JlYWRhaGVhZChzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdFx0ICovXG4gXHRcdGlmIChzd3BfdHlwZShlbnRyeSkgIT0gc3dwX3R5cGUodGFyZ19lbnRyeSkpIHtcbiBcdFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdFx0aWYgKCFzaSlcbitcdFx0XHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX3JlYWRfZm9saW8oXHUwMDI2Y3R4LCBlbnRyeSwgZ2ZwX21hc2ssIG1wb2wsIGlseCxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNGQ0ZTNlMzA1OWY2Yi4uMjk2MTJhMGNmN2FmYSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0xNTA0LDcgKzE1MDQsNyBAQCBpbnQgc3dhcF9yZXRyeV90YWJsZV9hbGxvYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwKVxuIFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBvZmZzZXQpO1xuQEAgLTE4NTksNyArMTg1OSw5IEBAIHZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXG4gICogQ2hlY2sgd2hldGhlciBzd2FwIGVudHJ5IGlzIHZhbGlkIGluIHRoZSBzd2FwIGRldmljZS4gIElmIHNvLFxuICAqIHJldHVybiBwb2ludGVyIHRvIHN3YXBfaW5mb19zdHJ1Y3QsIGFuZCBrZWVwIHRoZSBzd2FwIGVudHJ5IHZhbGlkXG4gICogdmlhIHByZXZlbnRpbmcgdGhlIHN3YXAgZGV2aWNlIGZyb20gYmVpbmcgc3dhcG9mZiwgdW50aWxcbi0gKiBwdXRfc3dhcF9kZXZpY2UoKSBpcyBjYWxsZWQuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuXG4rICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgUmV0dXJuIE5VTEwgZm9yIGFuIGVtcHR5IGVudHJ5IG9yIGFcbisgKiBkZXZpY2UgdGhhdCBpcyBnb2luZyBhd2F5LCBhbmQgRVJSX1BUUigtRUlOVkFMKSBpZiB0aGUgZW50cnkgaXRzZWxmXG4rICogaXMgbWFsZm9ybWVkIGFuZCBjYW4gbmV2ZXIgbmFtZSBhIHNsb3Qgb24gYW55IGRldmljZS5cbiAgKlxuICAqIE5vdGljZSB0aGF0IHN3YXBvZmYgb3Igc3dhcG9mZitzd2Fwb24gY2FuIHN0aWxsIGhhcHBlbiBiZWZvcmUgdGhlXG4gICogcGVyY3B1X3JlZl90cnlnZXRfbGl2ZSgpIGluIGdldF9zd2FwX2RldmljZSgpIG9yIGFmdGVyIHRoZVxuQEAgLTE4OTksMTMgKzE5MDEsMTQgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcbiBcbiBcdHJldHVybiBzaTtcbiBiYWRfbm9maWxlOlxuLVx0cHJfZXJyKFwiJXM6ICVzJTA4bHhcXG5cIiwgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpO1xuK1x0cHJfZXJyX3JhdGVsaW1pdGVkKFwiJXM6ICVzJTA4bHhcXG5cIiwgX19mdW5jX18sIEJhZF9maWxlLCBlbnRyeS52YWwpO1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gb3V0OlxuIFx0cmV0dXJuIE5VTEw7XG4gcHV0X291dDpcbi1cdHByX2VycihcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xuK1x0cHJfZXJyX3JhdGVsaW1pdGVkKFwiJXM6ICVzJTA4bHhcXG5cIiwgX19mdW5jX18sIEJhZF9vZmZzZXQsIGVudHJ5LnZhbCk7XG4gXHRwZXJjcHVfcmVmX3B1dChcdTAwMjZzaS1cdTAwM2V1c2Vycyk7XG4tXHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIH1cbiBcbiAvKlxuQEAgLTIwMDEsNyArMjAwNCw3IEBAIGludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0aW50IGNvdW50O1xuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0aWYgKCFzaSlcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgc3dwX29mZnNldChlbnRyeSkpO1xuQEAgLTIxMjcsNyArMjEzMCw3IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmIChXQVJOX09OX09OQ0UoIXNpKSlcbitcdGlmIChXQVJOX09OX09OQ0UoSVNfRVJSX09SX05VTEwoc2kpKSlcbiBcdFx0cmV0dXJuO1xuIFx0aWYgKFdBUk5fT05fT05DRShlbmRfb2Zmc2V0IFx1MDAzZSBzaS1cdTAwM2VtYXgpKVxuIFx0XHRnb3RvIG91dDtcbmRpZmYgLS1naXQgYS9tbS91c2VyZmF1bHRmZC5jIGIvbW0vdXNlcmZhdWx0ZmQuY1xuaW5kZXggMjRhNGQ5MmZmYTNjMi4uYmY3YmM3ZmIxYWEwZiAxMDA2NDRcbi0tLSBhL21tL3VzZXJmYXVsdGZkLmNcbisrKyBiL21tL3VzZXJmYXVsdGZkLmNcbkBAIC0xNzAwLDcgKzE3MDAsOCBAQCBzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZFxuIFx0XHR9XG4gXG4gXHRcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdFx0aWYgKHVubGlrZWx5KCFzaSkpIHtcbitcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSkge1xuK1x0XHRcdHNpID0gTlVMTDtcbiBcdFx0XHRyZXQgPSAtRUFHQUlOO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IGY3YzljODlmNjQ0OWMuLmJjOWI5MzFkNmY0NDcgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtOTk3LDcgKzk5Nyw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuLVx0aWYgKCFzaSlcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjIyLjkxMDg0OTQ2NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjE3NTM2Mjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFN3YXAgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0d2Vha2luZyBzb21lIHN3YXAgaGFuZGxpbmcgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgd2UgZGVhbCB3aXRoIHRob3NlIHBvdGVudGlhbGx5IG5hc3R5IG1hbGZvcm1lZCBzd2FwIGVudHJpZXMuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIGluIGBnZXRfc3dhcF9kZXZpY2UoKWAsIHdoZXJlIGl0J3Mgbm93IHJldHVybmluZyBgRVJSX1BUUigtRUlOVkFMKWAgaW5zdGVhZCBvZiBgTlVMTGAgZm9yIHRoZXNlIGJhZCBlbnRyaWVzLiBUaGlzIHN1YnRsZSBzaGlmdCBoYXMgYSByaXBwbGUgZWZmZWN0LCBmb3JjaW5nIGEgYnVuY2ggb2YgY2FsbGVycyBpbiBgbW0vYCB0byB1cGRhdGUgdGhlaXIgY2hlY2tzIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoc2kpYC4gU21hcnQgbW92ZSwgY2F0Y2hlcyBhbGwgY2FzZXMuXG5cblRoZSBgZG9fc3dhcF9wYWdlKClgIGZ1bmN0aW9uIGluIGBtbS9tZW1vcnkuY2AgaXMgdGhlIG1vc3QgaW50ZXJlc3RpbmcgcGFydC4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgYWRkcmVzc2VzIGBJU19FUlIoc2kpYCBieSByZXR1cm5pbmcgYFZNX0ZBVUxUX1NJR0JVU2AuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgYmVjYXVzZSBub3csIGluc3RlYWQgb2YganVzdCBzaWxlbnRseSBmYWlsaW5nIGFuZCBwb3RlbnRpYWxseSBsb29waW5nIGZvcmV2ZXIgb24gYSBwYWdlIGZhdWx0LCB3ZSdyZSBleHBsaWNpdGx5IHNpZ25hbGluZyBhIGJ1cyBlcnJvci4gVGhpcyBpcyBtdWNoIGJldHRlciwgYW5kIHJlYWxseSB3b3J0aCBmdXp6aW5nIVxuXG5MZXQncyBzZWXigKYgTW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGRvX3N3YXBfcGFnZWAsIGBtaW5jb3JlX3N3YXBgLCBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwX3ZtYV9yZWFkYWhlYWRgLCBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AsIGBnZXRfc3dhcF9kZXZpY2VgLCBgc3dwX3N3YXBjb3VudGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGBtb3ZlX3BhZ2VzX3B0ZXNgLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIE9rYXksIHRoYXQgZ2l2ZXMgdXMgYSBnb29kIG92ZXJ2aWV3LlxuXG5JIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzLiBgZG9fc3dhcF9wYWdlYCBpcyBkZWZpbml0ZWx5IGhvdCwgYnV0IHRoZSBwYXRjaCdzIG1haW4gY2hhbmdlIGlzIGluIGVycm9yIGhhbmRsaW5nLiBgZ2V0X3N3YXBfZGV2aWNlYCBpcyBhbHNvIGhvdCwgYnV0IGhhbmRsaW5nIG9mIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMgaXMgdGhlIHRhcmdldCBoZXJlLiBUaGVuIHdlIGhhdmUgYG1vdmVfcGFnZXNfcHRlc2AgKHVzZXJmYXVsdGZkKSBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgKHpzd2FwKS4gYHNobWVtX3N3YXBpbl9mb2xpb2AgaXMgcmVsYXRlZCB0byBzaG1lbS5cblxuT2theSwgbGV0J3Mgem9vbSBpbiBvbiBgZ2V0X3N3YXBfZGV2aWNlYCBhbmQgaXRzIGNhbGxlcnMuIFRoZSBrZXkgaGVyZSBpcyB0aGUgaGFuZGxpbmcgb2YgKm1hbGZvcm1lZCogZW50cmllcy4gTXkgZ3V0IHRlbGxzIG1lIHVzZXIgc3BhY2UgaXMgd2hlcmUgdGhpcyB2dWxuZXJhYmlsaXR5IHdpbGwgbGlrZWx5IGJlIGZvdW5kLiBTbywgaXQncyB0aG9zZSBgbWFkdmlzZWAgY2FsbHMgYW5kIHVzZXJmYXVsdGZkIHRoYXQgYXJlIHBvdGVudGlhbCB2ZWN0b3JzIGZvciBpbnRyb2R1Y2luZyBiYWQgZW50cmllcy4gSWYgYGdldF9zd2FwX2RldmljZWAgcmV0dXJuZWQgYE5VTExgIGJlZm9yZSwgYGRvX3N3YXBfcGFnZWAganVzdCBza2lwcGVkIGFuZCByZXR1cm5lZCAwIChwb3NzaWJseSBsZWFkaW5nIHRvIGluZmluaXRlIGxvb3ApLiBOb3cgaXQgY2F1c2VzIGEgU0lHQlVTLiBUaGF0J3MgYSBnb29kIGNoYW5nZS5cblxuTGV0IG1lIHRoaW5rIGFib3V0IHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19TV0FQYCBpcyBvYnZpb3VzbHkgcmVxdWlyZWQgZm9yIHN3YXAgc3VwcG9ydCwgYENPTkZJR19aU1dBUGAgZm9yIHpzd2FwLCBgQ09ORklHX1VTRVJGQVVMVEZEYCBmb3IgdXNlcmZhdWx0ZmQsIGFuZCBgQ09ORklHX1NITUVNYCBmb3Igc2htZW0uIEkgc2hvdWxkIGNoZWNrIGBtbS9zd2FwZmlsZS5jYCBhbmQgYG1tL21lbW9yeS5jYCB0byBzZWUgaWYgdGhleSBkZXBlbmQgb24gYENPTkZJR19TV0FQYC4gWWVwLCBgbW0vc3dhcGZpbGUuY2AgaXMgY29tcGlsZWQgdW5kZXIgYENPTkZJR19TV0FQYC4gYG1tL21lbW9yeS5jYCBpcyBhbHdheXMgY29tcGlsZWQuIFRpbWUgZm9yIGEgcXVpY2sgZ3JlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjMzLjEyODM4ODA1MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA3OTE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm1fZmF1bHRfdCBkb19zd2FwX3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LmM9NDg2Mz1zdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcXG4tLVxcbm1tL21lbW9yeS5jLTQ4ODAtICovXFxubW0vbWVtb3J5LmM6NDg4MTp2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG5tbS9tZW1vcnkuYy00ODgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzMuMTcyNDk0NDA3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0ODQ2ODY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBTd2FwIFBhZ2UgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBsZXQncyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgYGRvX3N3YXBfcGFnZWAgaXMgb25seSBpbmNsdWRlZCB3aGVuIHN3YXAgc3VwcG9ydCBpcyBhY3R1YWxseSBlbmFibGVkLiBUaGlzIGlzIGNydWNpYWwgZm9yIG1haW50YWluYWJpbGl0eSBhbmQgcHJldmVudGluZyBidWlsZCBpc3N1ZXMuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGAjaWZkZWYgQ09ORklHX1NXQVBgIGNvcnJlY3RseSBlbmNhcHN1bGF0ZXMgdGhlIGBkb19zd2FwX3BhZ2VgIGZ1bmN0aW9uIGRlZmluaXRpb24uIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGVjaywgcmVhbGx5LiBJZiBpdCdzICpub3QqIHByb3Blcmx5IGd1YXJkZWQsIHRoZSBrZXJuZWwgbWlnaHQgYXR0ZW1wdCB0byBjYWxsIHN3YXAtcmVsYXRlZCBmdW5jdGlvbnMgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBkaXNhYmxlIHN3YXBwaW5nLCBsZWFkaW5nIHRvIHBvdGVudGlhbGx5IG5hc3R5IGVycm9ycyBvciBpbmNvcnJlY3QgYmVoYXZpb3IuIFNvLCBsZXQncyBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoYXQgdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaXMgZG9pbmcgaXRzIGpvYiBhcyBleHBlY3RlZC4gVGhpcyBzaG91bGQgYmUgYSB0cml2aWFsIGNoZWNrLCBidXQgaXQncyBhIGNyaXRpY2FsIG9uZSBmb3Iga2VlcGluZyB0aGUgc3lzdGVtIHN0YWJsZSBhbmQgcHJvcGVybHkgY29uZmlndXJlZC4gTm8gc2hvcnRjdXRzIGhlcmUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODozNi41MjA5NjUwNjZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM1ODA0MDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODozNi41NjQ1NTM1NTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjUzMTg5NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEZWVwZXIgRGl2ZSBpbnRvIGBkb19zd2FwX3BhZ2VgIExvY2F0aW9uKipcblxuSG1tLCBzb21ldGhpbmcgZG9lc24ndCBmZWVsIHJpZ2h0LiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbiByZXNpZGVkIGluIGBtbS9tZW1vcnkuY2AgYW5kIHdhcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHdpdGggYENPTkZJR19TV0FQYC4gQnV0IGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIGlzIGluZGljYXRpbmcgdGhpcyBtaWdodCBub3QgYmUgYWNjdXJhdGUuIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIE1ha2VmaWxlIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uLiBMZXQgbWUgZ28gYmFjayBhbmQgaW52ZXN0aWdhdGUgdGhlIGJ1aWxkIHByb2Nlc3MgaW4gYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgYW5kIHJlc29sdmUgdGhpcyBkaXNjcmVwYW5jeSBxdWlja2x5LiBJIG5lZWQgdG8gYmUgc3VyZSBiZWZvcmUgSSBtb3ZlIGZvcndhcmQsIGFuZCB0aGUgTWFrZWZpbGUgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzkuODE3NzQ1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE0NjAxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGU6Nzk6b2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6MzkuODYxODk3MTA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MDg1MTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyBTd2FwIFBhZ2UgRnVuY3Rpb25hbGl0eSBpbiB0aGUgS2VybmVsKipcblxuUmlnaHQsIHNvIGBtbS9tZW1vcnkuY2AgaXMgZGVmaW5pdGVseSBhIGNvcmUgZmlsZSwgdGhhdCdzIGEgZ2l2ZW4uIEl0J3MgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLiBOb3csIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbi4uLiB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gSSdtIHByZXR0eSBzdXJlIGl0J3Mgbm90IGFsd2F5cyBhY3RpdmVseSAqdXNlZCosIGJ1dCByYXRoZXIgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB3aGV0aGVyIHN3YXAgaXMgZW5hYmxlZCBpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEVpdGhlciB0aGF0LCBvciBpdCdzIGFsd2F5cyBjb21waWxlZCBidXQgb25seSAqY2FsbGVkKiBpZiBzd2FwcGluZyBpcyBlbmFibGVkLiBUbyBiZSBjZXJ0YWluLCBJIHNob3VsZCBqdXN0IGdvIGFuZCBjaGVjayBkaXJlY3RseSBpbiBgbW0vbWVtb3J5LmNgIGFuZCBzZWUgaG93IGBkb19zd2FwX3BhZ2VgIGlzIGhhbmRsZWQgdGhlcmUuIFRoYXQnbGwgY2xlYXIgdGhpbmdzIHVwLiBObyBuZWVkIHRvIHJlbHkgb24gYXNzdW1wdGlvbnMgd2hlbiB0aGUgc291cmNlIGlzIHJpZ2h0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODo0My40MTI3NTEyODNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTA2Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX3N3YXBfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz05NDc9c3RhdGljIHZvaWQgcmVzdG9yZV9leGNsdXNpdmVfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtOTYxLVxcbm1tL21lbW9yeS5jOjk2MjpcXHQvKiBTZWUgZG9fc3dhcF9wYWdlKCk6IHJlc3RvcmUgUEFHRV9OT05FIGZvciBSV1AgKi9cXG5tbS9tZW1vcnkuYy05NjMtXFx0aWYgKHB0ZV9zd3BfdWZmZChvcmlnX3B0ZSkgXFx1MDAyNlxcdTAwMjYgdXNlcmZhdWx0ZmRfcndwKHZtYSkpXFxuLS1cXG5tbS9tZW1vcnkuYz0zNjUyPWludCBhcHBseV90b19leGlzdGluZ19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0zNjYxLSAqIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuIGkzODYgd2l0aCBQQUUpIHdoaWNoIG1pZ2h0IGdpdmUgYSBtaXggb2YgdW5tYXRjaGVkXFxubW0vbWVtb3J5LmM6MzY2MjogKiBwYXJ0cywgZG9fc3dhcF9wYWdlIG11c3QgY2hlY2sgdW5kZXIgbG9jayBiZWZvcmUgdW5tYXBwaW5nIHRoZSBwdGUgYW5kXFxubW0vbWVtb3J5LmMtMzY2My0gKiBwcm9jZWVkaW5nIChidXQgZG9fd3BfcGFnZSBpcyBvbmx5IGNhbGxlZCBhZnRlciBhbHJlYWR5IG1ha2luZyBzdWNoIGEgY2hlY2s7XFxuLS1cXG5tbS9tZW1vcnkuYz00Nzk1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDgzOS1cXHQvKlxcbm1tL21lbW9yeS5jOjQ4NDA6XFx0ICogRm9yIGRvX3N3YXBfcGFnZSwgZmluZCB0aGUgaGlnaGVzdCBvcmRlciB3aGVyZSB0aGUgYWxpZ25lZCByYW5nZSBpc1xcbm1tL21lbW9yeS5jLTQ4NDEtXFx0ICogY29tcGxldGVseSBzd2FwIGVudHJpZXMgd2l0aCBjb250aWd1b3VzIHN3YXAgb2Zmc2V0cy5cXG4tLVxcbm1tL21lbW9yeS5jPTQ4NjM9c3RhdGljIHZvaWQgY2hlY2tfc3dhcF9leGNsdXNpdmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksXFxuLS1cXG5tbS9tZW1vcnkuYy00ODgwLSAqL1xcbm1tL21lbW9yeS5jOjQ4ODE6dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxubW0vbWVtb3J5LmMtNDg4Mi17XFxuLS1cXG5tbS9tZW1vcnkuYy01MjMwLVxcdHNldF9wdGVzKHZtYS1cXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB0ZXAsIHB0ZSwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeS5jOjUyMzE6XFx0YXJjaF9kb19zd2FwX3BhZ2VfbnIodm1hLVxcdTAwM2V2bV9tbSwgdm1hLCBhZGRyZXNzLFxcbm1tL21lbW9yeS5jLTUyMzItXFx0XFx0XFx0cHRlLCBwdGUsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY1MjA9c3RhdGljIHZtX2ZhdWx0X3QgaGFuZGxlX3B0ZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTY1NjYtXFx0aWYgKCFwdGVfcHJlc2VudCh2bWYtXFx1MDAzZW9yaWdfcHRlKSlcXG5tbS9tZW1vcnkuYzo2NTY3OlxcdFxcdHJldHVybiBkb19zd2FwX3BhZ2Uodm1mKTtcXG5tbS9tZW1vcnkuYy02NTY4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODo0My40NTY2NjM1OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwODMxMTkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBQYWdlIENvbXBpbGF0aW9uKipcblxuUmlnaHQsIHNvIGBkb19zd2FwX3BhZ2VgIGlzIGFsd2F5cyBjb21waWxlZCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgd2hhdCBhYm91dCBgZ2V0X3N3YXBfZGV2aWNlYD8gVGhhdCBmdW5jdGlvbidzIGJ1cmllZCBpbiBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZC4gU2luY2UgaXQgZGVhbHMgd2l0aCBzd2FwIGZpbGVzLCBteSBndWVzcyBpcyBpdCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfU1dBUGAuIEJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIEJlc3Qgd2F5IHRvIHZlcmlmeSB3b3VsZCBiZSB0byBjaGVjayBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGFuZCBjb25maXJtIHRoYXQgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGFwcHJvcHJpYXRlIHByZXByb2Nlc3NvciBtYWNyby4gVGltZSB0byBkaWcgaW50byB0aGF0IGhlYWRlciBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDA4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NDYuNTY0OTc4MDIyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkyNjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfc3dhcF9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9Mzg0PWV4dGVybiBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzg1OmV4dGVybiBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0zODYtc2VjdG9yX3Qgc3dhcF9mb2xpb19zZWN0b3Ioc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD00MTE9c3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00MTYtI2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0MTc6c3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQxOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjQ2LjYwODkxMDQ3OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzY3MTQxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgU3dhcCBhbmQgVXNlcmZhdWx0ZmQgU3ltYm9sIENvdmVyYWdlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGBDT05GSUdfU1dBUGAgaXMgYSBnaXZlbjsgaXQncyBmdW5kYW1lbnRhbCB0byB0aGUgdG9waWMuIE5vdywgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbW0venN3YXAuY2AgYW5kIGBtbS91c2VyZmF1bHRmZC5jYC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gYWNjb3VudCBmb3IgYENPTkZJR19aU1dBUGAgYW5kIGBDT05GSUdfVVNFUkZBVUxURkRgIGFzIHdlbGwuXG5cblRvIGdldCBhIGhhbmRsZSBvbiB3aGF0IHRoZSBwYXRjaCBpcyB0b3VjaGluZywgSSBuZWVkIHRvIGxpc3QgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzLiBNeSBjb25maWcgbGlzdCBpczogYFNXQVBgLCBgWlNXQVBgLCBhbmQgYFVTRVJGQVVMVEZEYC4gVGhlIHN5bWJvbHMgYmVpbmcgbW9kaWZpZWQgYXJlOiBgZG9fc3dhcF9wYWdlYCwgYG1pbmNvcmVfc3dhcGAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgYHN3YXBfdm1hX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYGdldF9zd2FwX2RldmljZWAsIGBzd3Bfc3dhcGNvdW50YCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYG1vdmVfcGFnZXNfcHRlc2AsIGFuZCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC5cblxuSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBpbnN0cnVjdGlvbiBzZXQuIFRoZSBpbnN0cnVjdGlvbnMgdGVsbCBtZSB0byBcIkF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlwiIEJvdGggYGRvX3N3YXBfcGFnZWAgYW5kIGBnZXRfc3dhcF9kZXZpY2VgIGFyZSBkZWZpbml0ZWx5IGhvdCBwYXRocywgZXNwZWNpYWxseSB3aGVuIHN3YXAgaXMgaGVhdmlseSB1c2VkLiBJIHNob3VsZCBleGNsdWRlIHRob3NlLlxuXG5TbywgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHMgaW5zdGVhZDogYG1pbmNvcmVfc3dhcGAsIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCwgYHN3YXBfdm1hX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgbW92ZV9wYWdlc19wdGVzYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGVzZSBzZWVtIHRvIGJlIGxlc3MgZnJlcXVlbnRseSB1c2VkLCB3aGljaCBpcyBiZXR0ZXIgZm9yIHRoZSB0ZXN0aW5nIGluc3RydWN0aW9ucy5cblxuQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEknbGwgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSBgbWluY29yZV9zd2FwYCBpc24ndCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NTgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NTUuMzc2MDU1MDg4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDYzMDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaW5jb3JlX3N3YXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWluY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pbmNvcmUuYz0yNz1zdGF0aWMgaW50IG1pbmNvcmVfaHVnZXRsYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9taW5jb3JlLmMtNDctXFxubW0vbWluY29yZS5jOjQ4OnN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcXG5tbS9taW5jb3JlLmMtNDkte1xcbi0tXFxubW0vbWluY29yZS5jPTk0PXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleClcXG4tLVxcbm1tL21pbmNvcmUuYy0xMTEtXFx0XFx0XFx0cmV0dXJuIDA7XFxubW0vbWluY29yZS5jOjExMjpcXHRcXHRyZXR1cm4gbWluY29yZV9zd2FwKHJhZGl4X3RvX3N3cF9lbnRyeShmb2xpbyksIHRydWUpO1xcbm1tL21pbmNvcmUuYy0xMTMtXFx0fVxcbi0tXFxubW0vbWluY29yZS5jPTE2Mj1zdGF0aWMgaW50IG1pbmNvcmVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9taW5jb3JlLmMtMjA1LVxcbm1tL21pbmNvcmUuYzoyMDY6XFx0XFx0XFx0KnZlYyA9IG1pbmNvcmVfc3dhcChlbnRyeSwgZmFsc2UpO1xcbm1tL21pbmNvcmUuYy0yMDctXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozODo1NS40NzA2OTE4ODhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4MTUyMDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtaW5jb3JlYCBBUEkgQ2hvaWNlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG1pbmNvcmVfc3dhcGAgZnVuY3Rpb24gYW5kIHRoZSBjb2RlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhcjogYXZvaWQgc3RhdGljLCBpbmxpbmVkIGhlbHBlciBmdW5jdGlvbnMgaWYgdGhlcmUncyBhIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50LiBUaGUgYWR2aWNlIGlzIHRvIHByZWZlciBmdW5jdGlvbnMgd2l0aCBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLCBtYWtpbmcgdGhlbSBlYXNpZXIgdG8gdHJhY2UgYW5kIGRlYnVnLCByaWdodD8gU28sIGBtaW5jb3JlX3N3YXBgIGlzIG9mZiB0aGUgdGFibGUgYXMgdGhlIHByZWZlcnJlZCBvcHRpb24uXG5cbkxldCdzIHNlZSwgd2hhdCBhcmUgdGhlIGFsdGVybmF0aXZlcz8gQWgsIHRoZXJlJ3MgYG1pbmNvcmVfcHRlX3JhbmdlYCBhbmQgYG1pbmNvcmVfcGFnZWAsIG9yIGp1c3QgdGhlIGBtaW5jb3JlYCBzeXN0ZW0gY2FsbCBlbnRyeSBpdHNlbGYg4oCTIHRoZSBvbmUgdGhhdCBoaXRzIHRoZSBrZXJuZWwgZGlyZWN0bHkuIFdhaXQgYSBtaW51dGUuLi4gYG1pbmNvcmVfcHRlX3JhbmdlYCBpcyBzdGF0aWMgYXMgd2VsbD8gVGhhdCdzIG5vdCBoZWxwZnVsIGF0IGFsbCFcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgc3lzX21pbmNvcmVgIGlzIHRoZSBlbnRyeSBwb2ludCB3ZSBzaG91bGQgYmUgaW52ZXN0aWdhdGluZyBmdXJ0aGVyLiBUaGF0J3MgdGhlIG9uZSB3ZSB3YW50IHRvIHRhcmdldC5cblxuTm93LCBsZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGV4YW1pbmUgd2hhdCdzIGdvaW5nIG9uIHdpdGggYHNobWVtX3N3YXBpbl9mb2xpb2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6Mzg6NTkuNzUyMjI5MTg5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzIxMTg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9zd2FwaW5fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTE1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV9kZWZhdWx0X21heF9pbm9kZXModm9pZClcXG4tLVxcbm1tL3NobWVtLmMtMTU5LVxcbm1tL3NobWVtLmM6MTYwOnN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxubW0vc2htZW0uYy0xNjEtXFx0XFx0XFx0c3RydWN0IGZvbGlvICoqZm9saW9wLCBlbnVtIHNncF90eXBlIHNncCwgZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vc2htZW0uYz0xNDk2PXN0YXRpYyBpbnQgc2htZW1fdW51c2Vfc3dhcF9lbnRyaWVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5tbS9zaG1lbS5jLTE1MDYtXFxubW0vc2htZW0uYzoxNTA3OlxcdFxcdGVycm9yID0gc2htZW1fc3dhcGluX2ZvbGlvKGlub2RlLCBpbmRpY2VzW2ldLCBcXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcXG5tbS9zaG1lbS5jLTE1MDgtXFx0XFx0XFx0XFx0XFx0bWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSwgTlVMTCwgTlVMTCk7XFxuLS1cXG5tbS9zaG1lbS5jPTIxNzU9c3RhdGljIGludCBzaG1lbV9zcGxpdF9sYXJnZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yMjUyLSAqL1xcbm1tL3NobWVtLmM6MjI1MzpzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbm1tL3NobWVtLmMtMjI1NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXFxuLS1cXG5tbS9zaG1lbS5jPTI0Mjc9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI0NTktXFx0aWYgKHhhX2lzX3ZhbHVlKGZvbGlvKSkge1xcbm1tL3NobWVtLmM6MjQ2MDpcXHRcXHRlcnJvciA9IHNobWVtX3N3YXBpbl9mb2xpbyhpbm9kZSwgaW5kZXgsIFxcdTAwMjZmb2xpbyxcXG5tbS9zaG1lbS5jLTI0NjEtXFx0XFx0XFx0XFx0XFx0ICAgc2dwLCBnZnAsIHZtZiwgZmF1bHRfdHlwZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM4OjU5Ljc5NTQ0NjQ4NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQwNDIxNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHVuZGVyc3RhbmRpbmc6XG5cbioqU3RhdGljIEZ1bmN0aW9uIEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSd2ZSBqdXN0IGJlZW4gbG9va2luZyBhdCBzb21lIGNvZGUgYW5kIEkndmUgemVyb2VkIGluIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gc3BlY2lmaWMgZnVuY3Rpb25zLiBJJ3ZlIG5vdGljZWQgdGhhdCBgc2htZW1fc3dhcGluX2ZvbGlvYCBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdCdzIG5vdCBtZWFudCB0byBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBvdXRzaWRlIGl0cyBvd24gY29tcGlsYXRpb24gdW5pdC4gSXRzIHZpc2liaWxpdHkgaXMgZGVsaWJlcmF0ZWx5IHJlc3RyaWN0ZWQsIHdoaWNoIGluZGljYXRlcyBhIHBvdGVudGlhbGx5IGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBvciBvcHRpbWl6YXRpb24uIE5vdywgdGhlIGNhbGxlciB0aGF0IGFjdHVhbGx5IHVzZXMgYHNobWVtX3N3YXBpbl9mb2xpb2AsIHRoZSBvbmUgSSAqY2FuKiBzZWUgZnJvbSBvdXRzaWRlIHRoYXQgbGltaXRlZCBzY29wZSwgaXMgYHNobWVtX2dldF9mb2xpb19nZnBgLiBUaGlzIGxpa2VseSBtZWFucyBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgaXMgdGhlIHB1YmxpYyBlbnRyeSBwb2ludCBmb3Igd2hhdGV2ZXIgZnVuY3Rpb25hbGl0eSBgc2htZW1fc3dhcGluX2ZvbGlvYCBpbXBsZW1lbnRzLCBwZXJoYXBzIGFjdGluZyBhcyBhIHdyYXBwZXIgb3IgYSBtYW5hZ2VyIGZvciB0aGUgdW5kZXJseWluZywgc3RhdGljIG9wZXJhdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHdoYXQgYHNobWVtX2dldF9mb2xpb19nZnBgIGRvZXMsIGl04oCZcyBwcm9iYWJseSBhZGRpbmcgc29tZSBjb250ZXh0LCBjaGVja2luZyBwcmVjb25kaXRpb25zLCBvciBwcm92aWRpbmcgYSBoaWdoZXIgbGV2ZWwgYWJzdHJhY3Rpb24uIEknbGwgYmV0IGl0IGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgKGdmcCkgc29tZWhvdywgYmFzZWQgb24gaXRzIG5hbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowMy41MzU4NzA1MDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjQ4MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX2dldF9mb2xpb19nZnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTIwNDI9c3RhdGljIHN0cnVjdCBmb2xpbyAqc2htZW1fc3dhcF9hbGxvY19mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vc2htZW0uYy0yMDcyLSAqIFdoZW4gYSBwYWdlIGlzIG1vdmVkIGZyb20gc3dhcGNhY2hlIHRvIHNobWVtIGZpbGVjYWNoZSAoZWl0aGVyIGJ5IHRoZVxcbm1tL3NobWVtLmM6MjA3MzogKiB1c3VhbCBzd2FwaW4gb2Ygc2htZW1fZ2V0X2ZvbGlvX2dmcCgpLCBvciBieSB0aGUgbGVzcyBjb21tb24gc3dhcG9mZiBvZlxcbm1tL3NobWVtLmMtMjA3NC0gKiBzaG1lbV91bnVzZV9pbm9kZSgpKSwgaXQgbWF5IGhhdmUgYmVlbiByZWFkIGluIGVhcmxpZXIgZnJvbSBzd2FwLCBpblxcbi0tXFxubW0vc2htZW0uYz0yMjUzPXN0YXRpYyBpbnQgc2htZW1fc3dhcGluX2ZvbGlvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI0MTgtLypcXG5tbS9zaG1lbS5jOjI0MTk6ICogc2htZW1fZ2V0X2ZvbGlvX2dmcCAtIGZpbmQgcGFnZSBpbiBjYWNoZSwgb3IgZ2V0IGZyb20gc3dhcCwgb3IgYWxsb2NhdGVcXG5tbS9zaG1lbS5jLTI0MjAtICpcXG4tLVxcbm1tL3NobWVtLmMtMjQyNi0gKi9cXG5tbS9zaG1lbS5jOjI0Mjc6c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxubW0vc2htZW0uYy0yNDI4LVxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIHN0cnVjdCBmb2xpbyAqKmZvbGlvcCwgZW51bSBzZ3BfdHlwZSBzZ3AsXFxuLS1cXG5tbS9zaG1lbS5jPTI2MzA9aW50IHNobWVtX2dldF9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LCBsb2ZmX3Qgd3JpdGVfZW5kLFxcbi0tXFxubW0vc2htZW0uYy0yNjMyLXtcXG5tbS9zaG1lbS5jOjI2MzM6XFx0cmV0dXJuIHNobWVtX2dldF9mb2xpb19nZnAoaW5vZGUsIGluZGV4LCB3cml0ZV9lbmQsIGZvbGlvcCwgc2dwLFxcbm1tL3NobWVtLmMtMjYzNC1cXHRcXHRcXHRtYXBwaW5nX2dmcF9tYXNrKGlub2RlLVxcdTAwM2VpX21hcHBpbmcpLCBOVUxMLCBOVUxMKTtcXG4tLVxcbm1tL3NobWVtLmM9MjcwOT1zdGF0aWMgdm1fZmF1bHRfdCBzaG1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL3NobWVtLmMtMjcyNy1cXHRXQVJOX09OX09OQ0Uodm1mLVxcdTAwM2VwYWdlICE9IE5VTEwpO1xcbm1tL3NobWVtLmM6MjcyODpcXHRlcnIgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCB2bWYtXFx1MDAzZXBnb2ZmLCAwLCBcXHUwMDI2Zm9saW8sIFNHUF9DQUNIRSxcXG5tbS9zaG1lbS5jLTI3MjktXFx0XFx0XFx0XFx0ICBnZnAsIHZtZiwgXFx1MDAyNnJldCk7XFxuLS1cXG5tbS9zaG1lbS5jPTU5NTY9c3RydWN0IGZvbGlvICpzaG1lbV9yZWFkX2ZvbGlvX2dmcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbm1tL3NobWVtLmMtNTk2My1cXG5tbS9zaG1lbS5jOjU5NjQ6XFx0ZXJyb3IgPSBzaG1lbV9nZXRfZm9saW9fZ2ZwKGlub2RlLCBpbmRleCwgaV9zaXplX3JlYWQoaW5vZGUpLFxcbm1tL3NobWVtLmMtNTk2NS1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNmZvbGlvLCBTR1BfQ0FDSEUsIGdmcCwgTlVMTCwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjM5OjAzLjU4MDUyNzUyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDMyNzgwMDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBzaG1lbV9nZXRfZm9saW9gIGFuZCBBc3luYyBTd2FwIFJlYWRzKipcblxuUmlnaHQsIGBzaG1lbV9nZXRfZm9saW9gIGlzbid0IHN0YXRpYy4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIG9mIHdpZGVyIHVzYWdlIGFuZCwgdGhlcmVmb3JlLCBhIHdpZGVyIGltcGFjdCBmb3IgYW55IGNoYW5nZXMuIE9rYXksIHRoYXQncyBnb29kIHRvIGtlZXAgaW4gbWluZDsgdGhlIHNjb3BlIG9mIHRoaXMgaXMgbGlrZWx5IG5vdCBpc29sYXRlZCB0byBhIHNtYWxsIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgYW5kIHdoZXJlIGl0J3MgYmVpbmcgdXNlZCB0byB0cnVseSBjb21wcmVoZW5kIGl0cyBpbXBvcnRhbmNlLCBidXQgdGhlIGBub24tc3RhdGljYCBpbW1lZGlhdGVseSBnaXZlcyBtZSBhIHBlcnNwZWN0aXZlIEkgbmVlZCB0byBjb25zaWRlci5cblxuTm93LCB3aGVyZSB3YXMgST8gUmlnaHQsIEkgc2hvdWxkIGxvb2sgYXQgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AuIFRoaXMgb25lIGxpa2VseSBpbnRlcmZhY2VzIHdpdGggdGhlIHN3YXAgY2FjaGUgYW5kIGRlYWxzIHdpdGggYXN5bmNocm9ub3VzIHJlYWRzLCB3aGljaCBtZWFucyBpdCBwcm9iYWJseSBpbnRlcmFjdHMgd2l0aCBgc2htZW1fZ2V0X2ZvbGlvYCBpbiB3YXlzIHRoYXQgYWZmZWN0IHBlcmZvcm1hbmNlIG9yIGNvbmN1cnJlbmN5LiBMZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBoZXJlLiBJIGJldCB0aGVyZSdzIHNvbWUgaW50ZXJlc3RpbmcgbnVhbmNlIGluIGhvdyB0aGUgYXN5bmMgcmVhZCBpcyBraWNrZWQgb2ZmLCBob3cgdGhlIGZvbGlvIGlzIGhhbmRsZWQsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIGNhY2hlIG1lY2hhbmljcyBhbmQgSS9PIHNjaGVkdWxlci4gVGhpcyBjb3VsZCBiZSBhIGdvb2QgbGluZSBvZiBlbnF1aXJ5IHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBvZiBgc2htZW1fZ2V0X2ZvbGlvYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2ODksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowOC42MTMzMTA0ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MzMzMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfc3dhcF9jYWNoZV9hc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTY4Mj1zdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTcwOC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NzA5OnN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcXG5tbS9zd2FwX3N0YXRlLmMtNzEwLVxcdFxcdGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTozOTowOC42NTc2NDgxMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNjQ1MTU3MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkRpZ2dpbmcgaW50byBgcmVhZF9zd2FwX2NhY2hlX2FzeW5jYCoqXG5cbk9rYXksIHNvIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgIGlzbid0IHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdywgbWVhbnMgaXQncyBsaWtlbHkgdXNlZCBleHRlcm5hbGx5LiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEkgd2lsbCBsb29rIGF0IHRoZSBgc3dhcF92bWFfcmVhZGFoZWFkYCBmdW5jdGlvbiwgYXMgdGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjowMi4zMDI4MDkxM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ0NDgyMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF92bWFfcmVhZGFoZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBfc3RhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwX3N0YXRlLmM9ODYwPXN0YXRpYyBpbnQgc3dhcF92bWFfcmFfd2luKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpzdGFydCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy04OTgtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjg5OTogKiBzd2FwX3ZtYV9yZWFkYWhlYWQgLSBzd2FwIGluIHBhZ2VzIGluIGhvcGUgd2UgbmVlZCB0aGVtIHNvb25cXG5tbS9zd2FwX3N0YXRlLmMtOTAwLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IG9mIHRoZSB0YXJnZXRlZCBtZW1vcnlcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy05MTMtICovXFxubW0vc3dhcF9zdGF0ZS5jOjkxNDpzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vc3dhcF9zdGF0ZS5jLTkxNS1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IHRhcmdfaWx4LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz05ODY9c3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy05OTQtXFx0Zm9saW8gPSBzd2FwX3VzZV92bWFfcmVhZGFoZWFkKCkgP1xcbm1tL3N3YXBfc3RhdGUuYzo5OTU6XFx0XFx0c3dhcF92bWFfcmVhZGFoZWFkKGVudHJ5LCBnZnBfbWFzaywgbXBvbCwgaWx4LCB2bWYpIDpcXG5tbS9zd2FwX3N0YXRlLmMtOTk2LVxcdFxcdHN3YXBfY2x1c3Rlcl9yZWFkYWhlYWQoZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjowMi4zNzcyNjMwODJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NzI1MzYxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFJlYWRhaGVhZCBhbmQgU3dhcCBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLi4uIHNvLCBgc3dhcF92bWFfcmVhZGFoZWFkYCBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLiAgVGhhdCBtZWFucyBpdCdzIGxpbWl0ZWQgaW4gc2NvcGUsIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGZpbGUgb3IgbW9kdWxlLiAgT24gdGhlIG90aGVyIGhhbmQsIGBzd2FwaW5fcmVhZGFoZWFkYCBpcyAqbm90KiBzdGF0aWMsIHdoaWNoIGdpdmVzIGl0IGJyb2FkZXIgdmlzaWJpbGl0eSBhbmQgcHJvYmFibHkgYSBkaWZmZXJlbnQgcHVycG9zZS4gSW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByZWxhdGUsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcmVhZGFoZWFkIG9wZXJhdGlvbnMgZHVyaW5nIHN3YXBwaW5nLiBUaGUgY29udHJhc3RpbmcgdmlzaWJpbGl0eSBsZXZlbHMgb2YgdGhlc2UgZnVuY3Rpb25zIGhhcyBtZSBjdXJpb3VzIGFib3V0IHRoZWlyIHJvbGVzLiBJIGJldCBpdCBpcyBpbXBvcnRhbnQgdG8gdGhlIG92ZXJhbGwgcHJvY2Vzcy5cblxuTm93LCB3aGVyZSBkbyBJIHN0YXJ0IG15IGRlZXBlciBpbnZlc3RpZ2F0aW9uPyBMZXQncyBjaGVjayBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2AuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwLiBJdCdzIHByb2JhYmx5IGNvbm5lY3RlZCB0byBob3cgd2UgbWFuYWdlIG1lbW9yeSBkdXJpbmcgdGhvc2Ugc3dhcCBvcGVyYXRpb25zLCBhbmQgY291bGQgaWxsdW1pbmF0ZSB0aGUgY29uZGl0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgcmVhZC1haGVhZCBmdW5jdGlvbnMuIEtub3dpbmcgaXRzIHB1cnBvc2Ugd2lsbCBsaWtlbHkgcHJvdmlkZSBpbnNpZ2h0cyBpbnRvIGhvdyBgc3dhcF92bWFfcmVhZGFoZWFkYCBhbmQgYHN3YXBpbl9yZWFkYWhlYWRgIGFyZSB1c2VkLCBhbmQgd2h5IHRoZWlyIHNjb3BlcyBhcmUgZGlmZmVyZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTY5MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjA2LjA2NDUxOTk1NFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODIwMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTQ2Mz1zdGF0aWMgaW50IHN3YXBfZXh0ZW5kX3RhYmxlX2FsbG9jKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTQ5OC1cXG5tbS9zd2FwZmlsZS5jOjE0OTk6aW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcXG5tbS9zd2FwZmlsZS5jLTE1MDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjowNi4xMzg1MDcyMzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyMzQwODY3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCBhbmQgYHN3cF9zd2FwY291bnRgKipcblxuT2theSwgc28gYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgIGlzbid0IHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgc3BhcmtzIGEgdGhvdWdodCBwcm9jZXNzLiBOb24tc3RhdGljIGZ1bmN0aW9ucyB1c3VhbGx5IGltcGx5IGEgd2lkZXIgc2NvcGUsIHBvdGVudGlhbGx5IG1ha2luZyB0aGVtIGFjY2Vzc2libGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBvciBhdCBsZWFzdCBvdGhlciBtb2R1bGVzLiBUaGF0IGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyBpdCdzIHVzZWQgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGNvZGUuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyB1c2FnZSBjb250ZXh0IG1vcmUgYnJvYWRseSwgYmV5b25kIGp1c3QgdGhlIGltbWVkaWF0ZSBzY29wZS5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYW5kIGNoZWNrIGludG8gdGhlIGBzd3Bfc3dhcGNvdW50YCB2YXJpYWJsZSwgaXQgaXMgaW1wb3J0YW50IGhlcmUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSByZWxhdGVkIGFuZCB3aHkgdGhpcyBpcyBpbXBvcnRhbnQgYXQgdGhpcyBzdGFnZS4gSXQgaXMgbGlrZWx5IHRoYXQgYm90aCByZWxhdGUgdG8gdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgZm9yIHN3YXBwaW5nIHByb2Nlc3Nlcy5cblxuSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgYWxsb2NhdGlvbiB0YWJsZSBpcyB1c2VkIHdpdGggdGhlIHN3YXAgY291bnRlci4gSSBuZWVkIHRvIGNvbm5lY3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxMTUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjowOS4zNjE5MTkzODhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3ODQyMjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3cF9zd2FwY291bnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc3dhcGZpbGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTE5ODI9Ym9vbCBzd2FwX2VudHJ5X3N3YXBwZWQoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTk5OC0gKi9cXG5tbS9zd2FwZmlsZS5jOjE5OTk6aW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpXFxubW0vc3dhcGZpbGUuYy0yMDAwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MDkuNDI5NzY4MTYxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzQyNDkzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBOb24tU3RhdGljIFN3YXAgQ291bnRlcioqXG5cbk9rYXksIHNvIGBzd3Bfc3dhcGNvdW50YCBpcyBkZWNsYXJlZCBub24tc3RhdGljLiBJbnRlcmVzdGluZy4gVGhhdCBpbW1lZGlhdGVseSByYWlzZXMgcXVlc3Rpb25zIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIGZvciBtb2RpZmljYXRpb24gZnJvbSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxpZmVjeWNsZSBhbmQgdXNhZ2UgdG8gc2VlIGlmIHRoaXMgaXMgYW4gYXJlYSB3aGVyZSBjb25jdXJyZW5jeSBjb3VsZCBsZWFkIHRvIHN1YnRsZSBpc3N1ZXMsIG9yIGlmIGl0J3MgaW50ZW50aW9uYWxseSBkZXNpZ25lZCB0aGlzIHdheSBmb3Igc29tZSB2YWxpZCByZWFzb24uXG5cblRvIGRpZyBkZWVwZXIsIGxldCdzIHN0YXJ0IGJ5IGV4YW1pbmluZyBob3cgdGhpcyBjb3VudGVyIGlzIGFjdHVhbGx5IGJlaW5nIHVzZWQuIFNwZWNpZmljYWxseSwgSSdsbCBjaGVjayB0aGUgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBmdW5jdGlvbi4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMgaXQgZGVhbHMgd2l0aCBwdXR0aW5nIGVudHJpZXMgaW50byBzd2FwLCBzbyBpdCdzIGxpa2VseSBhIHBsYWNlIHdoZXJlIHRoZSBzd2FwIGNvdW50ZXIgbWlnaHQgYmUgdG91Y2hlZC4gSSBleHBlY3QgdG8gc2VlIHRoZSBjb3VudGVyIGluY3JlbWVudGVkIG9yIGRlY3JlbWVudGVkIGluIHRoYXQgZnVuY3Rpb24gaWYgaXQgaXMgYmVpbmcgdXNlZCB0byB0cmFjayB0aGUgbnVtYmVyIG9mIHN3YXAgZW50cmllcy4gRnJvbSB0aGVyZSBJIGNhbiBmb2xsb3cgdGhlIGNhbGwgZ3JhcGggdG8gc2VlIHdoYXQgaXMgY2FsbGluZyBpdCBhbmQgZ2FpbiBtb3JlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDgwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MTIuNTY0MDIwOTcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTgzNjIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTc0MD1pbnQgZm9saW9fYWxsb2Nfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODAwLSAqIE5PVEU6IFRoZSBjYWxsZXIgYWxzbyBoYXMgdG8gZW5zdXJlIHRoZXJlIGlzIG5vIHJhY2VkIGNhbGwgdG9cXG5tbS9zd2FwZmlsZS5jOjE4MDE6ICogc3dhcF9wdXRfZW50cmllc19kaXJlY3Qgb24gaXRzIHN3YXAgZW50cnkgYmVmb3JlIHRoaXMgaGVscGVyIHJldHVybnMsIG9yXFxubW0vc3dhcGZpbGUuYy0xODAyLSAqIHRoZSBzd2FwIGNvdW50IG1heSB1bmRlcmZsb3cuXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE5OTk9aW50IHN3cF9zd2FwY291bnQoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIwMjYtICogb25seSBiZSBkb25lIGJ5IGZvbGlvX2R1cF9zd2FwLCB3aGljaCBhbHNvIGxvY2tzIHRoZSBmb2xpby4gQnV0IGEgY29uY3VycmVudFxcbm1tL3N3YXBmaWxlLmM6MjAyNzogKiBkZWNyZWFzZSBvZiBzd2FwIGNvdW50IGlzIHBvc3NpYmxlIHRocm91Z2ggc3dhcF9wdXRfZW50cmllc19kaXJlY3QsIHNvIHRoaXNcXG5tbS9zd2FwZmlsZS5jLTIwMjgtICogbWF5IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlLlxcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTAwPWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxMTItLyoqXFxubW0vc3dhcGZpbGUuYzoyMTEzOiAqIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KCkgLSBSZWxlYXNlIHJlZmVyZW5jZSBvbiByYW5nZSBvZiBzd2FwIGVudHJpZXMgYW5kXFxubW0vc3dhcGZpbGUuYy0yMTE0LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNsYWltIHRoZWlyIGNhY2hlIGlmIG5vIG1vcmUgcmVmZXJlbmNlcyByZW1haW4uXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxMjQtICovXFxubW0vc3dhcGZpbGUuYzoyMTI1OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcXG5tbS9zd2FwZmlsZS5jLTIxMjYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjoxMi42MzU4NjMwNzRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU3NjQ4MDAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBhbmQgYG1vdmVfcGFnZXNfcHRlc2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLiBJdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgc29tZXRoaW5nIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHVzZSBjYXNlcyB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgaXQgYW5kIHdoeSBpdCdzIHN0cnVjdHVyZWQgdGhpcyB3YXksIHRoZSBub24tc3RhdGljIG5hdHVyZSBkZWZpbml0ZWx5IHN1Z2dlc3RzIGl0J3MgYmVpbmcgYWNjZXNzZWQgZnJvbSBtdWx0aXBsZSBwb2ludHMuIFRoaXMgbGlrZWx5IGltcGxpZXMgYSBkZWdyZWUgb2Ygc2hhcmVkIGZ1bmN0aW9uYWxpdHkgb3IgcGVyaGFwcyBhIGxlc3MgdGlnaHRseSBzY29wZWQgcmVzcG9uc2liaWxpdHkgdGhhbiBhIHN0YXRpYyBmdW5jdGlvbi5cblxuTm93LCB3aGVyZSB3YXMgST8gUmlnaHQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBtb3ZlX3BhZ2VzX3B0ZXNgLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsIG1lYXQgb2YgdGhlIG9wZXJhdGlvbiBpcy4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgY2VudHJhbCB0byBtb3ZpbmcgcGFnZXMsIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIGlzIHNvbWVob3cgcGFydCBvZiB0aGF0LiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIGZsb3cgYmV0d2VlbiB0aGUgdHdvIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uLiBJcyBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBwYWdlIHRhYmxlcyBvciBzb21lIHNvcnQgb2Ygc3dhcCBzdHJ1Y3R1cmUgZHVyaW5nIGEgcGFnZSBtb3ZlIGluaXRpYXRlZCBieSBgbW92ZV9wYWdlc19wdGVzYD8gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTU3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MjIuMjEyMzQ2MjQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzI3NDc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3BhZ2VzX3B0ZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS91c2VyZmF1bHRmZC5jPTE0NjE9c3RhdGljIGludCBtb3ZlX3plcm9wYWdlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTUwMC0gKi9cXG5tbS91c2VyZmF1bHRmZC5jOjE1MDE6c3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xNTAyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTIwMjE9c3RhdGljIHNzaXplX3QgbW92ZV9wYWdlcyhzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMTU1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MjE1NjpcXHRcXHRcXHRyZXQgPSBtb3ZlX3BhZ2VzX3B0ZXMobW0sIGRzdF9wbWQsIHNyY19wbWQsXFxubW0vdXNlcmZhdWx0ZmQuYy0yMTU3LVxcdFxcdFxcdFxcdFxcdCAgICAgIGRzdF92bWEsIHNyY192bWEsIGRzdF9hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjoyMi4yNjk2MjY1MTFaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MzEzMjA0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqSW50ZXJuYWwgUmVmbGVjdGlvbiBvbiBQYWdlIFRhYmxlIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIHRoaW5raW5nIGFib3V0IHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIFwibW92aW5nXCIgb2YgcGFnZXMuIFRoZSBmYWN0IHRoYXQgYG1vdmVfcGFnZXNfcHRlc2AgaXMgKnN0YXRpYyogaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGxvd2VyLWxldmVsLCBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIG5vdCBzb21ldGhpbmcgZGlyZWN0bHkgZXhwb3NlZCBhcyBhIHN5c3RlbSBjYWxsIG9yIGEgd2lkZWx5IHVzZWQgQVBJLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgZmluZS1ncmFpbmVkIGRldGFpbHMgb2YgdXBkYXRpbmcgcGFnZSB0YWJsZSBlbnRyaWVzIChQVEVzKSDigJMgcHJvYmFibHkgYXQgdGhlIGhhcmR3YXJlIGxldmVsIOKAkyBkdXJpbmcgYSBwYWdlIG1vdmUgb3BlcmF0aW9uLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB1cGRhdGluZyB0aGUgUFRFcyBpbiBib3RoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBhZ2UgdGFibGVzLlxuXG5UaGVuIHdlIGhhdmUgYG1vdmVfcGFnZXNgLCBhbHNvICpzdGF0aWMqLiBUaGF0IHJlaW5mb3JjZXMgdGhlIGlkZWEgdGhhdCB3ZSdyZSB3aXRoaW4gdGhlIGtlcm5lbCdzIGltcGxlbWVudGF0aW9uLiBJdCdzIHRoZSBjb3JlIG9mIHRoZSBwYWdlIG1vdmUgZnVuY3Rpb25hbGl0eS4gVGhpcyBzdWdnZXN0cyBpdCBpcyBhIGNydWNpYWwgYnV0IHByb2JhYmx5IG5vdCB1c2VyLWZhY2luZyBvcGVyYXRpb24uXG5cbkZpbmFsbHksIHRoZSBtZW50aW9uIG9mIGBtY29weV9hdG9taWNgIG9yIHNvbWV0aGluZyAqc2ltaWxhciogYXMgdGhlIGFjdHVhbCBlbnRyeSBwb2ludCBvciB0aGUgZnVuY3Rpb24gdGhhdCB1bHRpbWF0ZWx5IGluaXRpYXRlcyB0aGUgbW92ZS4gVGhhdCB0ZWxscyBtZSB0aGlzIGlzIHRoZSBwcmltYXJ5IGF0b21pYyBvcGVyYXRpb24uIEl0IGlzIG1vc3QgbGlrZWx5IHdoZXJlIHRoZSB1c2VyLCBvciBvdGhlciBjb3JlIGtlcm5lbCBjb21wb25lbnRzLCBpbml0aWF0ZSB0aGUgcGFnZSBtaWdyYXRpb24gZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlci4gUGVyaGFwcywgaXQgd291bGQgaGFuZGxlIHN5bmNocm9uaXphdGlvbiBhbmQgYXRvbWljaXR5IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgYSBwb3RlbnRpYWxseSBjb21wbGV4IG9wZXJhdGlvbiBsaWtlIG1vdmluZyBwaHlzaWNhbCBwYWdlcyBiZXR3ZWVuIGRpZmZlcmVudCB6b25lcyBvciBOVU1BIG5vZGVzLiBUaGlzIHdvdWxkIGJlIHRoZSBcImZyb250IGRvb3JcIiBvZiB0aGUgbW92ZSBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MjYuMjEyNzYxNjE2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA5MjY2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9MTQ2MT1zdGF0aWMgaW50IG1vdmVfemVyb3BhZ2VfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xNTAwLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MTUwMTpzdGF0aWMgbG9uZyBtb3ZlX3BhZ2VzX3B0ZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpkc3RfcG1kLCBwbWRfdCAqc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTE1MDItXFx0XFx0XFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MTk0Nj1zdGF0aWMgdm9pZCB1ZmZkX21vdmVfdW5sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTk1NC0vKipcXG5tbS91c2VyZmF1bHRmZC5jOjE5NTU6ICogbW92ZV9wYWdlcyAtIG1vdmUgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBvZiBhbiBleGlzdGluZyB2bWFcXG5tbS91c2VyZmF1bHRmZC5jLTE5NTYtICogQGN0eDogcG9pbnRlciB0byB0aGUgdXNlcmZhdWx0ZmQgY29udGV4dFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTYzLSAqXFxubW0vdXNlcmZhdWx0ZmQuYzoxOTY0OiAqIG1vdmVfcGFnZXMoKSByZW1hcHMgYXJiaXRyYXJ5IGFub255bW91cyBwYWdlcyBhdG9taWNhbGx5IGluIHplcm9cXG5tbS91c2VyZmF1bHRmZC5jLTE5NjUtICogY29weS4gSXQgb25seSB3b3JrcyBvbiBub24gc2hhcmVkIGFub255bW91cyBwYWdlcyBiZWNhdXNlIHRob3NlIGNhblxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTc1LSAqIHN0b3JhZ2Ugb3IgYW55IG90aGVyIEkvTyBkZXZpY2UgKE1BRFZfRE9OVEZPUksgaW4gdGhlIHNvdXJjZSB2bWFcXG5tbS91c2VyZmF1bHRmZC5jOjE5NzY6ICogYXZvaWRzIG1vdmVfcGFnZXMoKSB0byBmYWlsIHdpdGggLUVCVVNZIGlmIHRoZSBwcm9jZXNzIGZvcmtzIGJlZm9yZVxcbm1tL3VzZXJmYXVsdGZkLmM6MTk3NzogKiBtb3ZlX3BhZ2VzKCkgaXMgY2FsbGVkKSwgdGhlbiBpdCB3aWxsIGNhbGwgbW92ZV9wYWdlcygpIHRvIG1hcCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jLTE5NzgtICogcGFnZSBpbiB0aGUgZmF1bHRpbmcgYWRkcmVzcyBpbiB0aGUgZGVzdGluYXRpb24gdm1hLlxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xOTkyLSAqIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIG1lbW9yeSByYW5nZSBpcyBub3QgYSB3aG9sZSB1bm1hcHBlZCBob2xlLFxcbm1tL3VzZXJmYXVsdGZkLmM6MTk5MzogKiBtb3ZlX3BhZ2VzKCkgd2lsbCBmYWlsIHJlc3BlY3RpdmVseSB3aXRoIC1FTk9FTlQgb3IgLUVFWElTVC4gVGhpc1xcbm1tL3VzZXJmYXVsdGZkLmMtMTk5NC0gKiBwcm92aWRlcyBhIHZlcnkgc3RyaWN0IGJlaGF2aW9yIHRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgbWVtb3J5XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTE5OTctICogdGltZSBmb3IgYW55IGdpdmVuIGZhdWx0aW5nIGFkZHJlc3MuIFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gdGhyZWFkc1xcbm1tL3VzZXJmYXVsdGZkLmM6MTk5ODogKiB0cnkgdG8gYm90aCBjYWxsIG1vdmVfcGFnZXMoKSBvbiB0aGUgc2FtZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0IHRoZVxcbm1tL3VzZXJmYXVsdGZkLmMtMTk5OS0gKiBzYW1lIHRpbWUsIHRoZSBzZWNvbmQgdGhyZWFkIHdpbGwgZ2V0IGFuIGV4cGxpY2l0IGVycm9yIGZyb20gdGhpc1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDA3LSAqIGFuIGFtb3VudCBvZiBieXRlcyBzdWNjZXNzZnVsbHkgbW92ZWQuIElmIHRoZSByZXR2YWwgcmVwb3J0cyBhXFxubW0vdXNlcmZhdWx0ZmQuYzoyMDA4OiAqIFxcXCJzaG9ydFxcXCIgcmVtYXAsIHRoZSBtb3ZlX3BhZ2VzKCkgY29tbWFuZCBzaG91bGQgYmUgcmVwZWF0ZWQgYnlcXG5tbS91c2VyZmF1bHRmZC5jLTIwMDktICogdXNlcmxhbmQgd2l0aCBzcmMrcmV0dmFsLCBkc3QrcmV2YWwsIGxlbi1yZXR2YWwgaWYgaXQgd2FudHMgdG8ga25vd1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDIwLSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MjAyMTpzdGF0aWMgc3NpemVfdCBtb3ZlX3BhZ2VzKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0yMDIyLVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgX191NjQgbW9kZSlcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMjEwMS1cXHRcXHQgKiBiZSBzdHJpY3QuIElmIGRzdF9wbWQgY2hhbmdlcyBpbnRvIFRQSCBhZnRlciB0aGlzIGNoZWNrLCB0aGVcXG5tbS91c2VyZmF1bHRmZC5jOjIxMDI6XFx0XFx0ICogbW92ZV9wYWdlc19odWdlX3BtZCgpIHdpbGwgZGV0ZWN0IHRoZSBjaGFuZ2UgYW5kIHJldHJ5XFxubW0vdXNlcmZhdWx0ZmQuYzoyMTAzOlxcdFxcdCAqIHdoaWxlIG1vdmVfcGFnZXNfcHRlKCkgd2lsbCBkZXRlY3QgdGhlIGNoYW5nZSBhbmQgZmFpbC5cXG5tbS91c2VyZmF1bHRmZC5jLTIxMDQtXFx0XFx0ICovXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIxMjgtXFx0XFx0XFx0XFx0c3BsaXRfaHVnZV9wbWQoc3JjX3ZtYSwgc3JjX3BtZCwgc3JjX2FkZHIpO1xcbm1tL3VzZXJmYXVsdGZkLmM6MjEyOTpcXHRcXHRcXHRcXHQvKiBUaGUgZm9saW8gd2lsbCBiZSBzcGxpdCBieSBtb3ZlX3BhZ2VzX3B0ZSgpICovXFxubW0vdXNlcmZhdWx0ZmQuYy0yMTMwLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yMTMyLVxcbm1tL3VzZXJmYXVsdGZkLmM6MjEzMzpcXHRcXHRcXHRlcnIgPSBtb3ZlX3BhZ2VzX2h1Z2VfcG1kKG1tLCBkc3RfcG1kLCBzcmNfcG1kLFxcbm1tL3VzZXJmYXVsdGZkLmMtMjEzNC1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wbWR2YWwsIGRzdF92bWEsIHNyY192bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTIxNTUtXFxubW0vdXNlcmZhdWx0ZmQuYzoyMTU2OlxcdFxcdFxcdHJldCA9IG1vdmVfcGFnZXNfcHRlcyhtbSwgZHN0X3BtZCwgc3JjX3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTIxNTctXFx0XFx0XFx0XFx0XFx0ICAgICAgZHN0X3ZtYSwgc3JjX3ZtYSwgZHN0X2FkZHIsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQ1NjQ9c3RhdGljIGludCB1c2VyZmF1bHRmZF9tb3ZlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDYwMy1cXHRpZiAobW1nZXRfbm90X3plcm8obW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0NjA0OlxcdFxcdHJldCA9IG1vdmVfcGFnZXMoY3R4LCB1ZmZkaW9fbW92ZS5kc3QsIHVmZmRpb19tb3ZlLnNyYyxcXG5tbS91c2VyZmF1bHRmZC5jLTQ2MDUtXFx0XFx0XFx0XFx0IHVmZmRpb19tb3ZlLmxlbiwgdWZmZGlvX21vdmUubW9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjI2LjMyMzY5MzkxNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI0MjQwNzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVXNlcmZhdWx0ZmQgQVBJIEVudHJ5IFBvaW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdXNlcmZhdWx0ZmRgIGNvZGUsIGFuZCBzb21ldGhpbmcncyBidWdnaW5nIG1lLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYHVzZXJmYXVsdGZkX21vdmVgIGlzIG1hcmtlZCBhcyBgc3RhdGljYCwgYnV0IGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYW4gYGlvY3RsYCBvcGVyYXRpb24uIEhtbSwgdGhhdCdzIGEgYml0IHVudXN1YWwuIFRoZSBgaW9jdGxgIGVudHJ5IHBvaW50IGlzIGB1c2VyZmF1bHRmZF9pb2N0bGAsIG9mIGNvdXJzZS4gQnV0IGlzIGB1c2VyZmF1bHRmZF9tb3ZlYCB0aGUgcmlnaHQgY2hvaWNlIHRvIGJlIGludGVybmFsPyBMZXQgbWUgcmUtY2hlY2sgdGhhdCB0aGUgY2FsbCBwYXRoIGlzIGFwcHJvcHJpYXRlLlxuXG5UaGUgZG9jdW1lbnRhdGlvbiBpcyBxdWl0ZSBjbGVhcjogaXQgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgbWFpbnRhaW5hYmlsaXR5IGFuZCBpbnRlcmZhY2UgcGVyc3BlY3RpdmUuIFNvIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCBpcyBgdXNlcmZhdWx0ZmRfaW9jdGxgIHRoZSBub24tc3RhdGljIGZ1bmN0aW9uIGhlcmU/IFRpbWUgdG8gZG91YmxlLWNoZWNrIG15IHVuZGVyc3RhbmRpbmcsIGl0IHNlZW1zIGxpa2UgdGhlIHJpZ2h0IG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjozMC4wNDc5MzkyNjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTM1MjYzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NjozMC4xMjA4ODI4MzZaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NjIyNjExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVzZXJmYXVsdGZkIFNvdXJjZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gbG9jYXRlIHRoZSBgdXNlcmZhdWx0ZmRfaW9jdGxgIGltcGxlbWVudGF0aW9uLiBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIHdpdGhpbiB0aGUgYG1tL3VzZXJmYXVsdGZkLmNgIGZpbGUuIFdhaXQsIEknbSBzZWNvbmQtZ3Vlc3NpbmcgbXlzZWxmLiBXYXNuJ3QgdGhlIG9sZCBwYXRoIHNvbWV0aGluZyBsaWtlIGBmcy91c2VyZmF1bHRmZC5jYD8gQ3JhcCwgbmVlZCB0byB2ZXJpZnkgdGhpcy4uLiBsZXQncyBjaGVjayBib3RoIGBtbS91c2VyZmF1bHRmZC5jYCBhbmQgYGZzL3VzZXJmYXVsdGZkLmNgIHRvIGJlIHN1cmUuIEkgY2FuJ3Qgd2FzdGUgdGltZSBvbiBhIHdpbGQgZ29vc2UgY2hhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzUzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MzMuMDY3MTExOTI2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODEwNjY1OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJmYXVsdGZkX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MjE2MD1zdGF0aWMgdm9pZCByZXRyYWN0X3BhZ2VfdGFibGVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyMTYtXFx0XFx0ICogdXNlcmZhdWx0ZmRfd3AoKSB2bWFzLiAgQnV0IHNpbmNlIHRoZSBtbWFwX2xvY2sgaXMgbm90IGhlbGQsXFxubW0va2h1Z2VwYWdlZC5jOjIyMTc6XFx0XFx0ICogaXQgaXMgc3RpbGwgcG9zc2libGUgZm9yIGEgcmFjaW5nIHVzZXJmYXVsdGZkX2lvY3RsKCkgb3JcXG5tbS9raHVnZXBhZ2VkLmMtMjIxOC1cXHRcXHQgKiBtYWR2aXNlKCkgdG8gaGF2ZSBpbnNlcnRlZCBwdGVzIG9yIG1hcmtlcnMuICBOb3cgdGhhdCB3ZSBob2xkXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQ2MzQ9c3RhdGljIGludCB1c2VyZmF1bHRmZF9hcGkoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00NjkxLVxcbm1tL3VzZXJmYXVsdGZkLmM6NDY5MjpzdGF0aWMgbG9uZyB1c2VyZmF1bHRmZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLFxcbm1tL3VzZXJmYXVsdGZkLmMtNDY5My1cXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDc3MD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VyZmF1bHRmZF9mb3BzID0ge1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00Nzc2LVxcdC5yZWFkX2l0ZXJcXHQ9IHVzZXJmYXVsdGZkX3JlYWRfaXRlcixcXG5tbS91c2VyZmF1bHRmZC5jOjQ3Nzc6XFx0LnVubG9ja2VkX2lvY3RsID0gdXNlcmZhdWx0ZmRfaW9jdGwsXFxubW0vdXNlcmZhdWx0ZmQuYy00Nzc4LVxcdC5jb21wYXRfaW9jdGxcXHQ9IGNvbXBhdF9wdHJfaW9jdGwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjM1Ljg3Nzc4NDEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMjAwNzAyNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyB0aGVtOlxuXG4qKkludGVybmFsIFJlZmxlY3Rpb24gb24gYHVzZXJmYXVsdGZkYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGB1c2VyZmF1bHRmZF9pb2N0bGAgaGVyZS4gSXQncyBtYXJrZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGEgZmV3IHRoaW5ncyBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb250ZXh0LiBUaGF0LCBjb21iaW5lZCB3aXRoIHRoZSBuYW1lLCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGEgaGVscGVyIGZ1bmN0aW9uIG9yIGFuIGludGVybmFsIGRldGFpbCB1c2VkIHRvIGltcGxlbWVudCB0aGUgYHVzZXJmYXVsdGZkYCBtZWNoYW5pc20uIE5vIHN1cnByaXNlcyB0aGVyZS4gVGhlIGNydWNpYWwgcGFydCBpcyBob3cgaXQncyBjYWxsZWQsIGFuZCB0aGF0J3MgZGlyZWN0bHkgdGllZCB0byB0aGUgc3lzdGVtIGNhbGwgaXRzZWxmLiBSaWdodCwgdGhlIGFjdHVhbCBzeXN0ZW0gY2FsbCBpcyBgc3lzX3VzZXJmYXVsdGZkYC4gU28sIGB1c2VyZmF1bHRmZF9pb2N0bGAgbGlrZWx5IGdldHMgaW52b2tlZCAqd2l0aGluKiB0aGUgaGFuZGxlciBmb3IgdGhlIGBzeXNfdXNlcmZhdWx0ZmRgIHN5c2NhbGwgdG8gcGVyZm9ybSBzb21lIG9mIHRoZSBsb3ctbGV2ZWwgb3BlcmF0aW9ucy4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRob3NlIG9wZXJhdGlvbnMgYXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6MzkuOTk3ODYxMDM3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTMwNTUyMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FLip1c2VyZmF1bHRmZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdXNlcmZhdWx0ZmQuYz00ODMxPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9zeXNjYWxsX2FsbG93ZWQoaW50IGZsYWdzKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00ODQ3LVxcbm1tL3VzZXJmYXVsdGZkLmM6NDg0ODpTWVNDQUxMX0RFRklORTEodXNlcmZhdWx0ZmQsIGludCwgZmxhZ3MpXFxubW0vdXNlcmZhdWx0ZmQuYy00ODQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDY6NDMuMTI4NDE3OTA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjY2NTk0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBwb2ludHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLZXJuZWwncyBJbnRlcmFjdGlvbiB3aXRoIFVzZXJmYXVsdGZkIGFuZCBac3dhcCoqXG5cbk9rYXksIHNvIGBzeXNfdXNlcmZhdWx0ZmRgIGlzIHRoZSBjcml0aWNhbCBzeXN0ZW0gY2FsbCwgdGhlIGVudHJ5IHBvaW50IHdlJ3JlIGNvbmNlcm5lZCB3aXRoLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIuIE5vdywgSSBuZWVkIHRvIHNlZSBob3cgZGF0YSBmbG93cyBmcm9tIGEgdXNlciBmYXVsdCBpbnRvIHRoZSBzeXN0ZW0uIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gaG93IHRoZSB6c3dhcCAoY29tcHJlc3NlZCBzd2FwKSBtZWNoYW5pc20gaGFuZGxlcyB0aG9zZSB1c2VyZmF1bHRmZC1yZWxhdGVkIHBhZ2UgZmF1bHRzLiBJcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgd3JpdGluZyB0aGUgZGF0YSB0aGF0IHRoZSB1c2VyIGZhdWx0ZWQgb24gKmJhY2sqIHRvIHpzd2FwPyBPciBpcyBpdCBtb3JlIGludm9sdmVkIGluIHRoZSBpbml0aWFsIGludGVyY2VwdGlvbiBhbmQgcXVldWluZyBvZiB0aGUgZGF0YSB3aGVuIGEgcGFnZSBmYXVsdCBvY2N1cnMgZm9yIG1lbW9yeSBiYWNrZWQgYnkgenN3YXA/IEVpdGhlciB3YXksIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGB1c2VyZmF1bHRmZGAgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRvIHNlZSB0aGUgY29tcGxldGUgcGljdHVyZS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb2RlIHBhdGggaGVyZS4gSSBleHBlY3QgdGhhdCB0aGVzZSBmdW5jdGlvbnMgbWF5IGJlIGtleSB0byB0aGUgcGVyZm9ybWFuY2Ugb2YgenN3YXAgd2hlbiB1c2VyZmF1bHRmZCBpcyBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2ODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Njo0Ni4yOTUwODIyNDVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzQ5NjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS96c3dhcC5jLTk4Ni0gKi9cXG5tbS96c3dhcC5jOjk4NzpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbm1tL3pzd2FwLmMtOTg4LVxcdFxcdFxcdFxcdCBzd3BfZW50cnlfdCBzd3BlbnRyeSlcXG4tLVxcbm1tL3pzd2FwLmM9MTA5MD1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbi0tXFxubW0venN3YXAuYy0xMTEzLVxcdCAqIDEuIFdlIGV4dHJhY3QgdGhlIHN3cF9lbnRyeV90IHRvIHRoZSBzdGFjaywgYWxsb3dpbmdcXG5tbS96c3dhcC5jOjExMTQ6XFx0ICogICAgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgdG8gcGluIHRoZSBzd2FwIGVudHJ5IGFuZFxcbm1tL3pzd2FwLmMtMTExNS1cXHQgKiAgICB0aGVuIHZhbGlkYXRlIHRoZSB6c3dhcCBlbnRyeSBhZ2FpbnN0IHRoYXQgc3dhcCBlbnRyeSdzXFxuLS1cXG5tbS96c3dhcC5jLTExNDgtXFxubW0venN3YXAuYzoxMTQ5OlxcdHdyaXRlYmFja19yZXN1bHQgPSB6c3dhcF93cml0ZWJhY2tfZW50cnkoZW50cnksIHN3cGVudHJ5KTtcXG5tbS96c3dhcC5jLTExNTAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjQ2LjQwMjU4Mzc5NFoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzEwMjg0ODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gSXQncyBkZWZpbmVkIGFzIGEgc3RhdGljIHZhcmlhYmxlLiBUaGUgY3JpdGljYWwgcGFydCBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgKndoeSogaXQncyBzdGF0aWMgYW5kIHdoYXQgdGhhdCBpbXBsaWVzIGluIHRlcm1zIG9mIHNjb3BlIGFuZCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLiBJdCdzIGxpa2VseSBpbnRlbmRlZCB0byBiZSBtb2R1bGUtbG9jYWwuIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgaXQgaXMgc3RhdGljIGJlY2F1c2UgaWYgaXQgd2Fzbid0LCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHN0cnVjdCBjb3VsZCBleGlzdCwgYW5kIHRoYXQgd291bGQgYmUgY2hhb3MuXG5cbkFuZCwgb2YgY291cnNlLCB0aGUgY2FsbGVyIGlzIGBzaHJpbmtfbWVtY2dfY2JgLiBUaGF0J3MgdGhlIGtleS4gS25vd2luZyB0aGF0IHRpZXMgdGhpcyBzcGVjaWZpYyBgenN3YXBgIHN0cnVjdHVyZSBkaXJlY3RseSBpbnRvIHRoZSBtZW1vcnkgY2dyb3VwIHNocmlua2luZyBjYWxsYmFjay4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIG1lbW9yeSByZWNsYWltLCBwYWdlIGV2aWN0aW9uLCBhbmQgdGhlIG92ZXJhbGwgaW50ZXJhY3Rpb24gYmV0d2VlbiBgenN3YXBgIGFuZCB0aGUgbWVtb3J5IGNncm91cCBoaWVyYXJjaHkuIFNwZWNpZmljYWxseSwgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBwaWVjZXMgb2YgaW5mcmFzdHJ1Y3R1cmUgYW5kIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtIGFzIGEgcmVzdWx0LiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHBhdGhzIHRoYXQgbGVhZCBmcm9tIGBzaHJpbmtfbWVtY2dfY2JgIHRvIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBhbmQgdGhhdCdzIGxpa2VseSB3aGVyZSB0aGUgaW50ZXJlc3RpbmcgbG9naWMgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyODcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Njo0OS43MTI4NzM1NDZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzgyMjQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbWVtY2dfY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTk4Nz1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbi0tXFxubW0venN3YXAuYy0xMDg5LSAqL1xcbm1tL3pzd2FwLmM6MTA5MDpzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNocmlua19tZW1jZ19jYihzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsLFxcbm1tL3pzd2FwLmMtMTA5MS1cXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqYXJnKVxcbi0tXFxubW0venN3YXAuYz0xMTcxPXN0YXRpYyB1bnNpZ25lZCBsb25nIHpzd2FwX3Nocmlua2VyX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3pzd2FwLmMtMTE4Mi1cXG5tbS96c3dhcC5jOjExODM6XFx0c2hyaW5rX3JldCA9IGxpc3RfbHJ1X3Nocmlua193YWxrKFxcdTAwMjZ6c3dhcF9saXN0X2xydSwgc2MsIFxcdTAwMjZzaHJpbmtfbWVtY2dfY2IsXFxubW0venN3YXAuYy0xMTg0LVxcdFxcdFxcdTAwMjZlbmNvdW50ZXJlZF9wYWdlX2luX3N3YXBjYWNoZSk7XFxuLS1cXG5tbS96c3dhcC5jPTEyODA9c3RhdGljIGludCBzaHJpbmtfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0venN3YXAuYy0xMjk3LVxcdFxcdHNocnVuayArPSBsaXN0X2xydV93YWxrX29uZShcXHUwMDI2enN3YXBfbGlzdF9scnUsIG5pZCwgbWVtY2csXFxubW0venN3YXAuYzoxMjk4OlxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2c2hyaW5rX21lbWNnX2NiLCBOVUxMLCBcXHUwMDI2bnJfdG9fd2Fsayk7XFxubW0venN3YXAuYy0xMjk5LVxcdFxcdHNjYW5uZWQgKz0gMSAtIG5yX3RvX3dhbGs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjQ5LjgyNjcwMDk1NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzAzNjIyNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipac3dhcCBTaHJpbmtpbmcgYW5kIEZyb250c3dhcCBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB0cmFjZSBob3cgbWVtb3J5IGlzIGJlaW5nIHNocnVuayB3aXRoaW4genN3YXAsIGFuZCBJIHJlbWVtYmVyIHRoYXQgYHpzd2FwX3Nocmlua2VyX3NjYW5gIGFuZCBgc2hyaW5rX21lbWNnYCBhcmUgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaXMgbm90IHdoYXQgSSBhbSBsb29raW5nIGZvci4gTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSAqbm9uKi1zdGF0aWMgZW50cnkgcG9pbnRzIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQ/IE15IGluaXRpYWwgdGhvdWdodCB3YXMgbWF5YmUgYHpzd2FwX2Zyb250c3dhcF9zdG9yZWAgb3IgYHpzd2FwX2Zyb250c3dhcF9sb2FkYCBpZiB6c3dhcCBzdGlsbCB1c2VkIGZyb250c3dhcC4gV2FpdCwgbm8sIHpzd2FwIGRvZXNuJ3QgdXNlIGZyb250c3dhcCBhbnltb3JlLCByaWdodD8gUmlnaHQuIE9rYXksIHNjcmF0Y2ggdGhhdC5cblxuQWxyaWdodCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL3pzd2FwLmNgLiBUaW1lIHRvIGRpdmUgaW4gdGhlcmUgYW5kIHNlZSB3aGF0IGp1bXBzIG91dC4gSSBhbSBnb2luZyB0byBzZWUgd2hhdCBjb2RlIGlzIG5vdCBzdGF0aWMgYW5kIGZpZ3VyZSBvdXQgdGhlIGVudHJ5cG9pbnRzIGFuZCBjYWxsIGNoYWlucyEgTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk2NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjUzLjUzMDMyNzEyNFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNjYzNzM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0venN3YXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS96c3dhcC5jPTkzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB6c3dhcF9lbmFibGVkX3BhcmFtX29wcyA9IHtcXG4tLVxcbm1tL3pzd2FwLmMtOTYtfTtcXG5tbS96c3dhcC5jOjk3Om1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcXHUwMDI2enN3YXBfZW5hYmxlZF9wYXJhbV9vcHMsIFxcdTAwMjZ6c3dhcF9lbmFibGVkLCAwNjQ0KTtcXG5tbS96c3dhcC5jLTk4LVxcbi0tXFxubW0venN3YXAuYz0xMDM9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzID0ge1xcbi0tXFxubW0venN3YXAuYy0xMDctfTtcXG5tbS96c3dhcC5jOjEwODptb2R1bGVfcGFyYW1fY2IoY29tcHJlc3NvciwgXFx1MDAyNnpzd2FwX2NvbXByZXNzb3JfcGFyYW1fb3BzLFxcbm1tL3pzd2FwLmMtMTA5LVxcdFxcdFxcdTAwMjZ6c3dhcF9jb21wcmVzc29yLCAwNjQ0KTtcXG4tLVxcbm1tL3pzd2FwLmM9MTEyPXN0YXRpYyB1bnNpZ25lZCBpbnQgenN3YXBfbWF4X3Bvb2xfcGVyY2VudCA9IDIwO1xcbm1tL3pzd2FwLmM6MTEzOm1vZHVsZV9wYXJhbV9uYW1lZChtYXhfcG9vbF9wZXJjZW50LCB6c3dhcF9tYXhfcG9vbF9wZXJjZW50LCB1aW50LCAwNjQ0KTtcXG5tbS96c3dhcC5jLTExNC1cXG4tLVxcbm1tL3pzd2FwLmM9MTE2PXN0YXRpYyB1bnNpZ25lZCBpbnQgenN3YXBfYWNjZXB0X3Rocl9wZXJjZW50ID0gOTA7IC8qIG9mIG1heCBwb29sIHNpemUgKi9cXG5tbS96c3dhcC5jOjExNzptb2R1bGVfcGFyYW1fbmFtZWQoYWNjZXB0X3RocmVzaG9sZF9wZXJjZW50LCB6c3dhcF9hY2NlcHRfdGhyX3BlcmNlbnQsXFxubW0venN3YXAuYy0xMTgtXFx0XFx0ICAgdWludCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jPTEyMT1zdGF0aWMgYm9vbCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkID0gSVNfRU5BQkxFRChcXG5tbS96c3dhcC5jLTEyMi1cXHRcXHRDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTik7XFxubW0venN3YXAuYzoxMjM6bW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xcbm1tL3pzd2FwLmMtMTI0LVxcbi0tXFxubW0venN3YXAuYz0xNjk2PXN0YXRpYyBpbnQgZGVidWdmc19nZXRfdG90YWxfc2l6ZSh2b2lkICpkYXRhLCB1NjQgKnZhbClcXG4tLVxcbm1tL3pzd2FwLmMtMTcwMC19XFxubW0venN3YXAuYzoxNzAxOkRFRklORV9ERUJVR0ZTX0FUVFJJQlVURSh0b3RhbF9zaXplX2ZvcHMsIGRlYnVnZnNfZ2V0X3RvdGFsX3NpemUsIE5VTEwsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG5tbS96c3dhcC5jLTE3MDItXFxubW0venN3YXAuYz0xNzAzPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbi0tXFxubW0venN3YXAuYy0xNzA3LX1cXG5tbS96c3dhcC5jOjE3MDg6REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9wYWdlc19mb3BzLCBkZWJ1Z2ZzX2dldF9zdG9yZWRfcGFnZXMsIE5VTEwsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG5tbS96c3dhcC5jLTE3MDktXFxubW0venN3YXAuYz0xNzEwPXN0YXRpYyBpbnQgZGVidWdmc19nZXRfc3RvcmVkX2luY29tcHJlc3NpYmxlX3BhZ2VzKHZvaWQgKmRhdGEsIHU2NCAqdmFsKVxcbi0tXFxubW0venN3YXAuYy0xNzE0LX1cXG5tbS96c3dhcC5jOjE3MTU6REVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKHN0b3JlZF9pbmNvbXByZXNzaWJsZV9wYWdlc19mb3BzLFxcbm1tL3pzd2FwLmMtMTcxNi1cXHRcXHRkZWJ1Z2ZzX2dldF9zdG9yZWRfaW5jb21wcmVzc2libGVfcGFnZXMsIE5VTEwsIFxcXCIlbGx1XFxcXG5cXFwiKTtcXG4tLVxcbm1tL3pzd2FwLmM9MTgyND1zdGF0aWMgaW50IF9faW5pdCB6c3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTE4MzAtLyogbXVzdCBiZSBsYXRlIHNvIGNyeXB0byBoYXMgdGltZSB0byBjb21lIHVwICovXFxubW0venN3YXAuYzoxODMxOmxhdGVfaW5pdGNhbGwoenN3YXBfaW5pdCk7XFxubW0venN3YXAuYy0xODMyLVxcbm1tL3pzd2FwLmM6MTgzMzpNT0RVTEVfQVVUSE9SKFxcXCJTZXRoIEplbm5pbmdzIFxcdTAwM2NzamVubmluZ3NAdmFyaWFudHdlYi5uZXRcXHUwMDNlXFxcIik7XFxubW0venN3YXAuYzoxODM0Ok1PRFVMRV9ERVNDUklQVElPTihcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Njo1My42NDA5OTYwMDNaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5MTMzNjA3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkIHRoaW5raW5nIGFsb3VkOlxuXG4qKlJlZmluaW5nIE15IFNlYXJjaCBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGhhbmcgb24gYSBzZWNvbmQuIEJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2Ugd2l0aCBteSBzZWFyY2ggdGVybXMuIEknbSBsb29raW5nIGZvciBhIHBhdHRlcm4sIGEgc3BlY2lmaWMgbGFuZ3VhZ2UgY29uc3RydWN0LCBhbmQgc2ltcGx5IHNlYXJjaGluZyBnZW5lcmFsbHkgbWlnaHQgbGVhZCBtZSBkb3duIGEgcmFiYml0IGhvbGUuIEkgbmVlZCB0byBiZSBtb3JlIHN1cmdpY2FsLiBJIHNob3VsZCByZWFsbHkgYmUgc2VhcmNoaW5nIGZvciBzcGVjaWZpYyByZXR1cm4gdHlwZXMuIFRoYXQncyBpdCEgSW5zdGVhZCBvZiBhIGJyb2FkIG5ldCwgbGV0J3MgdHJ5IHNvbWV0aGluZyBtb3JlIHRhcmdldGVkLiBMZXQncyBzdGFydCBieSBsb29raW5nIGZvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgZXhwbGljaXRseSBzdGF0ZWQuIEknbSB0aGlua2luZy4uLiBJIG5lZWQgdG8gY29uc2lkZXIgYWxsIHRoZSBjb21tb24gb25lcywgbGlrZSBgdm9pZGAsIG9mIGNvdXJzZS4gVGhlbiBgaW50YCwgYGJvb2xgLCBgZmxvYXRgLCBhbmQgYGRvdWJsZWAgYXJlIGFsbCB2ZXJ5IHN0YW5kYXJkLiBPa2F5LCBJJ2xsIG5lZWQgdG8gYWNjb3VudCBmb3IgbW9yZSBjb21wbGV4IHR5cGVzLCBidXQgbGV0J3Mgc3RhcnQgd2l0aCB0aG9zZSBiYXNpY3MuIEknbGwgY29uc3RydWN0IGEgc2VhcmNoIHBhdHRlcm4gdGhhdCBhY2NvdW50cyBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIHRoZXNlIHJldHVybiB0eXBlcy4gSSdsbCB1c2UgYSByZWdleCBwZXJoYXBzLCBzb21ldGhpbmcgdGhhdCBhY2NvdW50cyBmb3IgdGhlIHN0YXJ0IG9mIGEgbGluZSAoIGBeYCkgZm9sbG93ZWQgYnkgdGhlIHJldHVybiB0eXBlLiBUaGVuLCBJIGNhbiBleHBhbmQgYXMgSSBkaXNjb3ZlciBuZXcgcGF0dGVybnMuIEknbSBvbiB0aGUgcmlnaHQgdHJhY2sgbm93IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1OSwiT3V0cHV0VG9rZW5zIjo2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ2OjU3LjUzMjMzNDYxNFoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MjIwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXih2b2lkfGludHxib29sfHN0cnVjdCBbYS16X0EtWjAtOV0rIFxcXFwqKVsgXFxcXHRdK1thLXpfQS1aMC05XStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c3dhcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzd2FwLmM9MTIzPW1vZHVsZV9wYXJhbV9uYW1lZChzaHJpbmtlcl9lbmFibGVkLCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkLCBib29sLCAwNjQ0KTtcXG5tbS96c3dhcC5jLTEyNC1cXG5tbS96c3dhcC5jOjEyNTpib29sIHpzd2FwX2lzX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEyNi17XFxuLS1cXG5tbS96c3dhcC5jLTEyOS1cXG5tbS96c3dhcC5jOjEzMDpib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZClcXG5tbS96c3dhcC5jLTEzMS17XFxuLS1cXG5tbS96c3dhcC5jPTY5MT1zdGF0aWMgdm9pZCB6c3dhcF9scnVfZGVsKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jLTcwMi1cXG5tbS96c3dhcC5jOjcwMzp2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS96c3dhcC5jLTcwNC17XFxuLS1cXG5tbS96c3dhcC5jLTcwNy1cXG5tbS96c3dhcC5jOjcwODp2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtNzA5LXtcXG4tLVxcbm1tL3pzd2FwLmMtNzI5LSAqL1xcbm1tL3pzd2FwLmM6NzMwOnZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS96c3dhcC5jLTczMS17XFxuLS1cXG5tbS96c3dhcC5jPTEzOTg9c3RhdGljIGJvb2wgenN3YXBfc3RvcmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3pzd2FwLmMtMTQ3Ny1cXG5tbS96c3dhcC5jOjE0Nzg6Ym9vbCB6c3dhcF9zdG9yZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3pzd2FwLmMtMTQ3OS17XFxuLS1cXG5tbS96c3dhcC5jLTE1ODMtICovXFxubW0venN3YXAuYzoxNTg0OmludCB6c3dhcF9sb2FkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0venN3YXAuYy0xNTg1LXtcXG4tLVxcbm1tL3pzd2FwLmMtMTYzNi1cXG5tbS96c3dhcC5jOjE2Mzc6dm9pZCB6c3dhcF9pbnZhbGlkYXRlKHN3cF9lbnRyeV90IHN3cClcXG5tbS96c3dhcC5jLTE2Mzgte1xcbi0tXFxubW0venN3YXAuYy0xNjUwLVxcbm1tL3pzd2FwLmM6MTY1MTppbnQgenN3YXBfc3dhcG9uKGludCB0eXBlLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL3pzd2FwLmMtMTY1Mi17XFxuLS1cXG5tbS96c3dhcC5jLTE2NzAtXFxubW0venN3YXAuYzoxNjcxOnZvaWQgenN3YXBfc3dhcG9mZihpbnQgdHlwZSlcXG5tbS96c3dhcC5jLTE2NzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Njo1Ny42MTUwNjI5MzVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxODM3MDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGb2N1cyBMaXN0OiBSZWZpbmluZyB0aGUgQXBwcm9hY2gqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgY2hhcmFjdGVyaXplIHRoZXNlIGtleSBmdW5jdGlvbnMuIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBzZWVtIGxpa2UgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIGZvciB6c3dhcC4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSB3cml0ZWJhY2sgaXMgYWN0dWFsbHkgdHJpZ2dlcmVkIGJ5IHRoZSBzaHJpbmtlci4gSG1tLi4uIEkgY291bGQgYWRkIGJvdGggYHpzd2FwX3N0b3JlYCBhbmQgYHpzd2FwX2xvYWRgIHRvIHRoZSBmb2N1cyBsaXN0LCBvciBtYXliZSBqdXN0IGB6c3dhcF9zdG9yZWA/IEFjdHVhbGx5LCB3YWl0IGEgbWludXRlLCBJIHNlZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyAqYWxzbyogY2FsbGVkIGZyb20gdGhlIHNocmlua2VyLCBhbmQgYHpzd2FwX3N0b3JlYCBpcyB0aGUgZnVuY3Rpb24gY2FsbGVkIHdoZW4gc3RvcmluZyB0byBzd2FwLCBzbyBmb3IgY2xhcml0eSwgSSB3aWxsIHN0aWNrIHdpdGggdGhlIGB6c3dhcF9zdG9yZWAgYW5kIGB6c3dhcF9sb2FkYCBwYWlyLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIHJlLWV2YWx1YXRlIHRoaXMgY3VycmVudCBsaXN0OlxuLSBgc3lzX21pbmNvcmVgXG4tIGBzaG1lbV9nZXRfZm9saW9gXG4tIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgXG4tIGBzd2FwaW5fcmVhZGFoZWFkYFxuLSBgc3dhcF9yZXRyeV90YWJsZV9hbGxvY2Bcbi0gYHN3cF9zd2FwY291bnRgXG4tIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGBcbi0gYHN5c191c2VyZmF1bHRmZGBcbi0gYHpzd2FwX3N0b3JlYFxuXG5BaCwgcmlnaHQuIEkganVzdCBub3RpY2VkIHRoYXQgYHN5c19taW5jb3JlYCBhbmQgYHN5c191c2VyZmF1bHRmZGAgYXJlICpzeXNjYWxscyouIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlIGZ1bmN0aW9ucyB0aGVtc2VsdmVzLiBMZXQncyBzZWUgYWJvdXQgZmluZGluZyBhIGJldHRlciBvbmUgZm9yIHVzZXJmYXVsdGZkLi4uIGB1c2VyZmF1bHRmZF9pb2N0bGAgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBhIGdvb2QgY2hvaWNlLCBhbmQgaXMgcHJvYmFibHkgbm90IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBMZXQgbWUgY2hlY2sgdGhlIHVzZXJmYXVsdGZkIGNvZGUsIGBtbS91c2VyZmF1bHRmZC5jYCwgZm9yIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcy4gUGVyaGFwcyBgbWNvcHlfYXRvbWljYCBtaWdodCBiZSByZWxldmFudCwgaXQncyB3b3J0aCBjaGVja2luZyBvdXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBpZGVudGlmeSBmdW5jdGlvbnMgdGhhdCBhcmUgYWNjZXNzaWJsZSBhY3Jvc3MgdGhlIHN5c3RlbSBhbmQgdGhhdCByZXByZXNlbnQgdGhlIGJlaGF2aW9yIEknbSBpbnRlcmVzdGVkIGluIGNhcHR1cmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNTIsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MDQuMDMzNDM2MjlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTU3MjA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHZvaWR8aW50fGJvb2x8c3NpemVfdHxsb25nKVsgXFxcXHRdK1thLXpfQS1aMC05XStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS91c2VyZmF1bHRmZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3VzZXJmYXVsdGZkLmM9OTA9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbm1tL3VzZXJmYXVsdGZkLmM6OTE6Ym9vbCB2YWxpZGF0ZV9kc3Rfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgdW5zaWduZWQgbG9uZyBkc3RfZW5kKVxcbm1tL3VzZXJmYXVsdGZkLmMtOTIte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xMDY4PXN0YXRpYyBzc2l6ZV90IG1maWxsX2F0b21pY19wb2lzb24oc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDc0LVxcbm1tL3VzZXJmYXVsdGZkLmM6MTA3NTpsb25nIHVmZmRfd3BfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTA3Ni1cXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbiwgYm9vbCBlbmFibGVfd3ApXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTExMDQ9c3RhdGljIGludCBtd3JpdGVwcm90ZWN0X3JhbmdlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTE2Ni1cXG5tbS91c2VyZmF1bHRmZC5jOjExNjc6aW50IG1yd3Byb3RlY3RfcmFuZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbm1tL3VzZXJmYXVsdGZkLmMtMTE2OC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCBib29sIGVuYWJsZV9yd3ApXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTEyMzYtXFxubW0vdXNlcmZhdWx0ZmQuYzoxMjM3OnZvaWQgZG91YmxlX3B0X2xvY2soc3BpbmxvY2tfdCAqcHRsMSxcXG5tbS91c2VyZmF1bHRmZC5jLTEyMzgtXFx0XFx0ICAgIHNwaW5sb2NrX3QgKnB0bDIpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTEyNTEtXFxubW0vdXNlcmZhdWx0ZmQuYzoxMjUyOnZvaWQgZG91YmxlX3B0X3VubG9jayhzcGlubG9ja190ICpwdGwxLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTI1My1cXHRcXHQgICAgICBzcGlubG9ja190ICpwdGwyKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0xODI3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG5tbS91c2VyZmF1bHRmZC5jOjE4Mjg6aW50IGZpbmRfdm1hc19tbV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vdXNlcmZhdWx0ZmQuYy0xODI5LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz0yNTEwPXN0YXRpYyBib29sIHVzZXJmYXVsdGZkX3J3cF9hc3luY19jdHgoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4KVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0yNTE5LSAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6MjUyMDpib29sIHVzZXJmYXVsdGZkX3dwX3VucG9wdWxhdGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL3VzZXJmYXVsdGZkLmMtMjUyMS17XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTMwOTE9c3RhdGljIHZvaWQgdXNlcmZhdWx0ZmRfZXZlbnRfY29tcGxldGUoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMDk4LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzA5OTppbnQgZHVwX3VzZXJmYXVsdGZkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbGlzdF9oZWFkICpmY3MpXFxubW0vdXNlcmZhdWx0ZmQuYy0zMTAwLXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9MzE1Mj1zdGF0aWMgdm9pZCBkdXBfZmN0eChzdHJ1Y3QgdXNlcmZhdWx0ZmRfZm9ya19jdHggKmZjdHgpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTMxNjQtXFxubW0vdXNlcmZhdWx0ZmQuYzozMTY1OnZvaWQgZHVwX3VzZXJmYXVsdGZkX2NvbXBsZXRlKHN0cnVjdCBsaXN0X2hlYWQgKmZjcylcXG5tbS91c2VyZmF1bHRmZC5jLTMxNjYte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMTc1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzE3Njp2b2lkIGR1cF91c2VyZmF1bHRmZF9mYWlsKHN0cnVjdCBsaXN0X2hlYWQgKmZjcylcXG5tbS91c2VyZmF1bHRmZC5jLTMxNzcte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjAzLVxcbm1tL3VzZXJmYXVsdGZkLmM6MzIwNDp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9wcmVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3VzZXJmYXVsdGZkLmMtMzIwNS1cXHRcXHRcXHQgICAgIHN0cnVjdCB2bV91c2VyZmF1bHRmZF9jdHggKnZtX2N0eClcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMzIyNS1cXG5tbS91c2VyZmF1bHRmZC5jOjMyMjY6dm9pZCBtcmVtYXBfdXNlcmZhdWx0ZmRfY29tcGxldGUoc3RydWN0IHZtX3VzZXJmYXVsdGZkX2N0eCAqdm1fY3R4LFxcbm1tL3VzZXJmYXVsdGZkLmMtMzIyNy1cXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHRvLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjQ1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzI0Njp2b2lkIG1yZW1hcF91c2VyZmF1bHRmZF9mYWlsKHN0cnVjdCB2bV91c2VyZmF1bHRmZF9jdHggKnZtX2N0eClcXG5tbS91c2VyZmF1bHRmZC5jLTMyNDcte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0zMjU3LVxcbm1tL3VzZXJmYXVsdGZkLmM6MzI1ODpib29sIHVzZXJmYXVsdGZkX3JlbW92ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS91c2VyZmF1bHRmZC5jLTMyNTktXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTMyODY9c3RhdGljIGJvb2wgaGFzX3VubWFwX2N0eChzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHN0cnVjdCBsaXN0X2hlYWQgKnVubWFwcyxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMzI5OC1cXG5tbS91c2VyZmF1bHRmZC5jOjMyOTk6aW50IHVzZXJmYXVsdGZkX3VubWFwX3ByZXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0zMzAwLVxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbGlzdF9oZWFkICp1bm1hcHMpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTMzMjQtXFxubW0vdXNlcmZhdWx0ZmQuYzozMzI1OnZvaWQgdXNlcmZhdWx0ZmRfdW5tYXBfY29tcGxldGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbm1tL3VzZXJmYXVsdGZkLmMtMzMyNi17XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTQ0ODg9c3RhdGljIGlubGluZSBpbnQgdXNlcmZhdWx0ZmRfcG9pc29uKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQ1NDQtXFxubW0vdXNlcmZhdWx0ZmQuYzo0NTQ1OmJvb2wgdXNlcmZhdWx0ZmRfd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vdXNlcmZhdWx0ZmQuYy00NTQ2LXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDU0OS1cXG5tbS91c2VyZmF1bHRmZC5jOjQ1NTA6Ym9vbCB1c2VyZmF1bHRmZF9yd3BfYXN5bmMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vdXNlcmZhdWx0ZmQuYy00NTUxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MDQuMTM1MDEyODY5WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTY2MjM1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgVXNlcmZhdWx0ZmQgTGFuZHNjYXBlKipcblxuSG1tLCBzbyBgbWNvcHlfYXRvbWljYCBpcyBhY3R1YWxseSAqaW5zaWRlKiBgbW0vdXNlcmZhdWx0ZmQuY2A/IFRoYXQncyBhIGJpdCB1bmV4cGVjdGVkOyBJIHRob3VnaHQgdGhhdCBtb2R1bGUgd2FzIHByaW1hcmlseSBmb2N1c2VkIG9uLi4uIHdlbGwsIHVzZXJmYXVsdGZkIGhhbmRsaW5nLiBPa2F5LCBsZXQncyBzZWUuIE15IG1lbnRhbCBtYXAgcGxhY2VkIGl0IGVsc2V3aGVyZSwgYnV0IGl0J3MgY2xlYXJseSByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciB1c2VyZmF1bHRmZCBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBjaGVjayBgbWZpbGxfYXRvbWljYCBhcyB3ZWxsLiBJJ20gZ3Vlc3NpbmcgdGhhdCB0aGUgbmFtZSBhc3NvY2lhdGlvbiBtYXkgcHJvdmlkZSBpbXBvcnRhbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIGNvbnNpZGVyIGJvdGggZnVuY3Rpb25zIGluIGNvbnRleHQsIHByb2JhYmx5IGV4YW1pbmluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGBtY29weV9hdG9taWNgIGFuZCBgbWZpbGxfYXRvbWljYCBpbnRlcmFjdCwgYW5kIHdoYXQgc3BlY2lmaWMgc2NlbmFyaW9zIHRyaWdnZXIgdGhlaXIgdXNhZ2UuIFBlcmhhcHMgdGhlcmUncyBhbiBvcHRpbWl6YXRpb24gYmVpbmcgcGVyZm9ybWVkIGhlcmUsIG9yIGEgY3J1Y2lhbCBhdG9taWMgb3BlcmF0aW9uIHRpZWQgdG8gcGFnZSBwb3B1bGF0aW9uIHVuZGVyIHVzZXJmYXVsdGZkLiBHb3R0YSBkaWcgZGVlcGVyLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNTUxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MDguMTUxNjM5NzE3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjUxMTgwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZmlsbF9hdG9taWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdXNlcmZhdWx0ZmQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS91c2VyZmF1bHRmZC5jPTMzNj1zdGF0aWMgYm9vbCBtZmlsbF9maWxlX292ZXJfc2l6ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTM1Ni0gKi9cXG5tbS91c2VyZmF1bHRmZC5jOjM1NzpzdGF0aWMgaW50IG1maWxsX2F0b21pY19pbnN0YWxsX3B0ZShwbWRfdCAqZHN0X3BtZCxcXG5tbS91c2VyZmF1bHRmZC5jLTM1OC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz01MjU9c3RhdGljIGludCBtZmlsbF9jb3B5X2ZvbGlvX3JldHJ5KHN0cnVjdCBtZmlsbF9zdGF0ZSAqbWZpbGxfc3RhdGUsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTU2MS1cXG5tbS91c2VyZmF1bHRmZC5jOjU2MjpzdGF0aWMgaW50IF9fbWZpbGxfYXRvbWljX3B0ZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlLFxcbm1tL3VzZXJmYXVsdGZkLmMtNTYzLVxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCB2bV91ZmZkX29wcyAqb3BzKVxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy02MTItXFxubW0vdXNlcmZhdWx0ZmQuYzo2MTM6XFx0cmV0ID0gbWZpbGxfYXRvbWljX2luc3RhbGxfcHRlKHN0YXRlLVxcdTAwM2VwbWQsIHN0YXRlLVxcdTAwM2V2bWEsIGRzdF9hZGRyLFxcbm1tL3VzZXJmYXVsdGZkLmMtNjE0LVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2Zm9saW8tXFx1MDAzZXBhZ2UsIGZsYWdzKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNjI3LVxcbm1tL3VzZXJmYXVsdGZkLmM6NjI4OnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV9jb3B5KHN0cnVjdCBtZmlsbF9zdGF0ZSAqc3RhdGUpXFxubW0vdXNlcmZhdWx0ZmQuYy02Mjkte1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy02NDMtXFxubW0vdXNlcmZhdWx0ZmQuYzo2NDQ6XFx0cmV0dXJuIF9fbWZpbGxfYXRvbWljX3B0ZShzdGF0ZSwgb3BzKTtcXG5tbS91c2VyZmF1bHRmZC5jLTY0NS19XFxubW0vdXNlcmZhdWx0ZmQuYy02NDYtXFxubW0vdXNlcmZhdWx0ZmQuYzo2NDc6c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3plcm9lZF9mb2xpbyhzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbm1tL3VzZXJmYXVsdGZkLmMtNjQ4LXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNjUwLVxcbm1tL3VzZXJmYXVsdGZkLmM6NjUxOlxcdHJldHVybiBfX21maWxsX2F0b21pY19wdGUoc3RhdGUsIG9wcyk7XFxubW0vdXNlcmZhdWx0ZmQuYy02NTItfVxcbm1tL3VzZXJmYXVsdGZkLmMtNjUzLVxcbm1tL3VzZXJmYXVsdGZkLmM6NjU0OnN0YXRpYyBpbnQgbWZpbGxfYXRvbWljX3B0ZV96ZXJvcGFnZShzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbm1tL3VzZXJmYXVsdGZkLmMtNjU1LXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNjY0LVxcdCAgICAoZHN0X3ZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpKVxcbm1tL3VzZXJmYXVsdGZkLmM6NjY1OlxcdFxcdHJldHVybiBtZmlsbF9hdG9taWNfcHRlX3plcm9lZF9mb2xpbyhzdGF0ZSk7XFxubW0vdXNlcmZhdWx0ZmQuYy02NjYtXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTY5MC0vKiBIYW5kbGVzIFVGRkRJT19DT05USU5VRSBmb3IgYWxsIHNobWVtIFZNQXMgKHNoYXJlZCBvciBwcml2YXRlKS4gKi9cXG5tbS91c2VyZmF1bHRmZC5jOjY5MTpzdGF0aWMgaW50IG1maWxsX2F0b21pY19wdGVfY29udGludWUoc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSlcXG5tbS91c2VyZmF1bHRmZC5jLTY5Mi17XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTcxOS1cXG5tbS91c2VyZmF1bHRmZC5jOjcyMDpcXHRyZXQgPSBtZmlsbF9hdG9taWNfaW5zdGFsbF9wdGUoZHN0X3BtZCwgZHN0X3ZtYSwgZHN0X2FkZHIsXFxubW0vdXNlcmZhdWx0ZmQuYy03MjEtXFx0XFx0XFx0XFx0ICAgICAgIHBhZ2UsIGZsYWdzKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNzMzLS8qIEhhbmRsZXMgVUZGRElPX1BPSVNPTiBmb3IgYWxsIG5vbi1odWdldGxiIFZNQXMuICovXFxubW0vdXNlcmZhdWx0ZmQuYzo3MzQ6c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3BvaXNvbihzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxcbm1tL3VzZXJmYXVsdGZkLmMtNzM1LXtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNzcyLS8qXFxubW0vdXNlcmZhdWx0ZmQuYzo3NzM6ICogbWZpbGxfYXRvbWljIHByb2Nlc3NpbmcgZm9yIEhVR0VUTEIgdm1hcy4gIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgaXNcXG5tbS91c2VyZmF1bHRmZC5jLTc3NC0gKiBjYWxsZWQgd2l0aCBlaXRoZXIgdm1hLWxvY2sgb3IgbW1hcF9sb2NrIGhlbGQsIGl0IHdpbGwgcmVsZWFzZSB0aGUgbG9ja1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy03NzYtICovXFxubW0vdXNlcmZhdWx0ZmQuYzo3Nzc6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKFxcbm1tL3VzZXJmYXVsdGZkLmMtNzc4LVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtODg1LVxcbm1tL3VzZXJmYXVsdGZkLmM6ODg2OlxcdFxcdGVyciA9IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShkc3RfcHRlLCBkc3Rfdm1hLCBkc3RfYWRkcixcXG5tbS91c2VyZmF1bHRmZC5jLTg4Ny1cXHRcXHRcXHRcXHRcXHQgICAgICAgc3JjX2FkZHIsIGZsYWdzLCBcXHUwMDI2Zm9saW8pO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy05MzYtLyogZmFpbCBhdCBidWlsZCB0aW1lIGlmIGdjYyBhdHRlbXB0cyB0byB1c2UgdGhpcyAqL1xcbm1tL3VzZXJmYXVsdGZkLmM6OTM3OmV4dGVybiBzc2l6ZV90IG1maWxsX2F0b21pY19odWdldGxiKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG5tbS91c2VyZmF1bHRmZC5jLTkzOC1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3Rfdm1hLFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy05NDQtXFxubW0vdXNlcmZhdWx0ZmQuYzo5NDU6c3RhdGljIF9fYWx3YXlzX2lubGluZSBzc2l6ZV90IG1maWxsX2F0b21pY19wdGUoc3RydWN0IG1maWxsX3N0YXRlICpzdGF0ZSlcXG5tbS91c2VyZmF1bHRmZC5jLTk0Ni17XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTk0OS1cXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfQ09OVElOVUUpKVxcbm1tL3VzZXJmYXVsdGZkLmM6OTUwOlxcdFxcdHJldHVybiBtZmlsbF9hdG9taWNfcHRlX2NvbnRpbnVlKHN0YXRlKTtcXG5tbS91c2VyZmF1bHRmZC5jLTk1MS1cXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfUE9JU09OKSlcXG5tbS91c2VyZmF1bHRmZC5jOjk1MjpcXHRcXHRyZXR1cm4gbWZpbGxfYXRvbWljX3B0ZV9wb2lzb24oc3RhdGUpO1xcbm1tL3VzZXJmYXVsdGZkLmMtOTUzLVxcdGlmICh1ZmZkX2ZsYWdzX21vZGVfaXMoZmxhZ3MsIE1GSUxMX0FUT01JQ19DT1BZKSlcXG5tbS91c2VyZmF1bHRmZC5jOjk1NDpcXHRcXHRyZXR1cm4gbWZpbGxfYXRvbWljX3B0ZV9jb3B5KHN0YXRlKTtcXG5tbS91c2VyZmF1bHRmZC5jLTk1NS1cXHRpZiAodWZmZF9mbGFnc19tb2RlX2lzKGZsYWdzLCBNRklMTF9BVE9NSUNfWkVST1BBR0UpKVxcbm1tL3VzZXJmYXVsdGZkLmM6OTU2OlxcdFxcdHJldHVybiBtZmlsbF9hdG9taWNfcHRlX3plcm9wYWdlKHN0YXRlKTtcXG5tbS91c2VyZmF1bHRmZC5jLTk1Ny1cXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtOTYxLVxcbm1tL3VzZXJmYXVsdGZkLmM6OTYyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3NpemVfdCBtZmlsbF9hdG9taWMoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbm1tL3VzZXJmYXVsdGZkLmMtOTYzLVxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGRzdF9zdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtOTk3LVxcdGlmIChpc192bV9odWdldGxiX3BhZ2Uoc3RhdGUudm1hKSlcXG5tbS91c2VyZmF1bHRmZC5jOjk5ODpcXHRcXHRyZXR1cm4gIG1maWxsX2F0b21pY19odWdldGxiKGN0eCwgc3RhdGUudm1hLCBkc3Rfc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy05OTktXFx0XFx0XFx0XFx0XFx0ICAgICBzcmNfc3RhcnQsIGxlbiwgZmxhZ3MpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDEyLVxcbm1tL3VzZXJmYXVsdGZkLmM6MTAxMzpcXHRcXHRlcnIgPSBtZmlsbF9hdG9taWNfcHRlKFxcdTAwMjZzdGF0ZSk7XFxubW0vdXNlcmZhdWx0ZmQuYy0xMDE0LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDM1LVxcbm1tL3VzZXJmYXVsdGZkLmM6MTAzNjpzdGF0aWMgc3NpemVfdCBtZmlsbF9hdG9taWNfY29weShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgZHN0X3N0YXJ0LFxcbm1tL3VzZXJmYXVsdGZkLmMtMTAzNy1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTAzOS17XFxubW0vdXNlcmZhdWx0ZmQuYzoxMDQwOlxcdHJldHVybiBtZmlsbF9hdG9taWMoY3R4LCBkc3Rfc3RhcnQsIHNyY19zdGFydCwgbGVuLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTA0MS1cXHRcXHRcXHQgICAgdWZmZF9mbGFnc19zZXRfbW9kZShmbGFncywgTUZJTExfQVRPTUlDX0NPUFkpKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA0My1cXG5tbS91c2VyZmF1bHRmZC5jOjEwNDQ6c3RhdGljIHNzaXplX3QgbWZpbGxfYXRvbWljX3plcm9wYWdlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCxcXG5tbS91c2VyZmF1bHRmZC5jLTEwNDUtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA0Ny17XFxubW0vdXNlcmZhdWx0ZmQuYzoxMDQ4OlxcdHJldHVybiBtZmlsbF9hdG9taWMoY3R4LCBzdGFydCwgMCwgbGVuLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTA0OS1cXHRcXHRcXHQgICAgdWZmZF9mbGFnc19zZXRfbW9kZSgwLCBNRklMTF9BVE9NSUNfWkVST1BBR0UpKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA1MS1cXG5tbS91c2VyZmF1bHRmZC5jOjEwNTI6c3RhdGljIHNzaXplX3QgbWZpbGxfYXRvbWljX2NvbnRpbnVlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS91c2VyZmF1bHRmZC5jLTEwNTMtXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVmZmRfZmxhZ3NfdCBmbGFncylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA2My1cXG5tbS91c2VyZmF1bHRmZC5jOjEwNjQ6XFx0cmV0dXJuIG1maWxsX2F0b21pYyhjdHgsIHN0YXJ0LCAwLCBsZW4sXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDY1LVxcdFxcdFxcdCAgICB1ZmZkX2ZsYWdzX3NldF9tb2RlKGZsYWdzLCBNRklMTF9BVE9NSUNfQ09OVElOVUUpKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA2Ny1cXG5tbS91c2VyZmF1bHRmZC5jOjEwNjg6c3RhdGljIHNzaXplX3QgbWZpbGxfYXRvbWljX3BvaXNvbihzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy0xMDY5LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbiwgdWZmZF9mbGFnc190IGZsYWdzKVxcbm1tL3VzZXJmYXVsdGZkLmMtMTA3MC17XFxubW0vdXNlcmZhdWx0ZmQuYzoxMDcxOlxcdHJldHVybiBtZmlsbF9hdG9taWMoY3R4LCBzdGFydCwgMCwgbGVuLFxcbm1tL3VzZXJmYXVsdGZkLmMtMTA3Mi1cXHRcXHRcXHQgICAgdWZmZF9mbGFnc19zZXRfbW9kZShmbGFncywgTUZJTExfQVRPTUlDX1BPSVNPTikpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00MTA5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfY29weShzdHJ1Y3QgdXNlcmZhdWx0ZmRfY3R4ICpjdHgsXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQxNDYtXFx0aWYgKG1tZ2V0X25vdF96ZXJvKGN0eC1cXHUwMDNlbW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0MTQ3OlxcdFxcdHJldCA9IG1maWxsX2F0b21pY19jb3B5KGN0eCwgdWZmZGlvX2NvcHkuZHN0LCB1ZmZkaW9fY29weS5zcmMsXFxubW0vdXNlcmZhdWx0ZmQuYy00MTQ4LVxcdFxcdFxcdFxcdFxcdHVmZmRpb19jb3B5LmxlbiwgZmxhZ3MpO1xcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYz00MTY5PXN0YXRpYyBpbnQgdXNlcmZhdWx0ZmRfemVyb3BhZ2Uoc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LFxcbi0tXFxubW0vdXNlcmZhdWx0ZmQuYy00MjAwLVxcdGlmIChtbWdldF9ub3RfemVybyhjdHgtXFx1MDAzZW1tKSkge1xcbm1tL3VzZXJmYXVsdGZkLmM6NDIwMTpcXHRcXHRyZXQgPSBtZmlsbF9hdG9taWNfemVyb3BhZ2UoY3R4LCB1ZmZkaW9femVyb3BhZ2UucmFuZ2Uuc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy00MjAyLVxcdFxcdFxcdFxcdFxcdCAgICB1ZmZkaW9femVyb3BhZ2UucmFuZ2UubGVuKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDQyNz1zdGF0aWMgaW50IHVzZXJmYXVsdGZkX2NvbnRpbnVlKHN0cnVjdCB1c2VyZmF1bHRmZF9jdHggKmN0eCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTQ0NjItXFx0aWYgKG1tZ2V0X25vdF96ZXJvKGN0eC1cXHUwMDNlbW0pKSB7XFxubW0vdXNlcmZhdWx0ZmQuYzo0NDYzOlxcdFxcdHJldCA9IG1maWxsX2F0b21pY19jb250aW51ZShjdHgsIHVmZmRpb19jb250aW51ZS5yYW5nZS5zdGFydCxcXG5tbS91c2VyZmF1bHRmZC5jLTQ0NjQtXFx0XFx0XFx0XFx0XFx0ICAgIHVmZmRpb19jb250aW51ZS5yYW5nZS5sZW4sIGZsYWdzKTtcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmM9NDQ4OD1zdGF0aWMgaW5saW5lIGludCB1c2VyZmF1bHRmZF9wb2lzb24oc3RydWN0IHVzZXJmYXVsdGZkX2N0eCAqY3R4LCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbm1tL3VzZXJmYXVsdGZkLmMtNDUxOS1cXHRpZiAobW1nZXRfbm90X3plcm8oY3R4LVxcdTAwM2VtbSkpIHtcXG5tbS91c2VyZmF1bHRmZC5jOjQ1MjA6XFx0XFx0cmV0ID0gbWZpbGxfYXRvbWljX3BvaXNvbihjdHgsIHVmZmRpb19wb2lzb24ucmFuZ2Uuc3RhcnQsXFxubW0vdXNlcmZhdWx0ZmQuYy00NTIxLVxcdFxcdFxcdFxcdFxcdCAgdWZmZGlvX3BvaXNvbi5yYW5nZS5sZW4sIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzowOC4yMjQxNTU3M1oiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDMxNTU3ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKlJldmlld2luZyBNZW1vcnkgQ29uZmlndXJhdGlvbnMgZm9yIGEgUGF0Y2gqKlxuXG5SaWdodCwgc28gYHN5c191c2VyZmF1bHRmZGAgc2hvdWxkIGJlIG9rYXkuIE5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgdGhlcmUuIE5vdywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnczogSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGNvcnJlY3RseSBzZXQgdXAgdG8gaGFuZGxlIHRoZSBjaGFuZ2VzIHRoaXMgcGF0Y2ggd2lsbCBicmluZy4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGF0IGhvdyBtZW1vcnkgaXMgaGFuZGxlZC5cblxuRmlyc3QsIEknbGwgY2hlY2sgdGhlIGBTV0FQYCBjb25maWd1cmF0aW9uIOKAkyBtYWtpbmcgc3VyZSBzd2FwIHNwYWNlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXMgcmVxdWlyZWQgYnkgdGhpcyBzeXN0ZW0uIEFmdGVyIHRoYXQgSSdsbCBsb29rIGF0IGBaU1dBUGAgYW5kIGl0cyBzdGF0dXMuIE9idmlvdXNseSwgYFVTRVJGQVVMVEZEYCBpcyBrZXkgaGVyZSwgSSBuZWVkIHRvIG1ha2UgY2VydGFpbiBpdCBpcyBpbmNsdWRlZCBhcyB3ZWxsLCBvciBhdCBsZWFzdCBpcyBjb3JyZWN0bHkgc2V0IGluIG15IHRhcmdldCBzeXN0ZW0uIEknbGwgaW5jbHVkZSBgU0hNRU1gIGlmIGl0IHNlZW1zIG5lY2Vzc2FyeS4gSXQncyB1c3VhbGx5IGVuYWJsZWQgb3IgZGVmYXVsdHMgdG8gZW5hYmxlZCwgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnkuXG5cbldhaXQgYSBzZWNvbmTigKYgdGhlIHBhdGNoIHRvdWNoZXMgYG1tL3NobWVtLmNgLiBUaGF0IG1lYW5zIEkgKm11c3QqIHZlcmlmeSBgQ09ORklHX1NITUVNYCBpcyBlbmFibGVkLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzIG9uIHNoYXJlZCBtZW1vcnkuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgcGF0Y2ggcmVsaWVzIG9uIG9yIGFmZmVjdHMgc2hhcmVkIG1lbW9yeSBjb25maWd1cmF0aW9ucy4gSSBjYW4ndCBwcm9jZWVkIHdpdGhvdXQgdGhhdCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU3NzYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzoxMi4yNTU3MTcxMDZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMDUwMzExLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0hNRU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MTIuMzM1Nzc1OTA3WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODc2NTc2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGxpdmVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBMZXQncyBzZWUuLi4gdGhlIGBpbml0L2AgZGlyZWN0b3J5IGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiBpdHMgcm9sZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gQW5kIHdpdGhpbiB0aGF0LCBgS2NvbmZpZ2AgaXMgdGhlIG9idmlvdXMgdGFyZ2V0LiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlY2xhcmVkLCBhbmQgaG9wZWZ1bGx5LCBvdXIgbXlzdGVyeSBvcHRpb24gaXMgZGVmaW5lZCB0aGVyZSwgYWxvbmcgd2l0aCBhbGwgdGhlIG1ldGFkYXRhIHdlIG5lZWQuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24gaW50byB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZXNjcmlwdGlvbnMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE2NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ3OjE1LjUyMzQzNTg1MloiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NTA3OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTSE1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MjQ9Y29uZmlnIEVWRU5URkRcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTMyLVxcbmluaXQvS2NvbmZpZzoxOTMzOmNvbmZpZyBTSE1FTVxcbmluaXQvS2NvbmZpZy0xOTM0LVxcdGJvb2wgXFxcIlVzZSBmdWxsIHNobWVtIGZpbGVzeXN0ZW1cXFwiIGlmIEVYUEVSVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzoxNS42MzI5NDgwMTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMTI2NzU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgLSBLZXkgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IHNoYXJlZCBtZW1vcnksIHNvIGBDT05GSUdfU0hNRU1gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuIExldCdzIHNlZS4uLiB3ZSd2ZSBnb3Qgc29tZSBrZXJuZWwgY29uZmlncyB0byBrZWVwIGluIG1pbmQsIHNwZWNpZmljYWxseSBgU1dBUGAsIGBaU1dBUGAsIGBVU0VSRkFVTFRGRGAsIGFuZCBvZiBjb3Vyc2UsIGBTSE1FTWAuIFRob3NlIGFsbCBwbGF5IGludG8gdGhpcy5cblxuTm93LCB3aGljaCBzeW1ib2xzIGFyZSB0aGUgY29yZSBvZiB0aGlzIGRpc2N1c3Npb24/IFdlIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gYHN5c19taW5jb3JlYCwgYHNobWVtX2dldF9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcGluX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgc3lzX3VzZXJmYXVsdGZkYCwgYHpzd2FwX3N0b3JlYCwgYW5kIGB6c3dhcF9sb2FkYC4gRWFjaCBvZiB0aGVzZSBhcmUgZXNzZW50aWFsIHBpZWNlcyBvZiB0aGUgcHV6emxlLlxuXG5XYWl0IGEgc2Vjb25kLCBob3cgaXMgYHN5c19taW5jb3JlYCBhY3R1YWxseSBkZWZpbmVkPyBJcyBpdCBzaW1wbHkgYHN5c19taW5jb3JlYCBvciBjb3VsZCBpdCBiZSB0aGUgeDY0IHNwZWNpZmljIHZlcnNpb24sIGBfX3g2NF9zeXNfbWluY29yZWA/IFN5c2NhbGxzIGFyZSB1c3VhbGx5IGRlZmluZWQgdXNpbmcgYFNZU0NBTExfREVGSU5FYCwgc28sIGxldCdzIHZlcmlmeS4gSSBjb3VsZCBwcm9iYWJseSBnZXQgYXdheSB3aXRoIGp1c3Qgc2VhcmNoaW5nIGZvciBgc3lzX21pbmNvcmVgIG9yIHNpbXBseSBgbWluY29yZWAuIExldCdzIGp1c3QgZG91YmxlIGNoZWNrIGluIGBtbS9taW5jb3JlLmNgIGZvciBhbnkgZGVmaW5pdGlvbnMgdXNpbmcgYFNZU0NBTExfREVGSU5FYC4gSSdsbCBjb25maXJtIGhvdyBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NDM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ3OjIwLjA2NDIxOTg5NFoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4MDE5NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU1lTQ0FMTF9ERUZJTkUuKm1pbmNvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWluY29yZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pbmNvcmUuYz0yNDY9c3RhdGljIGxvbmcgZG9fbWluY29yZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGFnZXMsIHVuc2lnbmVkIGNoYXIgKnZlYylcXG4tLVxcbm1tL21pbmNvcmUuYy0yOTEtICovXFxubW0vbWluY29yZS5jOjI5MjpTWVNDQUxMX0RFRklORTMobWluY29yZSwgdW5zaWduZWQgbG9uZywgc3RhcnQsIHNpemVfdCwgbGVuLFxcbm1tL21pbmNvcmUuYy0yOTMtXFx0XFx0dW5zaWduZWQgY2hhciBfX3VzZXIgKiwgdmVjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzoyMC4xMzEwMjgyMDdaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQzNjE5MzU0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgU2VsZWN0aW9uOiBBIEtlcm5lbCBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB3YXMgdG8gbGV2ZXJhZ2UgYGRvX21pbmNvcmVgLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQncyBzdGF0aWMuIFRoYXQncyBhIG5vLWdvIHNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgdG8gYXZvaWQgaW5saW5pbmcgaXNzdWVzLiAgU28sIEknbGwgZ28gd2l0aCBgc3lzX21pbmNvcmVgIGFuZCBgc3lzX3VzZXJmYXVsdGZkYCBkaXJlY3RseS4gVGhleSBhcmUgc3lzY2FsbHMsIHdoaWNoIFN5emthbGxlciBzaG91bGQgaGFuZGxlIGVhc2lseS5cblxuSSd2ZSBnb3QgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLiBMZXQncyBzZWUuLi4gYHpzd2FwX3N0b3JlYCBhbmQgYHpzd2FwX2xvYWRgIGFyZSBnb29kLiAgYHJlYWRfc3dhcF9jYWNoZV9hc3luY2AsIGBzd2FwaW5fcmVhZGFoZWFkYCwgYHN3YXBfcmV0cnlfdGFibGVfYWxsb2NgLCBgc3dwX3N3YXBjb3VudGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGFuZCBgc2htZW1fZ2V0X2ZvbGlvYCBhbGwgbG9vayBzb2xpZCB0b28uIEdvb2QsIGdvb2QsIHRoZXkncmUgYWxsIG5vbi1zdGF0aWMuXG5cbk5vdywgSSB3YXMgYSBiaXQgaHVuZyB1cCBvbiBgZG9fc3dhcF9wYWdlYC4gSXQncyBkZWZpbml0ZWx5IGEgaG90IHBhdGgsIHRoZSBtYWluIGZ1bmN0aW9uIG1vZGlmaWVkLiBUaGUgcGF0Y2ggYWN0dWFsbHkgY2hhbmdlcyBob3cgaXQgaGFuZGxlcyB0aGUgYFZNX0ZBVUxUX1NJR0JVU2AgcmV0dXJuLiBCdXQsIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEl0J3MgYSBrZXkgZnVuY3Rpb24gaW4gc3dhcCwgYnV0IG1heWJlIEkgY2FuIGV4Y2x1ZGUgaXQuICBUaGUgbW9kaWZpZWQgYGdldF9zd2FwX2RldmljZWAgaXMgY2FsbGVkIGJ5IGFsbCB0aGVzZSBmdW5jdGlvbnMgSSd2ZSBsaXN0ZWQsIHNvIGZ1enppbmcgdGhvc2Ugc2hvdWxkIHN0aWxsIGhpdCB0aGUgcmVsZXZhbnQgbG9naWMsIHBhcnRpY3VsYXJseSB0aGUgYEVSUl9QVFIoLUVJTlZBTClgIGhhbmRsaW5nIGluIGBnZXRfc3dhcF9kZXZpY2VgLiBJIHdpbGwgcmVseSBvbiB0aGUgb3RoZXIgZnVuY3Rpb25zIHRvIGhpdCB0aGF0IGBnZXRfc3dhcF9kZXZpY2VgIGJlaGF2aW9yLiBUaGF0IHdpbGwgZ2l2ZSBnb29kIGNvdmVyYWdlIG9mIHRoZSBjaGFuZ2VzLlxuXG5TbywgbGV0J3MgcmV2aWV3OiB0aGUgcGF0Y2ggaXMgYWJvdXQgYGdldF9zd2FwX2RldmljZSgpYCBub3cgcmV0dXJuaW5nIGBFUlJfUFRSKC1FSU5WQUwpYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgYmFkIHN3YXAgZW50cmllcy4gSXQgdXBkYXRlcyBtYW55IGNhbGxlcnMgaW4gdGhlIGtlcm5lbCB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgLCBhbmQgYGRvX3N3YXBfcGFnZWAgbm93IHVzZXMgYElTX0VSUigpYCB0byByZXR1cm4gYFZNX0ZBVUxUX1NJR0JVU2AuIFRoaXMgZml4ZXMgYSBwb3NzaWJsZSBpbmZpbml0ZSBsb29wIGZyb20gbWFsZm9ybWVkIGVudHJpZXMsIHNvIGl0J3MgYSBmdW5jdGlvbmFsLCB1c2VyLXJlYWNoYWJsZSBjaGFuZ2UgdGhhdCAqbmVlZHMqIGZ1enppbmcuXG5cbkknbGwgYmUgdXNpbmcgY29uZmlncyBgU1dBUGAsIGBaU1dBUGAsIGBVU0VSRkFVTFRGRGAsIGFuZCBgU0hNRU1gIHRvIGNvdmVyIGFsbCB0aGUgcmVsZXZhbnQgc3Vic3lzdGVtcy5cblxuTXkgZmluYWwgbGlzdCBvZiBzeW1ib2xzIHRvIGZvY3VzIG9uIGlzOiBgc3lzX21pbmNvcmVgLCBgc3lzX3VzZXJmYXVsdGZkYCwgYHNobWVtX2dldF9mb2xpb2AsIGByZWFkX3N3YXBfY2FjaGVfYXN5bmNgLCBgc3dhcGluX3JlYWRhaGVhZGAsIGBzd2FwX3JldHJ5X3RhYmxlX2FsbG9jYCwgYHN3cF9zd2FwY291bnRgLCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLCBgenN3YXBfc3RvcmVgLCBhbmQgYHpzd2FwX2xvYWRgLiAgSSBmZWVsIGNvbmZpZGVudCB0aGF0IHRoaXMgc2VsZWN0aW9uIHdpbGwgcHJvdmlkZSBjb21wcmVoZW5zaXZlIGNvdmVyYWdlIG9mIHRoZSBwYXRjaCdzIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MDk3LCJPdXRwdXRUb2tlbnMiOjI2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTk6NDc6MzQuNDkyOTY4ODI4WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNjY5OTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiVVNFUkZBVUxURkRcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fZ2V0X2ZvbGlvXCIsXG4gICAgXCJyZWFkX3N3YXBfY2FjaGVfYXN5bmNcIixcbiAgICBcInN3YXBpbl9yZWFkYWhlYWRcIixcbiAgICBcInN3YXBfcmV0cnlfdGFibGVfYWxsb2NcIixcbiAgICBcInN3cF9zd2FwY291bnRcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJ6c3dhcF9zdG9yZVwiLFxuICAgIFwienN3YXBfbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGBFUlJfUFRSKC1FSU5WQUwpYCBpbnN0ZWFkIG9mIGBOVUxMYCBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcy4gSXQgdXBkYXRlcyBtdWx0aXBsZSBjYWxsZXJzIGFjcm9zcyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zIChjb3JlIG1tLCBzaG1lbSwgbWluY29yZSwgc3dhcGZpbGUsIHVzZXJmYXVsdGZkLCB6c3dhcCkgdG8gaGFuZGxlIHRoZSBuZXcgcmV0dXJuIHR5cGUgdXNpbmcgYElTX0VSUl9PUl9OVUxMKClgLiBOb3RhYmx5LCBgZG9fc3dhcF9wYWdlKClgIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYElTX0VSUigpYCBhbmQgcmV0dXJucyBgVk1fRkFVTFRfU0lHQlVTYCBpbnN0ZWFkIG9mIHJldHJ5aW5nLCBmaXhpbmcgYSBwb3RlbnRpYWwgaW5maW5pdGUgcGFnZSBmYXVsdCBsb29wIGZvciBtYWxmb3JtZWQgZW50cmllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIlpTV0FQXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiLFxuICAgIFwiU0hNRU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG1lbV9nZXRfZm9saW9cIixcbiAgICBcInJlYWRfc3dhcF9jYWNoZV9hc3luY1wiLFxuICAgIFwic3dhcGluX3JlYWRhaGVhZFwiLFxuICAgIFwic3dhcF9yZXRyeV90YWJsZV9hbGxvY1wiLFxuICAgIFwic3dwX3N3YXBjb3VudFwiLFxuICAgIFwic3dhcF9wdXRfZW50cmllc19kaXJlY3RcIixcbiAgICBcInpzd2FwX3N0b3JlXCIsXG4gICAgXCJ6c3dhcF9sb2FkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYEVSUl9QVFIoLUVJTlZBTClgIGluc3RlYWQgb2YgYE5VTExgIGZvciBtYWxmb3JtZWQgc3dhcCBlbnRyaWVzLiBJdCB1cGRhdGVzIG11bHRpcGxlIGNhbGxlcnMgYWNyb3NzIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgKGNvcmUgbW0sIHNobWVtLCBtaW5jb3JlLCBzd2FwZmlsZSwgdXNlcmZhdWx0ZmQsIHpzd2FwKSB0byBoYW5kbGUgdGhlIG5ldyByZXR1cm4gdHlwZSB1c2luZyBgSVNfRVJSX09SX05VTEwoKWAuIE5vdGFibHksIGBkb19zd2FwX3BhZ2UoKWAgbm93IGV4cGxpY2l0bHkgY2hlY2tzIGZvciBgSVNfRVJSKClgIGFuZCByZXR1cm5zIGBWTV9GQVVMVF9TSUdCVVNgIGluc3RlYWQgb2YgcmV0cnlpbmcsIGZpeGluZyBhIHBvdGVudGlhbCBpbmZpbml0ZSBwYWdlIGZhdWx0IGxvb3AgZm9yIG1hbGZvcm1lZCBlbnRyaWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ3OjM0LjYzNDY1OTMxM1oiLCJTZXEiOjU5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg2MDU0MTYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE5OjQ3OjM0LjYzNTIzNTIzM1oiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODU5OTU5NjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgZ2V0X3N3YXBfZGV2aWNlKClgIHRvIHJldHVybiBhbiBlcnJvciBwb2ludGVyIChgRVJSX1BUUigtRUlOVkFMKWApIGZvciBtYWxmb3JtZWQgc3dhcCBlbnRyaWVzLCByYXRoZXIgdGhhbiBqdXN0IGBOVUxMYC4gSXQgdXBkYXRlcyB2YXJpb3VzIGNhbGxlcnMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL21lbW9yeS5jYCwgYG1tL21pbmNvcmUuY2AsIGBtbS9zaG1lbS5jYCwgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS9zd2FwZmlsZS5jYCwgYG1tL3VzZXJmYXVsdGZkLmNgLCBgbW0venN3YXAuY2ApIHRvIHVzZSBgSVNfRVJSX09SX05VTEwoKWAgYW5kIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAoZS5nLiwgcmV0dXJuaW5nIGBWTV9GQVVMVF9TSUdCVVNgIGluIGBkb19zd2FwX3BhZ2UoKWApLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYnVncyBhbmQgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZykuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQsIG5vIG1vZGlmaWNhdGlvbnMgdG8gdXNlci1zcGFjZSBjb3B5IG9wZXJhdGlvbnMsIGFuZCBubyBjaGFuZ2VzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ1N2Y2ZDc1ZjhkNzVhNjE3N2I5ZmI5Njc5OTdhOGM1ZDFhNjc3ZTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxOTozODoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGQ5Y2Y5NDE5NjdjZjAuLjI4NDJjZDk3NmYxZDMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC00OTU2LDggKzQ5NTYsMTMgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXG4gXHQvKiBQcmV2ZW50IHN3YXBvZmYgZnJvbSBoYXBwZW5pbmcgdG8gdXMuICovXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAodW5saWtlbHkoIXNpKSlcbitcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbitcdFx0LyogQSBtYWxmb3JtZWQgZW50cnkgbmV2ZXIgYmVjb21lcyB2YWxpZCwgc28gZG9uJ3QgcmV0cnkgaXQuICovXG4rXHRcdGlmIChJU19FUlIoc2kpKVxuK1x0XHRcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcdFx0c2kgPSBOVUxMO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0aWYgKGZvbGlvKVxuZGlmZiAtLWdpdCBhL21tL21pbmNvcmUuYyBiL21tL21pbmNvcmUuY1xuaW5kZXggZmY0YWM4MjgxNzY4My4uYzA4NjgzNmJjNGJjYyAxMDA2NDRcbi0tLSBhL21tL21pbmNvcmUuY1xuKysrIGIvbW0vbWluY29yZS5jXG5AQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pXG4gXHQgKi9cbiBcdGlmIChzaG1lbSkge1xuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICghc2kpXG4rXHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNjU1NzJjYmYxYmQzYy4uZDBhOWY1MmJmZWQ3MSAxMDA2NDRcbi0tLSBhL21tL3NobWVtLmNcbisrKyBiL21tL3NobWVtLmNcbkBAIC0yMjc2LDcgKzIyNzYsNyBAQCBzdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFxuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoaW5kZXhfZW50cnkpO1xuIFx0b3JkZXIgPSBzaG1lbV9jb25maXJtX3N3YXAobWFwcGluZywgaW5kZXgsIGluZGV4X2VudHJ5KTtcbi1cdGlmICh1bmxpa2VseSghc2kpKSB7XG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKSB7XG4gXHRcdGlmIChvcmRlciBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0ZWxzZVxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggNGI3YTMzMDNjNDYzYi4uZjJlODZkNjYyNmVjYyAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNzE1LDcgKzcxNSw3IEBAIHN0cnVjdCBmb2xpbyAqcmVhZF9zd2FwX2NhY2hlX2FzeW5jKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRtcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCAwLCBcdTAwMjZpbHgpO1xuQEAgLTk1MSw3ICs5NTEsNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX3ZtYV9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdCAqL1xuIFx0XHRpZiAoc3dwX3R5cGUoZW50cnkpICE9IHN3cF90eXBlKHRhcmdfZW50cnkpKSB7XG4gXHRcdFx0c2kgPSBnZXRfc3dhcF9kZXZpY2UoZW50cnkpO1xuLVx0XHRcdGlmICghc2kpXG4rXHRcdFx0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKFx1MDAyNmN0eCwgZW50cnksIGdmcF9tYXNrLCBtcG9sLCBpbHgsXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDRkNGUzZTMwNTlmNmIuLjI5NjEyYTBjZjdhZmEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMTUwNCw3ICsxNTA0LDcgQEAgaW50IHN3YXBfcmV0cnlfdGFibGVfYWxsb2Moc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcClcbiBcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnRyeSk7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoIXNpKVxuK1x0aWYgKElTX0VSUl9PUl9OVUxMKHNpKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgb2Zmc2V0KTtcbkBAIC0xODU5LDcgKzE4NTksOSBAQCB2b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuICAqIENoZWNrIHdoZXRoZXIgc3dhcCBlbnRyeSBpcyB2YWxpZCBpbiB0aGUgc3dhcCBkZXZpY2UuICBJZiBzbyxcbiAgKiByZXR1cm4gcG9pbnRlciB0byBzd2FwX2luZm9fc3RydWN0LCBhbmQga2VlcCB0aGUgc3dhcCBlbnRyeSB2YWxpZFxuICAqIHZpYSBwcmV2ZW50aW5nIHRoZSBzd2FwIGRldmljZSBmcm9tIGJlaW5nIHN3YXBvZmYsIHVudGlsXG4tICogcHV0X3N3YXBfZGV2aWNlKCkgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlIHJldHVybiBOVUxMLlxuKyAqIHB1dF9zd2FwX2RldmljZSgpIGlzIGNhbGxlZC4gIFJldHVybiBOVUxMIGZvciBhbiBlbXB0eSBlbnRyeSBvciBhXG4rICogZGV2aWNlIHRoYXQgaXMgZ29pbmcgYXdheSwgYW5kIEVSUl9QVFIoLUVJTlZBTCkgaWYgdGhlIGVudHJ5IGl0c2VsZlxuKyAqIGlzIG1hbGZvcm1lZCBhbmQgY2FuIG5ldmVyIG5hbWUgYSBzbG90IG9uIGFueSBkZXZpY2UuXG4gICpcbiAgKiBOb3RpY2UgdGhhdCBzd2Fwb2ZmIG9yIHN3YXBvZmYrc3dhcG9uIGNhbiBzdGlsbCBoYXBwZW4gYmVmb3JlIHRoZVxuICAqIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoKSBpbiBnZXRfc3dhcF9kZXZpY2UoKSBvciBhZnRlciB0aGVcbkBAIC0xODk5LDEzICsxOTAxLDE0IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4gXG4gXHRyZXR1cm4gc2k7XG4gYmFkX25vZmlsZTpcbi1cdHByX2VycihcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbitcdHByX2Vycl9yYXRlbGltaXRlZChcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfZmlsZSwgZW50cnkudmFsKTtcbitcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIG91dDpcbiBcdHJldHVybiBOVUxMO1xuIHB1dF9vdXQ6XG4tXHRwcl9lcnIoXCIlczogJXMlMDhseFxcblwiLCBfX2Z1bmNfXywgQmFkX29mZnNldCwgZW50cnkudmFsKTtcbitcdHByX2Vycl9yYXRlbGltaXRlZChcIiVzOiAlcyUwOGx4XFxuXCIsIF9fZnVuY19fLCBCYWRfb2Zmc2V0LCBlbnRyeS52YWwpO1xuIFx0cGVyY3B1X3JlZl9wdXQoXHUwMDI2c2ktXHUwMDNldXNlcnMpO1xuLVx0cmV0dXJuIE5VTEw7XG4rXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiB9XG4gXG4gLypcbkBAIC0yMDAxLDcgKzIwMDQsNyBAQCBpbnQgc3dwX3N3YXBjb3VudChzd3BfZW50cnlfdCBlbnRyeSlcbiBcdGludCBjb3VudDtcbiBcbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIHN3cF9vZmZzZXQoZW50cnkpKTtcbkBAIC0yMTI3LDcgKzIxMzAsNyBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG4gXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XG4gXG4gXHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFzaSkpXG4rXHRpZiAoV0FSTl9PTl9PTkNFKElTX0VSUl9PUl9OVUxMKHNpKSkpXG4gXHRcdHJldHVybjtcbiBcdGlmIChXQVJOX09OX09OQ0UoZW5kX29mZnNldCBcdTAwM2Ugc2ktXHUwMDNlbWF4KSlcbiBcdFx0Z290byBvdXQ7XG5kaWZmIC0tZ2l0IGEvbW0vdXNlcmZhdWx0ZmQuYyBiL21tL3VzZXJmYXVsdGZkLmNcbmluZGV4IDI0YTRkOTJmZmEzYzIuLmJmN2JjN2ZiMWFhMGYgMTAwNjQ0XG4tLS0gYS9tbS91c2VyZmF1bHRmZC5jXG4rKysgYi9tbS91c2VyZmF1bHRmZC5jXG5AQCAtMTcwMCw3ICsxNzAwLDggQEAgc3RhdGljIGxvbmcgbW92ZV9wYWdlc19wdGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWRcbiBcdFx0fVxuIFxuIFx0XHRzaSA9IGdldF9zd2FwX2RldmljZShlbnRyeSk7XG4tXHRcdGlmICh1bmxpa2VseSghc2kpKSB7XG4rXHRcdGlmIChJU19FUlJfT1JfTlVMTChzaSkpIHtcbitcdFx0XHRzaSA9IE5VTEw7XG4gXHRcdFx0cmV0ID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCBmN2M5Yzg5ZjY0NDljLi5iYzliOTMxZDZmNDQ3IDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTk5Nyw3ICs5OTcsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbi1cdGlmICghc2kpXG4rXHRpZiAoSVNfRVJSX09SX05VTEwoc2kpKVxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0NzozNC42MzUyMzYxMzNaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg1OTkyNDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBTd2FwIEVudHJ5IEVycm9yIEhhbmRsaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaC4gSXQncyBmb2N1c2VkIG9uIGltcHJvdmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYGdldF9zd2FwX2RldmljZSgpYC4gU3BlY2lmaWNhbGx5LCBpbnN0ZWFkIG9mIHJldHVybmluZyBgTlVMTGAgZm9yIGNlcnRhaW4gZXJyb3JzIHdpdGggc3dhcCBlbnRyaWVzIChsaWtlIGJhZCBmaWxlcyBvciBvZmZzZXRzKSwgdGhlIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGFuIGVycm9yIHBvaW50ZXIsIGBFUlJfUFRSKC1FSU5WQUwpYC4gVGhlIHN1YnNlcXVlbnQgY2hhbmdlIGlzIHVwZGF0aW5nIHRoZSBjYWxsZXJzIG9mIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gdXNlIGBJU19FUlJfT1JfTlVMTCgpYCBmb3IgdGhlIGNoZWNrLCBpbnN0ZWFkIG9mIHNpbXBseSBgIXNpYC4gVGhpcyBwYXR0ZXJuIGlzIHNlZW4gdGhyb3VnaG91dCB0aGUgYG1tYCBzdWJzeXN0ZW0sIGFmZmVjdGluZyBhIHJhbmdlIG9mIGZpbGVzLiBJbiBgZG9fc3dhcF9wYWdlKClgLCBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBpZiBgSVNfRVJSKHNpKWAgaXMgdHJ1ZSwgaXQgdHJpZ2dlcnMgYFZNX0ZBVUxUX1NJR0JVU2AuXG5cbk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGVudGlyZWx5IGFib3V0IHJvYnVzdGlmeWluZyB0aGUga2VybmVsJ3MgcmVzcG9uc2UgdG8gKm1hbGZvcm1lZCogb3IgKmludmFsaWQqIHN3YXAgZW50cmllcy4gSXQncyBhIGxvZ2ljIGFuZCBtZW1vcnkgc2FmZXR5IGltcHJvdmVtZW50LiBUaGUgaXNzdWUgYXQgaGFuZCBpcyBsaWtlbHkgcmVsYXRlZCB0byBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgcmVzdWx0aW5nIGluIGNyYXNoZXMgb3IgaW5maW5pdGUgbG9vcHMuIFRoaXMga2luZCBvZiBwcm9ibGVtIGlzIGV4YWN0bHkgdGhlIHNvcnQgb2YgdGhpbmcgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcgYXJlIGRlc2lnbmVkIHRvIGRldGVjdC5cblxuVGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXM6IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55ICpuZXcqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlPyBJIHRoaW5rIG5vdC4gYGdldF9zd2FwX2RldmljZSgpYCByZXR1cm5zIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdGAsIHdoaWNoIGlzIHRoZW4gY2hlY2tlZCBieSBjYWxsZXJzLiBUaGVyZSdzIG5vIHNjZW5hcmlvIGhlcmUgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgYmVpbmcgZGlyZWN0bHkgZXhwb3NlZC4gTm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgbm8gdXNlci1zcGFjZSBjb3BpZXMgYXJlIG1vZGlmaWVkLCBhbmQgSSBzZWUgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdGhyb3VnaCB0aGlzIGNoYW5nZS5cblxuVGhlcmVmb3JlLCBhZnRlciBhIGNhcmVmdWwgcmV2aWV3LCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGlzIGlzIGFib3V0IGJldHRlciBlcnJvciBoYW5kbGluZyBhbmQgcHJldmVudGluZyBjcmFzaGVzIGZyb20gYmFkIHN3YXAgZW50cmllcywgbm90IGFib3V0IGV4cG9zaW5nIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk5OSwiT3V0cHV0VG9rZW5zIjoyMzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxOTo0Nzo0My40OTUxNjUxMjFaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBnZXRfc3dhcF9kZXZpY2UoKWAgdG8gcmV0dXJuIGFuIGVycm9yIHBvaW50ZXIgKGBFUlJfUFRSKC1FSU5WQUwpYCkgZm9yIG1hbGZvcm1lZCBzd2FwIGVudHJpZXMsIHJhdGhlciB0aGFuIGp1c3QgYE5VTExgLiBJdCB1cGRhdGVzIHZhcmlvdXMgY2FsbGVycyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChgbW0vbWVtb3J5LmNgLCBgbW0vbWluY29yZS5jYCwgYG1tL3NobWVtLmNgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBmaWxlLmNgLCBgbW0vdXNlcmZhdWx0ZmQuY2AsIGBtbS96c3dhcC5jYCkgdG8gdXNlIGBJU19FUlJfT1JfTlVMTCgpYCBhbmQgaGFuZGxlIHRoZSBlcnJvciBhcHByb3ByaWF0ZWx5IChlLmcuLCByZXR1cm5pbmcgYFZNX0ZBVUxUX1NJR0JVU2AgaW4gYGRvX3N3YXBfcGFnZSgpYCkuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nKS4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgaW50cm9kdWNlZCwgbm8gbW9kaWZpY2F0aW9ucyB0byB1c2VyLXNwYWNlIGNvcHkgb3BlcmF0aW9ucywgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGdldF9zd2FwX2RldmljZSgpYCB0byByZXR1cm4gYW4gZXJyb3IgcG9pbnRlciAoYEVSUl9QVFIoLUVJTlZBTClgKSBmb3IgbWFsZm9ybWVkIHN3YXAgZW50cmllcywgcmF0aGVyIHRoYW4ganVzdCBgTlVMTGAuIEl0IHVwZGF0ZXMgdmFyaW91cyBjYWxsZXJzIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKGBtbS9tZW1vcnkuY2AsIGBtbS9taW5jb3JlLmNgLCBgbW0vc2htZW0uY2AsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcGZpbGUuY2AsIGBtbS91c2VyZmF1bHRmZC5jYCwgYG1tL3pzd2FwLmNgKSB0byB1c2UgYElTX0VSUl9PUl9OVUxMKClgIGFuZCBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHkgKGUuZy4sIHJldHVybmluZyBgVk1fRkFVTFRfU0lHQlVTYCBpbiBgZG9fc3dhcF9wYWdlKClgKS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcpLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkLCBubyBtb2RpZmljYXRpb25zIHRvIHVzZXItc3BhY2UgY29weSBvcGVyYXRpb25zLCBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[1] Phase: Succeeded StartedAt: 2026-08-10 19:47:56 +0000 UTC FinishedAt: 2026-08-10 19:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 19:47:56 +0000 UTC FinishedAt: 2026-08-10 19:47:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2] Phase: Succeeded StartedAt: 2026-08-10 19:47:56 +0000 UTC FinishedAt: 2026-08-10 23:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 19:47:56 +0000 UTC FinishedAt: 2026-08-10 23:41:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 19:47:56 +0000 UTC FinishedAt: 2026-08-10 19:48:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 19:47:56 +0000 UTC FinishedAt: 2026-08-10 19:48:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkgp7c/series-workflowkgp7c-convert-artifact-1424468415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 19:48:06 +0000 UTC FinishedAt: 2026-08-10 20:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 19:48:06 +0000 UTC FinishedAt: 2026-08-10 20:12:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ca40707-9dea-462d-83fe-befb525dd4ed,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-workflowkgp7c/series-workflowkgp7c-convert-artifact-1424468415/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": "79ba9e86-6ef4-43a7-8d18-c20932093135", "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-workflowkgp7c/series-workflowkgp7c-build-action-2473571397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 19:48:06 +0000 UTC FinishedAt: 2026-08-10 20:11:41 +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:*4ca40707-9dea-462d-83fe-befb525dd4ed,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-workflowkgp7c/series-workflowkgp7c-convert-artifact-1424468415/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": "79ba9e86-6ef4-43a7-8d18-c20932093135", "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-workflowkgp7c/series-workflowkgp7c-build-action-2473571397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 20:12:05 +0000 UTC FinishedAt: 2026-08-10 20:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 20:12:05 +0000 UTC FinishedAt: 2026-08-10 20:12:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 20:12:05 +0000 UTC FinishedAt: 2026-08-10 20:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 20:12:05 +0000 UTC FinishedAt: 2026-08-10 20:12:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkgp7c/series-workflowkgp7c-convert-artifact-838250446/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 20:12:15 +0000 UTC FinishedAt: 2026-08-10 20:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 20:12:15 +0000 UTC FinishedAt: 2026-08-10 20:14:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*79ba9e86-6ef4-43a7-8d18-c20932093135,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-workflowkgp7c/series-workflowkgp7c-build-action-2473571397/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-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 20:14:12 +0000 UTC FinishedAt: 2026-08-10 20:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 20:14:12 +0000 UTC FinishedAt: 2026-08-10 20:14:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 20:14:12 +0000 UTC FinishedAt: 2026-08-10 20:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 20:14:12 +0000 UTC FinishedAt: 2026-08-10 20:34:15 +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:*4ca40707-9dea-462d-83fe-befb525dd4ed,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-workflowkgp7c/series-workflowkgp7c-convert-artifact-838250446/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": "1f9a4101-1b5a-473f-91e4-cd6d83deae24", "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-workflowkgp7c/series-workflowkgp7c-build-action-1160597858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 20:14:12 +0000 UTC FinishedAt: 2026-08-10 20:34:05 +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:*4ca40707-9dea-462d-83fe-befb525dd4ed,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-workflowkgp7c/series-workflowkgp7c-convert-artifact-838250446/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": "1f9a4101-1b5a-473f-91e4-cd6d83deae24", "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-workflowkgp7c/series-workflowkgp7c-build-action-1160597858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 20:34:15 +0000 UTC FinishedAt: 2026-08-10 20:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 20:34:15 +0000 UTC FinishedAt: 2026-08-10 20:34:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 20:34:15 +0000 UTC FinishedAt: 2026-08-10 20:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 20:34:15 +0000 UTC FinishedAt: 2026-08-10 20:36:18 +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:*1f9a4101-1b5a-473f-91e4-cd6d83deae24,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-workflowkgp7c/series-workflowkgp7c-build-action-1160597858/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-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 20:36:28 +0000 UTC FinishedAt: 2026-08-10 23:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 20:36:28 +0000 UTC FinishedAt: 2026-08-10 23:41:23 +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":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"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:*79ba9e86-6ef4-43a7-8d18-c20932093135,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1f9a4101-1b5a-473f-91e4-cd6d83deae24,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-workflowkgp7c/series-workflowkgp7c-build-action-2473571397/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-workflowkgp7c/series-workflowkgp7c-build-action-1160597858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 20:36:28 +0000 UTC FinishedAt: 2026-08-10 20:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 20:36:28 +0000 UTC FinishedAt: 2026-08-10 20:36:34 +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":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"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-workflowkgp7c/series-workflowkgp7c-convert-artifact-696880371/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 20:36:28 +0000 UTC FinishedAt: 2026-08-10 20:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 20:36:28 +0000 UTC FinishedAt: 2026-08-10 20:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 20:36:28 +0000 UTC FinishedAt: 2026-08-10 20:36:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 20:36:38 +0000 UTC FinishedAt: 2026-08-10 23:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkgp7c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_get_folio","read_swap_cache_async","swapin_readahead","swap_retry_table_alloc","swp_swapcount","swap_put_entries_direct","zswap_store","zswap_load"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"6b8c8af514d739d0335f5579b585e02babe8a727","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","USERFAULTFD","SHMEM"],"series_id":"e4858e98-a05e-4a6e-b7d9-4880a125695b","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 20:36:38 +0000 UTC FinishedAt: 2026-08-10 23:41:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*79ba9e86-6ef4-43a7-8d18-c20932093135,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1f9a4101-1b5a-473f-91e4-cd6d83deae24,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-workflowkgp7c/series-workflowkgp7c-build-action-2473571397/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-workflowkgp7c/series-workflowkgp7c-build-action-1160597858/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-workflowkgp7c/series-workflowkgp7c-convert-artifact-696880371/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,}