Name: series-workflowhkrtx Phase: Succeeded StartedAt: 2026-08-06 01:19:59 +0000 UTC FinishedAt: 2026-08-06 05:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[0] Phase: Succeeded StartedAt: 2026-08-06 01:19:59 +0000 UTC FinishedAt: 2026-08-06 02:05:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 01:19:59 +0000 UTC FinishedAt: 2026-08-06 02:05:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "86f436567f2516a0083b210bedc933544826a2c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGEALLOC_HOGGER", "DEBUG_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "86f436567f2516a0083b210bedc933544826a2c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGEALLOC_HOGGER", "DEBUG_FS" ], "series_id": "08c3e24e-3a61-4899-97e3-42cbba6446b7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "req_page_alloc_write", "free_page_alloc_write", "page_alloc_read" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VBTExPQ19IT0dHRVImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFfcGFnZV9hbGxvY193cml0ZSYjMzQ7LAogICAgJiMzNDtmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGFsbG9jYXRpbmcgcGFnZXMgdG8gZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlLiBGdXp6aW5nIHRoaXMgaW50ZXJmYWNlIGNhbiBoZWxwIHVuY292ZXIgYnVncyBpbiB0aGUgaG9nZ2VyIGl0c2VsZiBvciB0cmlnZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA0M2EzNTI2NjNhZWRkNDIxNTNhZTQ0ZTE5NzM4ZDJjNzhjNWY0N2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDAyOjA0OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcuZGVidWcgYi9tbS9LY29uZmlnLmRlYnVnXG5pbmRleCA3NjM4ZDc1YjI3ZGI4Li5iYWQ4YTYwNjE1MmMzIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZy5kZWJ1Z1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZy5kZWJ1Z1xuQEAgLTMwOSwzICYjNDM7MzA5LDE1IEBAIGNvbmZpZyBQRVJfVk1BX0xPQ0tfU1RBVFNcbiBcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cbiBcbiBcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuJiM0MztcbiYjNDM7Y29uZmlnIFBBR0VBTExPQ19IT0dHRVJcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtBbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZXMgYW5kIG9yZGVyc1wmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gREVCVUdfRlNcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTYXkgWSB0byBhbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZSBhbmRcbiYjNDM7XHQgIG9yZGVycyB1c2luZyB0aGUgZGVidWcgZnMgZmlsZXN5c3RlbS4gVGhpcyBoZWxwcyB0byBnZW5lcmF0ZSBtZW1vcnlcbiYjNDM7XHQgIHByZXNzdXJlIGVhc2lseS4gVGhpcyBpcyB1c2VmdWwgdG8gZGVidWcgbWVtb3J5IHJlY2xhaW1zIGlzc3VlcyxcbiYjNDM7XHQgIE9PTSB0cmlnZ2VycywgcGFnZSBtaWdyYXRpb24gaXNzdWVzLCBldGMuXG4mIzQzO1xuJiM0MztcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuJiM0MztcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCAyZDA1NzBhMTZlNWJlLi5iNDhmMmFjNmVlODA4IDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlXG5AQCAtMTMzLDYgJiM0MzsxMzMsNyBAQCBvYmotJChDT05GSUdfSURMRV9QQUdFX1RSQUNLSU5HKSAmIzQzOz0gcGFnZV9pZGxlLm9cbiBvYmotJChDT05GSUdfREVCVUdfUEFHRUFMTE9DKSAmIzQzOz0gZGVidWdfcGFnZV9hbGxvYy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xuIG9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xuJiM0MztvYmotJChDT05GSUdfUEFHRUFMTE9DX0hPR0dFUikgJiM0Mzs9IHBhZ2VfYWxsb2NfaG9nZ2VyLm9cbiBvYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4gb2JqLSQoQ09ORklHX1BFUkNQVV9TVEFUUykgJiM0Mzs9IHBlcmNwdS1zdGF0cy5vXG4gb2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSAmIzQzOz0gbWVtcmVtYXAub1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2NfaG9nZ2VyLmMgYi9tbS9wYWdlX2FsbG9jX2hvZ2dlci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzJjMDUwNWE2ZjVhN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvY19ob2dnZXIuY1xuQEAgLTAsMCAmIzQzOzEsNjEwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIFBhZ2UgYWxsb2NhdG9yIERlYnVnRlMgSW50ZXJmYWNlXG4mIzQzOyAqIEF1dGhvcjogSnVhbiBZZXNjYXMgXHUwMDNjanllc2Nhc0Bnb29nbGUuY29tXHUwMDNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgbW9kdWxlIGFsbG93cyB0byBtYWtlIHBhZ2UgYWxsb2NzIHBlciBub2RlLCB6b25lLCBtaWdyYXRlIHR5cGVcbiYjNDM7ICogYW5kIG9yZGVyIHVzaW5nIHRoZSBEZWJ1Z0ZTIGZpbGVzeXN0ZW0uXG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gdGhpcyBtb2R1bGUgaXMgaW5zdGFsbGVkIGFuZCB0aGUgZGVidWdmcyBpcyBtb3VudGVkLCB0aGUgXCYjMzQ7bW1cJiMzNDsgZGlyZWN0b3J5XG4mIzQzOyAqIHdpbGwgYmUgY3JlYXRlZCBpbiBcdTAwM2NkZWJ1Z2ZzIG1vdW50IHBvaW50XHUwMDNlL21tXCYjMzQ7IGRpcmVjdG9yeS4gVW5kZXIgdGhpcyBkaXJlY3RvcnksXG4mIzQzOyAqIHRoZXJlIHdpbGwgYmUgc3ViZGlycyB0byBzZWxlY3QgdGhlIG5vZGVzLCB6b25lcywgb3JkZXJzIGFuZCBtaWdyYXRlIHR5cGUuXG4mIzQzOyAqXG4mIzQzOyAqIEZvciBleGFtcGxlOlxuJiM0MzsgKlxuJiM0MzsgKiAgICAgIC9zeXMva2VybmVsL2RlYnVnL21tL1xuJiM0MzsgKiAgICAgIHwtLSBmcmVlXG4mIzQzOyAqICAgICAgYC0tIG5vZGUtMFxuJiM0MzsgKiAgICAgICAgIHwtLSB6b25lLURNQVxuJiM0MzsgKiAgICAgICAgIHwgICB8LS0gb3JkZXItMFxuJiM0MzsgKiAgICAgICAgIHwgICB8ICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xuJiM0MzsgKiAgICAgICAgIHwgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqICAgICAgICAgfCAgIHwgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZVxuJiM0MzsgKiAgICAgICAgIHwgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICB8ICAgfCAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxuJiM0MzsgKiAgICAgICAgIHwgICB8ICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICB8ICAgfC0tIC4uLlxuJiM0MzsgKiAgICAgICAgIHwgICB8XG4mIzQzOyAqICAgICAgICAgfCAgIGAtLSBvcmRlci05XG4mIzQzOyAqICAgICAgICAgfCAgICAgICB8LS0gbWlncmF0ZS1IaWdoQXRvbWljXG4mIzQzOyAqICAgICAgICAgfCAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuJiM0MzsgKiAgICAgICAgIHwgICAgICAgfC0tIG1pZ3JhdGUtTW92YWJsZVxuJiM0MzsgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICB8ICAgICAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlXG4mIzQzOyAqICAgICAgICAgfCAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuJiM0MzsgKiAgICAgICAgIHwgICAgICAgYC0tIG1pZ3JhdGUtVW5tb3ZhYmxlXG4mIzQzOyAqICAgICAgICAgfCAgICAgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuJiM0MzsgKiAgICAgICAgIGAtLSB6b25lLU5vcm1hbFxuJiM0MzsgKiAgICAgICAgICAgICB8LS0gb3JkZXItMFxuJiM0MzsgKiAgICAgICAgICAgICB8ICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xuJiM0MzsgKiAgICAgICAgICAgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgfCAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbiYjNDM7ICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqICAgICAgICAgICAgIHwgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZVxuJiM0MzsgKiAgICAgICAgICAgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgfCAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxuJiM0MzsgKiAgICAgICAgICAgICB8ICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgfC0tIC4uLi5cbiYjNDM7ICogICAgICAgICAgICAgfFxuJiM0MzsgKiAgICAgICAgICAgICBgLS0gb3JkZXItOVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xuJiM0MzsgKiAgICAgICAgICAgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgICAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbiYjNDM7ICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqICAgICAgICAgICAgICAgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgICAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICpcbiYjNDM7ICogVXNhZ2U6XG4mIzQzOyAqXG4mIzQzOyAqIDEuIFRvIHRyaWdnZXIgdGhlIGFsbG9jYXRpb24sIG5hdmlnYXRlIHRvIHRoZSBkZWJ1Z2ZzIHBhdGggY29ycmVzcG9uZGluZ1xuJiM0MzsgKiAgICB0byB5b3VyIHRhcmdldCBub2RlLCBtZW1vcnkgem9uZSwgYWxsb2NhdGlvbiBvcmRlciwgYW5kIG1pZ3JhdGlvbiB0eXBlLFxuJiM0MzsgKiAgICB0aGVuIHdyaXRlIHRoZSByZXF1ZXN0ZWQgYWxsb2NhdGlvbiBjb3VudCB0byBucl9wYWdlc19hbGxvY3MuXG4mIzQzOyAqXG4mIzQzOyAqICAgIEZvciBleGFtcGxlLCB0byBtYWtlIDMgYWxsb2NzIG9mIG9yZGVyIDksIE1pZ3JhdGUgVHlwZSBNb3ZhYmxlLFxuJiM0MzsgKiAgICBab25lIE5vcm1hbCBhbmQgTm9kZSAwLCBydW46XG4mIzQzOyAqXG4mIzQzOyAqICAgICQgZWNobyAzIFx1MDAzZSAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9ub2RlLTAvem9uZS1Ob3JtYWwvb3JkZXItOS9taWdyYXRlLU1vdmFibGUvbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqXG4mIzQzOyAqIDIuIEZvciBlYWNoIGFsbG9jYXRpb24gY3JlYXRlZCwgYSBjb3JyZXNwb25kaW5nIGZpbGUgbmFtZWQgc2VxdWVudGlhbGx5XG4mIzQzOyAqICAgICgxLCAyLCBuKSB3aWxsIGFwcGVhciBpbiB0aGF0IGRpcmVjdG9yeS5cbiYjNDM7ICpcbiYjNDM7ICogICAgJCBscyAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9ub2RlLTAvem9uZS1Ob3JtYWwvb3JkZXItOS9taWdyYXRlLU1vdmFibGUvXG4mIzQzOyAqICAgIDEgICAyICAgMyAgbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqXG4mIzQzOyAqIDMuIFRvIGZyZWUgdGhlIGFsbG9jYXRpb24sIHdyaXRlIHRoZSBhbGxvY2F0aW9uIGZpbGUgbmFtZSBpbiAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9mcmVlLlxuJiM0MzsgKiAgICBGb3IgZXhhbXBsZSwgdG8gcmVsZWFzZSB0aGUgMm5kIGFsbG9jYXRpb24gcnVuOlxuJiM0MzsgKlxuJiM0MzsgKiAgICAkIGVjaG8gMiBcdTAwM2UgL3N5cy9rZXJuZWwvZGVidWcvbW0vZnJlZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnBfdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXpvbmUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlbWFzay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1tZGlyO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF0b21pY19sb25nX3QgYWxsb2NzX2ZpbGVfc2VxIC0gUmVwcmVzZW50cyB0aGUgbmFtaW5nIHNlcXVlbmNlIHVzZWQgZm9yXG4mIzQzOyAqIGFsbG9jYXRpb24gZmlsZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBhbGxvY3NfZmlsZV9zZXEgPSBBVE9NSUNfSU5JVCgwKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBhbGxvY3NfeGEgLSBSZXByZXNlbnQgdGhlIHhhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBhY3R1YWwgYWxsb2NhdGlvbnMgcGVyZm9ybVxuJiM0MzsgKiBieSB0aGlzIGRyaXZlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZKGFsbG9jc194YSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJlcV9hbGxvYyAtIFJlcHJlc2VudHMgdGhlIHJlcXVlc3RlZCBhbGxvY2F0aW9uXG4mIzQzOyAqIEBub2RlX2lkeDogVGhlIE5vZGUgaW5kZXggdG8gYWxsb2NhdGUgZnJvbS5cbiYjNDM7ICogQHpvbmVfaWR4OiBUaGUgWm9uZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLlxuJiM0MzsgKiBAb3JkZXI6IFRoZSBPcmRlciBvZiBwYWdlcyB0byBhbGxvY2F0ZS5cbiYjNDM7ICogQG1pZ3JhdGVfdHlwZTogVGhlIE1pZ3JhdGUgdHlwZSB0byBhbGxvY2F0ZSBmcm9tLlxuJiM0MzsgKiBAcGFyZW50ZGlyOiBUaGUgcGFyZW50IGRpciB3aGVyZSB0aGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGFsbG9jIHdhcyBjcmVhdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJlcV9hbGxvYyB7XG4mIzQzO1x0aW50IG5vZGVfaWR4O1xuJiM0MztcdGludCB6b25lX2lkeDtcbiYjNDM7XHRpbnQgb3JkZXI7XG4mIzQzO1x0aW50IG1pZ3JhdGVfdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnRkaXI7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBhZ2VfYWxsb2MgLSBSZXByZXNlbnRzIHRoZSBwYWdlIGFsbG9jYXRpb24uXG4mIzQzOyAqIEBwYWdlOiBUaGUgcG9pbnRlciB0byB0aGUgcGFnZShzKSBhbGxvY2F0ZWQuXG4mIzQzOyAqIEByZXFfYWxsb2M6IFRoZSBkZXRhaWxzIG9mIHRoZSBhbGxvY2F0aW9uLlxuJiM0MzsgKiBAYWxsb2NfZGVudHJ5OiBUaGUgcG9pbnRlciB0byB0aGUgZmlsZSB0aGF0IHJlcHJlc2VudHMgdGhlIGFsbG9jYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGFnZV9hbGxvYyB7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0c3RydWN0IHJlcV9hbGxvYyAqcmVxX2FsbG9jO1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKmFsbG9jX2RlbnRyeTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmVxX2FsbG9jX2NhY2hlO1xuJiM0MztzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBhZ2VfYWxsb2NfY2FjaGU7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfdG9fYWxsb2NfZnJvbShpbnQgem9uZV9pZHgsIGdmcF90ICpmbGFnc19wdHIpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHpvbmVfaWR4KSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfWk9ORV9ETUFcbiYjNDM7XHRjYXNlIFpPTkVfRE1BOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ETUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfWk9ORV9ETUEzMlxuJiM0MztcdGNhc2UgWk9ORV9ETUEzMjpcbiYjNDM7XHRcdCpmbGFnc19wdHIgfD0gX19HRlBfRE1BMzI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfSElHSE1FTVxuJiM0MztcdGNhc2UgWk9ORV9ISUdITUVNOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdITUVNO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGNhc2UgWk9ORV9NT1ZBQkxFOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9NT1ZBQkxFO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBaT05FX05PUk1BTDpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21pZ3JhdGVfdHlwZV90b19hbGxvY19mcm9tKGludCBtaWdyYXRlX3R5cGUsIGdmcF90ICpmbGFnc19wdHIpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKG1pZ3JhdGVfdHlwZSkge1xuJiM0MztcdGNhc2UgTUlHUkFURV9VTk1PVkFCTEU6XG4mIzQzO1x0XHQqZmxhZ3NfcHRyIFx1MDAyNj0gfihfX0dGUF9SRUNMQUlNQUJMRSB8IF9fR0ZQX01PVkFCTEUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNSUdSQVRFX1JFQ0xBSU1BQkxFOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9SRUNMQUlNQUJMRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUlHUkFURV9ISUdIQVRPTUlDOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdIO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNSUdSQVRFX01PVkFCTEU6IGRlZmF1bHQ6XG4mIzQzO1x0XHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX01PVkFCTEU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBhZ2VfYWxsb2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsXG4mIzQzO1x0XHRcdFx0ICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcbiYjNDM7e1xuJiM0MztcdC8qICBXaGljaCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJpbnQgYWJvdXQgdGhlIHBhZ2Ugb3IgYWxsb2NhdGlvbj8gKi9cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9hbGxvY19mb3BzID0ge1xuJiM0MztcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4mIzQzO1x0LnJlYWQgPSBwYWdlX2FsbG9jX3JlYWQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1ha2VfYWxsb2Moc3RydWN0IHJlcV9hbGxvYyAqcmVxLFxuJiM0MztcdFx0XHQgICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmFsbG9jX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdGNoYXIgbmV3X2FsbG9jX25hbWVbMjBdO1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm5ld19hbGxvY19kZW50cnk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKHJlcS1cdTAwM2Vub2RlX2lkeCwgZmxhZ3MsIHJlcS1cdTAwM2VvcmRlcik7XG4mIzQzO1x0aWYgKHBhZ2UpIHtcbiYjNDM7XHRcdHBhID0ga21lbV9jYWNoZV9hbGxvYyhwYWdlX2FsbG9jX2NhY2hlLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghcGEpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0Z290byBmcmVlX3BhZ2VzO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdCphbGxvY19pZCA9IGF0b21pY19sb25nX2luY19yZXR1cm4oXHUwMDI2YWxsb2NzX2ZpbGVfc2VxKTtcbiYjNDM7XHRcdHNucHJpbnRmKG5ld19hbGxvY19uYW1lLCBzaXplb2YobmV3X2FsbG9jX25hbWUpLCBcJiMzNDslbHVcJiMzNDssXG4mIzQzO1x0XHRcdCAqYWxsb2NfaWQpO1xuJiM0MztcbiYjNDM7XHRcdG5ld19hbGxvY19kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxuJiM0MztcdFx0XHRuZXdfYWxsb2NfbmFtZSwgMDQwMCwgcmVxLVx1MDAzZXBhcmVudGRpcixcbiYjNDM7XHRcdFx0cGEsIFx1MDAyNnBhZ2VfYWxsb2NfZm9wcyk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG5ld19hbGxvY19kZW50cnkpKSB7XG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIobmV3X2FsbG9jX2RlbnRyeSk7XG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9wYWdlX2FsbG9jO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBhLVx1MDAzZXJlcV9hbGxvYyA9IHJlcTtcbiYjNDM7XHRcdHBhLVx1MDAzZXBhZ2UgPSBwYWdlO1xuJiM0MztcdFx0cGEtXHUwMDNlYWxsb2NfZGVudHJ5ID0gbmV3X2FsbG9jX2RlbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2YWxsb2NzX3hhLCAqYWxsb2NfaWQsIHBhLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVtb3ZlX2FsbG9jX2RlbnRyeTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JlbW92ZV9hbGxvY19kZW50cnk6XG4mIzQzO1x0ZGVidWdmc19yZW1vdmUobmV3X2FsbG9jX2RlbnRyeSk7XG4mIzQzO1xuJiM0MztmcmVlX3BhZ2VfYWxsb2M6XG4mIzQzO1x0a21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTtcbiYjNDM7XG4mIzQzO2ZyZWVfcGFnZXM6XG4mIzQzO1x0X19mcmVlX3BhZ2VzKHBhZ2UsIHJlcS1cdTAwM2VvcmRlcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZnJlZV9hbGxvY19oZWxwZXIodW5zaWduZWQgbG9uZyBhbGxvY19pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlX2FsbG9jICpwYTtcbiYjNDM7XG4mIzQzO1x0cGEgPSB4YV9lcmFzZShcdTAwMjZhbGxvY3NfeGEsIGFsbG9jX2lkKTtcbiYjNDM7XHRpZiAoIXBhKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7VGhlIGFsbG9jX2lkICVsdSB3YXMgbm90IGZvdW5kIVwmIzM0OywgYWxsb2NfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX2ZyZWVfcGFnZXMocGEtXHUwMDNlcGFnZSwgcGEtXHUwMDNlcmVxX2FsbG9jLVx1MDAzZW9yZGVyKTtcbiYjNDM7XHRkZWJ1Z2ZzX3JlbW92ZShwYS1cdTAwM2VhbGxvY19kZW50cnkpO1xuJiM0MztcdGttZW1fY2FjaGVfZnJlZShwYWdlX2FsbG9jX2NhY2hlLCBwYSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcmVxX3BhZ2VfYWxsb2Nfd3JpdGUoKSAtIEFsbG9jYXRlcyB0aGUgcGFnZXMgb24gdGhlIHJlcXVlc3RlZCBub2RlLCB6b25lLFxuJiM0MzsgKiBvcmRlciBhbmQgbWlncmF0ZSB0eXBlLiBPbmNlIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCwgYSBmaWxlIGlzIGNyZWF0ZWRcbiYjNDM7ICogdG8gZnJlZSB0aGUgYWxsb2NhdGlvbiBsYXRlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHJlcV9wYWdlX2FsbG9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZXFfYWxsb2MgKnJlcSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlc19hbGxvY3M7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqYWxsb2NzX2lkcztcbiYjNDM7XHRnZnBfdCBmbGFncyA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNudCwgMTAsIFx1MDAyNm5yX3BhZ2VzX2FsbG9jcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGFsbG9jc19pZHMgPSBrbWFsbG9jX2FycmF5KG5yX3BhZ2VzX2FsbG9jcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLFxuJiM0MztcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFhbGxvY3NfaWRzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHNldF96b25lX3RvX2FsbG9jX2Zyb20ocmVxLVx1MDAzZXpvbmVfaWR4LCBcdTAwMjZmbGFncyk7XG4mIzQzO1x0c2V0X21pZ3JhdGVfdHlwZV90b19hbGxvY19mcm9tKHJlcS1cdTAwM2VtaWdyYXRlX3R5cGUsIFx1MDAyNmZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXNfYWxsb2NzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gbWFrZV9hbGxvYyhyZXEsIGZsYWdzLCBcdTAwMjZhbGxvY19pZCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfYWxsb2NzO1xuJiM0MztcbiYjNDM7XHRcdGFsbG9jc19pZHNbaV0gPSBhbGxvY19pZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKGFsbG9jc19pZHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY250O1xuJiM0MztcbiYjNDM7ZnJlZV9hbGxvY3M6XG4mIzQzO1x0LyogRnJlZSBhbGwgdGhlIHBhZ2VzIGFuZCByZXNvdXJjZXMgcHJldmlvdXNseSBhbGxvY2F0ZWQuICovXG4mIzQzO1x0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcmV0MiA9IGZyZWVfYWxsb2NfaGVscGVyKGFsbG9jc19pZHNbal0pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQyKVxuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7VW5hYmxlIHRvIGZyZWUgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIGZpbGUgJWx1XCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgYWxsb2NzX2lkc1tqXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShhbGxvY3NfaWRzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVxX3BhZ2VfYWxsb2NfZm9wcyA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuJiM0MztcdC53cml0ZSA9IHJlcV9wYWdlX2FsbG9jX3dyaXRlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGZyZWVfcGFnZV9hbGxvY193cml0ZSgpIC0gZnJlZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgcGFnZXMuXG4mIzQzOyAqIEBmaWxlOiBGaWxlIHdoZXJlIHRoZSB1c2VyIGlzIHdyaXRpbmcuXG4mIzQzOyAqIEB1YnVmOiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGUgdXNlciB3YW50cyB0byBkZWxldGUgYW5kIGhhdmUgdGhlXG4mIzQzOyAqICAgICAgIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhhdCBmaWxlIGZyZWVkLlxuJiM0MzsgKiBAY250OiBTaXplIG9mIEB1YnVmLlxuJiM0MzsgKiBAcHBvczogQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzc2l6ZV90IGZyZWVfcGFnZV9hbGxvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCxcbiYjNDM7XHRcdFx0XHQgICAgICBsb2ZmX3QgKnBwb3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1YnVmLCBjbnQsIDEwLCBcdTAwMjZhbGxvY19pZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGZyZWVfYWxsb2NfaGVscGVyKGFsbG9jX2lkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnJlZV9wYWdlX2FsbG9jX2ZvcHMgPSB7XG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO1x0LndyaXRlID0gZnJlZV9wYWdlX2FsbG9jX3dyaXRlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZSgpIC0gQ3JlYXRlcyB0aGUgZmlsZSBcJiMzNDtucl9wYWdlc19hbGxvY3NcJiMzNDsuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBcJiMzNDtucl9wYWdlc19hbGxvY3NcJiMzNDsgZmlsZSB3aWxsIGJlIHVzZWQgdG8gd3JpdGUgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9uc1xuJiM0MzsgKiB0aGF0IHdpbGwgYmUgcGVyZm9ybWVkLiBXaGVuIHRoZSBhbGxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkLCBhIG5ldyBmaWxlIGZvclxuJiM0MzsgKiBlYWNoIGFsbG9jYXRpb24gd2lsbCBiZSBjcmVhdGVkIGluIEBtaWdyYXRlZGlyLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgY3JlYXRlX25yX3BhZ2VzX2FsbG9jc19maWxlKHN0cnVjdCBkZW50cnkgKm1pZ3JhdGVkaXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBpbnQgbmlkLCBpbnQgem9uZV9pZHgsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBpbnQgb3JkZXIsIGludCBtdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZXFfYWxsb2MgKnJlcTtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpucl9wYWdlcztcbiYjNDM7XG4mIzQzO1x0cmVxID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfYWxsb2NfY2FjaGUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBucl9wYWdlc19hbGxvY3NfaW5mb1wmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2Vub2RlX2lkeCA9IG5pZDtcbiYjNDM7XHRyZXEtXHUwMDNlem9uZV9pZHggPSB6b25lX2lkeDtcbiYjNDM7XHRyZXEtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbiYjNDM7XHRyZXEtXHUwMDNlbWlncmF0ZV90eXBlID0gbXR5cGU7XG4mIzQzO1x0cmVxLVx1MDAzZXBhcmVudGRpciA9IG1pZ3JhdGVkaXI7XG4mIzQzO1xuJiM0MztcdG5yX3BhZ2VzID0gZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtucl9wYWdlc19hbGxvY3NcJiMzNDssIDAyMDAsIG1pZ3JhdGVkaXIsIHJlcSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2cmVxX3BhZ2VfYWxsb2NfZm9wcyk7XG4mIzQzO1x0aWYgKElTX0VSUihucl9wYWdlcykpIHtcbiYjNDM7XHRcdGttZW1fY2FjaGVfZnJlZShyZXFfYWxsb2NfY2FjaGUsIHJlcSk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihucl9wYWdlcyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBtaWdyYXRlIHR5cGVcbiYjNDM7ICogaW5zaWRlIHRoZSBvcmRlciBkaXJlY3RvcnkuIE9uY2UgdGhlIG1pZ3JhdGUgdHlwZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXRcbiYjNDM7ICogY3JlYXRlcyB0aGUgXCYjMzQ7bnJfcGFnZXNfYWxsb2NzXCYjMzQ7IGZpbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbWlncmF0ZV90eXBlX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqb3JkZXJkaXIsIGludCBuaWQsXG4mIzQzO1x0XHRcdFx0XHRpbnQgem9uZV9pZHgsIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm1pZ3JhdGVkaXI7XG4mIzQzO1x0Y2hhciBkaXJuYW1lWzI0XTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBtdHlwZSA9IDA7IG10eXBlIFx1MDAzYyBNSUdSQVRFX1RZUEVTOyBtdHlwZSYjNDM7JiM0MzspIHtcbiYjNDM7I2lmZGVmIENPTkZJR19DTUFcbiYjNDM7XHRcdGlmIChtdHlwZSA9PSBNSUdSQVRFX0NNQSkgLyogQ01BIGFsbG9jcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxuJiM0MztcdFx0aWYgKG10eXBlID09IE1JR1JBVEVfSVNPTEFURSkgLyogY2FuJiMzOTt0IGFsbG9jYXRlIGZyb20gaGVyZSAqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0XHRpZiAoem9uZV9pZHggPT0gWk9ORV9NT1ZBQkxFIFx1MDAyNlx1MDAyNiBtdHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNucHJpbnRmKGRpcm5hbWUsIHNpemVvZihkaXJuYW1lKSwgXCYjMzQ7bWlncmF0ZS0lc1wmIzM0OyxcbiYjNDM7XHRcdFx0IG1pZ3JhdGV0eXBlX25hbWVzW210eXBlXSk7XG4mIzQzO1x0XHRtaWdyYXRlZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG9yZGVyZGlyKTtcbiYjNDM7XHRcdGlmIChJU19FUlIobWlncmF0ZWRpcikpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKG1pZ3JhdGVkaXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZShtaWdyYXRlZGlyLCBuaWQsIHpvbmVfaWR4LFxuJiM0MztcdFx0XHRcdFx0XHRvcmRlciwgbXR5cGUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggcGFnZSBvcmRlciBpbnNpZGVcbiYjNDM7ICogdGhlIHpvbmUgZGlyZWN0b3J5LiBPbmNlIHRoYXQgdGhlIHBhZ2Ugb3JkZXIgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIGl0IGNyZWF0ZXNcbiYjNDM7ICogYSBkaXJlY3RvcnkgZm9yIGVhY2ggbWlncmF0ZSB0eXBlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqem9uZWRpciwgaW50IG5pZCxcbiYjNDM7XHRcdFx0XHRcdGludCB6b25lX2lkeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm9yZGVyZGlyO1xuJiM0MztcdGNoYXIgZGlybmFtZVsxMl07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgb3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgTlJfUEFHRV9PUkRFUlM7IG9yZGVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcJiMzNDtvcmRlci0lZFwmIzM0Oywgb3JkZXIpO1xuJiM0MztcdFx0b3JkZXJkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgem9uZWRpcik7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG9yZGVyZGlyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIob3JkZXJkaXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycyhvcmRlcmRpciwgbmlkLCB6b25lX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0b3JkZXIpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY3JlYXRlX3pvbmVzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggcG9wdWxhdGVkIHpvbmUgaW4gdGhlXG4mIzQzOyAqIG5vZGUuIE9uY2UgdGhhdCB0aGUgem9uZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBmb3JcbiYjNDM7ICogZWFjaCBvcmRlciBzdXBwb3J0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGU6IFpPTkVfREVWSUNFIHBhZ2VzIHdvbiYjMzk7dCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhpcyBkcml2ZXIuIFRoZSBtYWluIHJlYXNvblxuJiM0MzsgKiBpcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBtYW5hZ2VkIGJ5IHRoZSBCdWRkeSBBbGxvY2F0b3Igb3IgQ01BIGFsbG9jYXRvci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV96b25lc19zdWJkaXJzKHN0cnVjdCBkZW50cnkgKm5vZGVkaXIsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSwgaW50IG5pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKnpvbmVkaXI7XG4mIzQzO1x0c3RydWN0IHpvbmUgKnpvbmU7XG4mIzQzO1x0c3RydWN0IHpvbmUgKm5vZGVfem9uZXMgPSBwZ2RhdGEtXHUwMDNlbm9kZV96b25lcztcbiYjNDM7XHRpbnQgem9uZV9pZHg7XG4mIzQzO1x0Y2hhciBkaXJuYW1lWzI0XTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKHpvbmUgPSBub2RlX3pvbmVzLCB6b25lX2lkeCA9IDA7IHpvbmUgLSBub2RlX3pvbmVzIFx1MDAzYyBNQVhfTlJfWk9ORVM7XG4mIzQzO1x0XHRcdCYjNDM7JiM0Mzt6b25lLCAmIzQzOyYjNDM7em9uZV9pZHgpIHtcbiYjNDM7XHRcdGlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFpPTkVfREVWSUNFIHBhZ2VzIHdvbiYjMzk7dCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhpcyBkcml2ZXIuICovXG4mIzQzO1x0XHRpZiAoem9uZV9pc196b25lX2RldmljZSh6b25lKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcJiMzNDt6b25lLSVzXCYjMzQ7LCB6b25lLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0em9uZWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1lLCBub2RlZGlyKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoem9uZWRpcikpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKHpvbmVkaXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKHpvbmVkaXIsIG5pZCwgem9uZV9pZHgpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY3JlYXRlX25vZGVzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggbm9kZSB0aGF0IGNvbnRhaW5zXG4mIzQzOyAqIG1lbW9yeS4gT25jZSB0aGF0IHRoZSBub2RlIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCBpdCBjcmVhdGVzIGEgZGlyZWN0b3J5IGZvclxuJiM0MzsgKiBlYWNoIHpvbmUgaW4gdGhlIG5vZGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbm9kZXNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICptbWRpcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm5vZGVkaXI7XG4mIzQzO1x0Y2hhciBkaXJuYW1lWzEyXTtcbiYjNDM7XHRpbnQgbmlkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuJiM0MztcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdGEgPSBOT0RFX0RBVEEobmlkKTtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksIFwmIzM0O25vZGUtJWRcJiMzNDssIG5pZCk7XG4mIzQzO1x0XHRub2RlZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG1tZGlyKTtcbiYjNDM7XHRcdGlmIChJU19FUlIobm9kZWRpcikpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKG5vZGVkaXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGNyZWF0ZV96b25lc19zdWJkaXJzKG5vZGVkaXIsIHBnZGF0YSwgbmlkKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgcGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpmcmVlX2ZpbGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmVxX2FsbG9jX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXG4mIzQzO1x0XHRcJiMzNDtyZXFfYWxsb2NfY2FjaGVcJiMzNDssIHNpemVvZihzdHJ1Y3QgcmVxX2FsbG9jKSwgMCxcbiYjNDM7XHRcdFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XG4mIzQzO1x0aWYgKCFyZXFfYWxsb2NfY2FjaGUpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtUaGUgcmVxX2FsbG9jX2NhY2hlIGNvdWxkbiYjMzk7dCBiZSBjcmVhdGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycm9yX2V4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYWdlX2FsbG9jX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXG4mIzQzO1x0XHRcJiMzNDtwYWdlX2FsbG9jX2NhY2hlXCYjMzQ7LCBzaXplb2Yoc3RydWN0IHBhZ2VfYWxsb2MpLCAwLFxuJiM0MztcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTtcbiYjNDM7XHRpZiAoIXBhZ2VfYWxsb2NfY2FjaGUpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtUaGUgcGFnZV9hbGxvY19jYWNoZSBjb3VsZG4mIzM5O3QgYmUgY3JlYXRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBjbGVhbl9yZXFfYWxsb2NfY2FjaGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtbWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcJiMzNDttbVwmIzM0OywgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihtbWRpcikpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtVbmFibGUgdG8gY3JlYXRlIG1tIGRpcmVjdG9yeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKG1tZGlyKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW5fcGFnZV9hbGxvY19jYWNoZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGNyZWF0ZV9ub2Rlc19zdWJkaXJzKG1tZGlyKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBjbGVhbl9kaXI7XG4mIzQzO1xuJiM0MztcdGZyZWVfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7ZnJlZVwmIzM0OywgMDIwMCwgbW1kaXIsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZmcmVlX3BhZ2VfYWxsb2NfZm9wcyk7XG4mIzQzO1x0aWYgKElTX0VSUihmcmVlX2ZpbGUpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGZyZWVfZmlsZSk7XG4mIzQzO1x0XHRnb3RvIGNsZWFuX2RpcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y2xlYW5fZGlyOlxuJiM0MztcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShtbWRpcik7XG4mIzQzO1xuJiM0MztjbGVhbl9wYWdlX2FsbG9jX2NhY2hlOlxuJiM0MztcdGttZW1fY2FjaGVfZGVzdHJveShwYWdlX2FsbG9jX2NhY2hlKTtcbiYjNDM7XG4mIzQzO2NsZWFuX3JlcV9hbGxvY19jYWNoZTpcbiYjNDM7XHRrbWVtX2NhY2hlX2Rlc3Ryb3kocmVxX2FsbG9jX2NhY2hlKTtcbiYjNDM7XG4mIzQzO2Vycm9yX2V4aXQ6XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19leGl0IHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfZXhpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaWR4O1xuJiM0MztcbiYjNDM7XHR4YV9mb3JfZWFjaChcdTAwMjZhbGxvY3NfeGEsIGlkeCwgcGEpXG4mIzQzO1x0XHRmcmVlX2FsbG9jX2hlbHBlcihpZHgpO1xuJiM0MztcbiYjNDM7XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobW1kaXIpO1xuJiM0MztcdGttZW1fY2FjaGVfZGVzdHJveShyZXFfYWxsb2NfY2FjaGUpO1xuJiM0MztcdGttZW1fY2FjaGVfZGVzdHJveShwYWdlX2FsbG9jX2NhY2hlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bW9kdWxlX2luaXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19pbml0KTtcbiYjNDM7bW9kdWxlX2V4aXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19leGl0KTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SnVhbiBZZXNjYXNcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW9kdWxlIHRvIGFsbG9jIHBhZ2VzIHRvIGdlbmVyYXRlIG1lbW9yeSBwcmVzc3VyZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VBTExPQ19IT0dHRVImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFfcGFnZV9hbGxvY193cml0ZSYjMzQ7LAogICAgJiMzNDtmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGFsbG9jYXRpbmcgcGFnZXMgdG8gZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlLiBGdXp6aW5nIHRoaXMgaW50ZXJmYWNlIGNhbiBoZWxwIHVuY292ZXIgYnVncyBpbiB0aGUgaG9nZ2VyIGl0c2VsZiBvciB0cmlnZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0M2EzNTI2NjNhZWRkNDIxNTNhZTQ0ZTE5NzM4ZDJjNzhjNWY0N2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDAyOjA0OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWcKaW5kZXggNzYzOGQ3NWIyN2RiOC4uYmFkOGE2MDYxNTJjMyAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZy5kZWJ1ZwomIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnLmRlYnVnCkBAIC0zMDksMyAmIzQzOzMwOSwxNSBAQCBjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTCiAJICBvdmVyaGVhZCBpbiB0aGUgcGFnZSBmYXVsdCBwYXRoLgogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiYjNDM7CiYjNDM7Y29uZmlnIFBBR0VBTExPQ19IT0dHRVIKJiM0MzsJdHJpc3RhdGUgJiMzNDtBbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZXMgYW5kIG9yZGVycyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gREVCVUdfRlMKJiM0MzsJaGVscAomIzQzOwkgIFNheSBZIHRvIGFsbG9jIHBhZ2VzIGZyb20gZGlmZmVyZW50IG5vZGVzLCB6b25lcywgbWlncmF0ZSB0eXBlIGFuZAomIzQzOwkgIG9yZGVycyB1c2luZyB0aGUgZGVidWcgZnMgZmlsZXN5c3RlbS4gVGhpcyBoZWxwcyB0byBnZW5lcmF0ZSBtZW1vcnkKJiM0MzsJICBwcmVzc3VyZSBlYXNpbHkuIFRoaXMgaXMgdXNlZnVsIHRvIGRlYnVnIG1lbW9yeSByZWNsYWltcyBpc3N1ZXMsCiYjNDM7CSAgT09NIHRyaWdnZXJzLCBwYWdlIG1pZ3JhdGlvbiBpc3N1ZXMsIGV0Yy4KJiM0MzsKJiM0MzsJICBJZiBpbiBkb3VidCwgc2F5IE4uCiYjNDM7CmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IDJkMDU3MGExNmU1YmUuLmI0OGYyYWM2ZWU4MDggMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC0xMzMsNiAmIzQzOzEzMyw3IEBAIG9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICYjNDM7PSBwYWdlX2lkbGUubwogb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VBTExPQykgJiM0Mzs9IGRlYnVnX3BhZ2VfYWxsb2Mubwogb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYubwogb2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vCiYjNDM7b2JqLSQoQ09ORklHX1BBR0VBTExPQ19IT0dHRVIpICYjNDM7PSBwYWdlX2FsbG9jX2hvZ2dlci5vCiBvYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vCiBvYmotJChDT05GSUdfUEVSQ1BVX1NUQVRTKSAmIzQzOz0gcGVyY3B1LXN0YXRzLm8KIG9iai0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IG1lbXJlbWFwLm8KZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2NfaG9nZ2VyLmMgYi9tbS9wYWdlX2FsbG9jX2hvZ2dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyYzA1MDVhNmY1YTcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jX2hvZ2dlci5jCkBAIC0wLDAgJiM0MzsxLDYxMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBQYWdlIGFsbG9jYXRvciBEZWJ1Z0ZTIEludGVyZmFjZQomIzQzOyAqIEF1dGhvcjogSnVhbiBZZXNjYXMgJmx0O2p5ZXNjYXNAZ29vZ2xlLmNvbSZndDsKJiM0MzsgKgomIzQzOyAqIFRoaXMgbW9kdWxlIGFsbG93cyB0byBtYWtlIHBhZ2UgYWxsb2NzIHBlciBub2RlLCB6b25lLCBtaWdyYXRlIHR5cGUKJiM0MzsgKiBhbmQgb3JkZXIgdXNpbmcgdGhlIERlYnVnRlMgZmlsZXN5c3RlbS4KJiM0MzsgKgomIzQzOyAqIFdoZW4gdGhpcyBtb2R1bGUgaXMgaW5zdGFsbGVkIGFuZCB0aGUgZGVidWdmcyBpcyBtb3VudGVkLCB0aGUgJiMzNDttbSYjMzQ7IGRpcmVjdG9yeQomIzQzOyAqIHdpbGwgYmUgY3JlYXRlZCBpbiAmbHQ7ZGVidWdmcyBtb3VudCBwb2ludCZndDsvbW0mIzM0OyBkaXJlY3RvcnkuIFVuZGVyIHRoaXMgZGlyZWN0b3J5LAomIzQzOyAqIHRoZXJlIHdpbGwgYmUgc3ViZGlycyB0byBzZWxlY3QgdGhlIG5vZGVzLCB6b25lcywgb3JkZXJzIGFuZCBtaWdyYXRlIHR5cGUuCiYjNDM7ICoKJiM0MzsgKiBGb3IgZXhhbXBsZToKJiM0MzsgKgomIzQzOyAqICAgICAgL3N5cy9rZXJuZWwvZGVidWcvbW0vCiYjNDM7ICogICAgICB8LS0gZnJlZQomIzQzOyAqICAgICAgYC0tIG5vZGUtMAomIzQzOyAqICAgICAgICAgfC0tIHpvbmUtRE1BCiYjNDM7ICogICAgICAgICB8ICAgfC0tIG9yZGVyLTAKJiM0MzsgKiAgICAgICAgIHwgICB8ICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pYwomIzQzOyAqICAgICAgICAgfCAgIHwgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgfCAgIHwgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlCiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlCiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICB8ICAgfCAgIGAtLSBtaWdyYXRlLVVubW92YWJsZQomIzQzOyAqICAgICAgICAgfCAgIHwgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgfCAgIHwtLSAuLi4KJiM0MzsgKiAgICAgICAgIHwgICB8CiYjNDM7ICogICAgICAgICB8ICAgYC0tIG9yZGVyLTkKJiM0MzsgKiAgICAgICAgIHwgICAgICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pYwomIzQzOyAqICAgICAgICAgfCAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgfCAgICAgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlCiYjNDM7ICogICAgICAgICB8ICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICB8ICAgICAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlCiYjNDM7ICogICAgICAgICB8ICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICB8ICAgICAgIGAtLSBtaWdyYXRlLVVubW92YWJsZQomIzQzOyAqICAgICAgICAgfCAgICAgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgYC0tIHpvbmUtTm9ybWFsCiYjNDM7ICogICAgICAgICAgICAgfC0tIG9yZGVyLTAKJiM0MzsgKiAgICAgICAgICAgICB8ICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pYwomIzQzOyAqICAgICAgICAgICAgIHwgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgICAgIHwgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlCiYjNDM7ICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICAgICAgfCAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlCiYjNDM7ICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICAgICAgfCAgIGAtLSBtaWdyYXRlLVVubW92YWJsZQomIzQzOyAqICAgICAgICAgICAgIHwgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgICAgIHwtLSAuLi4uCiYjNDM7ICogICAgICAgICAgICAgfAomIzQzOyAqICAgICAgICAgICAgIGAtLSBvcmRlci05CiYjNDM7ICogICAgICAgICAgICAgICAgIHwtLSBtaWdyYXRlLUhpZ2hBdG9taWMKJiM0MzsgKiAgICAgICAgICAgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgfC0tIG1pZ3JhdGUtTW92YWJsZQomIzQzOyAqICAgICAgICAgICAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgICAgICAgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZQomIzQzOyAqICAgICAgICAgICAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgICAgICAgICBgLS0gbWlncmF0ZS1Vbm1vdmFibGUKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3MKJiM0MzsgKgomIzQzOyAqIFVzYWdlOgomIzQzOyAqCiYjNDM7ICogMS4gVG8gdHJpZ2dlciB0aGUgYWxsb2NhdGlvbiwgbmF2aWdhdGUgdG8gdGhlIGRlYnVnZnMgcGF0aCBjb3JyZXNwb25kaW5nCiYjNDM7ICogICAgdG8geW91ciB0YXJnZXQgbm9kZSwgbWVtb3J5IHpvbmUsIGFsbG9jYXRpb24gb3JkZXIsIGFuZCBtaWdyYXRpb24gdHlwZSwKJiM0MzsgKiAgICB0aGVuIHdyaXRlIHRoZSByZXF1ZXN0ZWQgYWxsb2NhdGlvbiBjb3VudCB0byBucl9wYWdlc19hbGxvY3MuCiYjNDM7ICoKJiM0MzsgKiAgICBGb3IgZXhhbXBsZSwgdG8gbWFrZSAzIGFsbG9jcyBvZiBvcmRlciA5LCBNaWdyYXRlIFR5cGUgTW92YWJsZSwKJiM0MzsgKiAgICBab25lIE5vcm1hbCBhbmQgTm9kZSAwLCBydW46CiYjNDM7ICoKJiM0MzsgKiAgICAkIGVjaG8gMyAmZ3Q7IC9zeXMva2VybmVsL2RlYnVnL21tL25vZGUtMC96b25lLU5vcm1hbC9vcmRlci05L21pZ3JhdGUtTW92YWJsZS9ucl9wYWdlc19hbGxvY3MKJiM0MzsgKgomIzQzOyAqIDIuIEZvciBlYWNoIGFsbG9jYXRpb24gY3JlYXRlZCwgYSBjb3JyZXNwb25kaW5nIGZpbGUgbmFtZWQgc2VxdWVudGlhbGx5CiYjNDM7ICogICAgKDEsIDIsIG4pIHdpbGwgYXBwZWFyIGluIHRoYXQgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogICAgJCBscyAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9ub2RlLTAvem9uZS1Ob3JtYWwvb3JkZXItOS9taWdyYXRlLU1vdmFibGUvCiYjNDM7ICogICAgMSAgIDIgICAzICBucl9wYWdlc19hbGxvY3MKJiM0MzsgKgomIzQzOyAqIDMuIFRvIGZyZWUgdGhlIGFsbG9jYXRpb24sIHdyaXRlIHRoZSBhbGxvY2F0aW9uIGZpbGUgbmFtZSBpbiAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9mcmVlLgomIzQzOyAqICAgIEZvciBleGFtcGxlLCB0byByZWxlYXNlIHRoZSAybmQgYWxsb2NhdGlvbiBydW46CiYjNDM7ICoKJiM0MzsgKiAgICAkIGVjaG8gMiAmZ3Q7IC9zeXMva2VybmVsL2RlYnVnL21tL2ZyZWUKJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICYjMzQ7OiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2dmcF90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW16b25lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ub2RlbWFzay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbW1kaXI7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXRvbWljX2xvbmdfdCBhbGxvY3NfZmlsZV9zZXEgLSBSZXByZXNlbnRzIHRoZSBuYW1pbmcgc2VxdWVuY2UgdXNlZCBmb3IKJiM0MzsgKiBhbGxvY2F0aW9uIGZpbGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IGFsbG9jc19maWxlX3NlcSA9IEFUT01JQ19JTklUKDApOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGFsbG9jc194YSAtIFJlcHJlc2VudCB0aGUgeGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBhbGxvY2F0aW9ucyBwZXJmb3JtCiYjNDM7ICogYnkgdGhpcyBkcml2ZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkoYWxsb2NzX3hhKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcmVxX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb24KJiM0MzsgKiBAbm9kZV9pZHg6IFRoZSBOb2RlIGluZGV4IHRvIGFsbG9jYXRlIGZyb20uCiYjNDM7ICogQHpvbmVfaWR4OiBUaGUgWm9uZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLgomIzQzOyAqIEBvcmRlcjogVGhlIE9yZGVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlLgomIzQzOyAqIEBtaWdyYXRlX3R5cGU6IFRoZSBNaWdyYXRlIHR5cGUgdG8gYWxsb2NhdGUgZnJvbS4KJiM0MzsgKiBAcGFyZW50ZGlyOiBUaGUgcGFyZW50IGRpciB3aGVyZSB0aGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGFsbG9jIHdhcyBjcmVhdGVkLgomIzQzOyAqLwomIzQzO3N0cnVjdCByZXFfYWxsb2MgewomIzQzOwlpbnQgbm9kZV9pZHg7CiYjNDM7CWludCB6b25lX2lkeDsKJiM0MzsJaW50IG9yZGVyOwomIzQzOwlpbnQgbWlncmF0ZV90eXBlOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnRkaXI7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGFnZV9hbGxvYyAtIFJlcHJlc2VudHMgdGhlIHBhZ2UgYWxsb2NhdGlvbi4KJiM0MzsgKiBAcGFnZTogVGhlIHBvaW50ZXIgdG8gdGhlIHBhZ2UocykgYWxsb2NhdGVkLgomIzQzOyAqIEByZXFfYWxsb2M6IFRoZSBkZXRhaWxzIG9mIHRoZSBhbGxvY2F0aW9uLgomIzQzOyAqIEBhbGxvY19kZW50cnk6IFRoZSBwb2ludGVyIHRvIHRoZSBmaWxlIHRoYXQgcmVwcmVzZW50cyB0aGUgYWxsb2NhdGlvbi4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZV9hbGxvYyB7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcmVxX2FsbG9jICpyZXFfYWxsb2M7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmFsbG9jX2RlbnRyeTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmVxX2FsbG9jX2NhY2hlOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGFnZV9hbGxvY19jYWNoZTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfdG9fYWxsb2NfZnJvbShpbnQgem9uZV9pZHgsIGdmcF90ICpmbGFnc19wdHIpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHpvbmVfaWR4KSB7CiYjNDM7I2lmZGVmIENPTkZJR19aT05FX0RNQQomIzQzOwljYXNlIFpPTkVfRE1BOgomIzQzOwkJKmZsYWdzX3B0ciB8PSBfX0dGUF9ETUE7CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX1pPTkVfRE1BMzIKJiM0MzsJY2FzZSBaT05FX0RNQTMyOgomIzQzOwkJKmZsYWdzX3B0ciB8PSBfX0dGUF9ETUEzMjsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSElHSE1FTQomIzQzOwljYXNlIFpPTkVfSElHSE1FTToKJiM0MzsJCSpmbGFnc19wdHIgfD0gX19HRlBfSElHSE1FTTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOwljYXNlIFpPTkVfTU9WQUJMRToKJiM0MzsJCSpmbGFnc19wdHIgfD0gX19HRlBfTU9WQUJMRTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpPTkVfTk9STUFMOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJKmZsYWdzX3B0ciB8PSAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9taWdyYXRlX3R5cGVfdG9fYWxsb2NfZnJvbShpbnQgbWlncmF0ZV90eXBlLCBnZnBfdCAqZmxhZ3NfcHRyKQomIzQzO3sKJiM0MzsJc3dpdGNoIChtaWdyYXRlX3R5cGUpIHsKJiM0MzsJY2FzZSBNSUdSQVRFX1VOTU9WQUJMRToKJiM0MzsJCSpmbGFnc19wdHIgJmFtcDs9IH4oX19HRlBfUkVDTEFJTUFCTEUgfCBfX0dGUF9NT1ZBQkxFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1JR1JBVEVfUkVDTEFJTUFCTEU6CiYjNDM7CQkqZmxhZ3NfcHRyIHw9IF9fR0ZQX1JFQ0xBSU1BQkxFOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUlHUkFURV9ISUdIQVRPTUlDOgomIzQzOwkJKmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdIOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUlHUkFURV9NT1ZBQkxFOiBkZWZhdWx0OgomIzQzOwkJKmZsYWdzX3B0ciB8PSBfX0dGUF9NT1ZBQkxFOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgcGFnZV9hbGxvY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKJiM0MzsJCQkJICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKJiM0Mzt7CiYjNDM7CS8qICBXaGljaCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJpbnQgYWJvdXQgdGhlIHBhZ2Ugb3IgYWxsb2NhdGlvbj8gKi8KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2VfYWxsb2NfZm9wcyA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5vcGVuID0gc2ltcGxlX29wZW4sCiYjNDM7CS5yZWFkID0gcGFnZV9hbGxvY19yZWFkLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWtlX2FsbG9jKHN0cnVjdCByZXFfYWxsb2MgKnJlcSwKJiM0MzsJCQkgICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmFsbG9jX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2VfYWxsb2MgKnBhOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJY2hhciBuZXdfYWxsb2NfbmFtZVsyMF07CiYjNDM7CXN0cnVjdCBkZW50cnkgKm5ld19hbGxvY19kZW50cnk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlX25vcHJvZihyZXEtJmd0O25vZGVfaWR4LCBmbGFncywgcmVxLSZndDtvcmRlcik7CiYjNDM7CWlmIChwYWdlKSB7CiYjNDM7CQlwYSA9IGttZW1fY2FjaGVfYWxsb2MocGFnZV9hbGxvY19jYWNoZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXBhKSB7CiYjNDM7CQkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCQlnb3RvIGZyZWVfcGFnZXM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkqYWxsb2NfaWQgPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKCZhbXA7YWxsb2NzX2ZpbGVfc2VxKTsKJiM0MzsJCXNucHJpbnRmKG5ld19hbGxvY19uYW1lLCBzaXplb2YobmV3X2FsbG9jX25hbWUpLCAmIzM0OyVsdSYjMzQ7LAomIzQzOwkJCSAqYWxsb2NfaWQpOwomIzQzOwomIzQzOwkJbmV3X2FsbG9jX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoCiYjNDM7CQkJbmV3X2FsbG9jX25hbWUsIDA0MDAsIHJlcS0mZ3Q7cGFyZW50ZGlyLAomIzQzOwkJCXBhLCAmYW1wO3BhZ2VfYWxsb2NfZm9wcyk7CiYjNDM7CQlpZiAoSVNfRVJSKG5ld19hbGxvY19kZW50cnkpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihuZXdfYWxsb2NfZGVudHJ5KTsKJiM0MzsJCQlnb3RvIGZyZWVfcGFnZV9hbGxvYzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXBhLSZndDtyZXFfYWxsb2MgPSByZXE7CiYjNDM7CQlwYS0mZ3Q7cGFnZSA9IHBhZ2U7CiYjNDM7CQlwYS0mZ3Q7YWxsb2NfZGVudHJ5ID0gbmV3X2FsbG9jX2RlbnRyeTsKJiM0MzsKJiM0MzsJCXJldCA9IHhhX2luc2VydCgmYW1wO2FsbG9jc194YSwgKmFsbG9jX2lkLCBwYSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVtb3ZlX2FsbG9jX2RlbnRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3JlbW92ZV9hbGxvY19kZW50cnk6CiYjNDM7CWRlYnVnZnNfcmVtb3ZlKG5ld19hbGxvY19kZW50cnkpOwomIzQzOwomIzQzO2ZyZWVfcGFnZV9hbGxvYzoKJiM0MzsJa21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTsKJiM0MzsKJiM0MztmcmVlX3BhZ2VzOgomIzQzOwlfX2ZyZWVfcGFnZXMocGFnZSwgcmVxLSZndDtvcmRlcik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZnJlZV9hbGxvY19oZWxwZXIodW5zaWduZWQgbG9uZyBhbGxvY19pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlX2FsbG9jICpwYTsKJiM0MzsKJiM0MzsJcGEgPSB4YV9lcmFzZSgmYW1wO2FsbG9jc194YSwgYWxsb2NfaWQpOwomIzQzOwlpZiAoIXBhKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtUaGUgYWxsb2NfaWQgJWx1IHdhcyBub3QgZm91bmQhJiMzNDssIGFsbG9jX2lkKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fZnJlZV9wYWdlcyhwYS0mZ3Q7cGFnZSwgcGEtJmd0O3JlcV9hbGxvYy0mZ3Q7b3JkZXIpOwomIzQzOwlkZWJ1Z2ZzX3JlbW92ZShwYS0mZ3Q7YWxsb2NfZGVudHJ5KTsKJiM0MzsJa21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlcV9wYWdlX2FsbG9jX3dyaXRlKCkgLSBBbGxvY2F0ZXMgdGhlIHBhZ2VzIG9uIHRoZSByZXF1ZXN0ZWQgbm9kZSwgem9uZSwKJiM0MzsgKiBvcmRlciBhbmQgbWlncmF0ZSB0eXBlLiBPbmNlIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCwgYSBmaWxlIGlzIGNyZWF0ZWQKJiM0MzsgKiB0byBmcmVlIHRoZSBhbGxvY2F0aW9uIGxhdGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzc2l6ZV90IHJlcV9wYWdlX2FsbG9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKJiM0MzsJCQkJICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmVxX2FsbG9jICpyZXEgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfYWxsb2NzOwomIzQzOwl1bnNpZ25lZCBsb25nICphbGxvY3NfaWRzOwomIzQzOwlnZnBfdCBmbGFncyA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlyZXQgPSBrc3RydG91bF9mcm9tX3VzZXIodWJ1ZiwgY250LCAxMCwgJmFtcDtucl9wYWdlc19hbGxvY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJYWxsb2NzX2lkcyA9IGttYWxsb2NfYXJyYXkobnJfcGFnZXNfYWxsb2NzLCBzaXplb2YodW5zaWduZWQgbG9uZyksCiYjNDM7CQkJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFhbGxvY3NfaWRzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXNldF96b25lX3RvX2FsbG9jX2Zyb20ocmVxLSZndDt6b25lX2lkeCwgJmFtcDtmbGFncyk7CiYjNDM7CXNldF9taWdyYXRlX3R5cGVfdG9fYWxsb2NfZnJvbShyZXEtJmd0O21pZ3JhdGVfdHlwZSwgJmFtcDtmbGFncyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9wYWdlc19hbGxvY3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBtYWtlX2FsbG9jKHJlcSwgZmxhZ3MsICZhbXA7YWxsb2NfaWQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGZyZWVfYWxsb2NzOwomIzQzOwomIzQzOwkJYWxsb2NzX2lkc1tpXSA9IGFsbG9jX2lkOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtmcmVlKGFsbG9jc19pZHMpOwomIzQzOwomIzQzOwlyZXR1cm4gY250OwomIzQzOwomIzQzO2ZyZWVfYWxsb2NzOgomIzQzOwkvKiBGcmVlIGFsbCB0aGUgcGFnZXMgYW5kIHJlc291cmNlcyBwcmV2aW91c2x5IGFsbG9jYXRlZC4gKi8KJiM0MzsJZm9yIChpbnQgaiA9IDA7IGogJmx0OyBpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHJldDIgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY3NfaWRzW2pdKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQyKQomIzQzOwkJCXByX2VycigmIzM0O1VuYWJsZSB0byBmcmVlIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBmaWxlICVsdSYjMzQ7LAomIzQzOwkJCSAgICAgICBhbGxvY3NfaWRzW2pdKTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShhbGxvY3NfaWRzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVxX3BhZ2VfYWxsb2NfZm9wcyA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5vcGVuID0gc2ltcGxlX29wZW4sCiYjNDM7CS53cml0ZSA9IHJlcV9wYWdlX2FsbG9jX3dyaXRlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZnJlZV9wYWdlX2FsbG9jX3dyaXRlKCkgLSBmcmVlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwYWdlcy4KJiM0MzsgKiBAZmlsZTogRmlsZSB3aGVyZSB0aGUgdXNlciBpcyB3cml0aW5nLgomIzQzOyAqIEB1YnVmOiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGUgdXNlciB3YW50cyB0byBkZWxldGUgYW5kIGhhdmUgdGhlCiYjNDM7ICogICAgICAgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZpbGUgZnJlZWQuCiYjNDM7ICogQGNudDogU2l6ZSBvZiBAdWJ1Zi4KJiM0MzsgKiBAcHBvczogQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdCBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiYjNDM7CQkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAomIzQzOwkJCQkgICAgICBsb2ZmX3QgKnBwb3MpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwl1bnNpZ25lZCBsb25nIGFsbG9jX2lkOwomIzQzOwomIzQzOwlyZXQgPSBrc3RydG91bF9mcm9tX3VzZXIodWJ1ZiwgY250LCAxMCwgJmFtcDthbGxvY19pZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY19pZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gY250OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmcmVlX3BhZ2VfYWxsb2NfZm9wcyA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS53cml0ZSA9IGZyZWVfcGFnZV9hbGxvY193cml0ZSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZSgpIC0gQ3JlYXRlcyB0aGUgZmlsZSAmIzM0O25yX3BhZ2VzX2FsbG9jcyYjMzQ7LgomIzQzOyAqCiYjNDM7ICogVGhlICYjMzQ7bnJfcGFnZXNfYWxsb2NzJiMzNDsgZmlsZSB3aWxsIGJlIHVzZWQgdG8gd3JpdGUgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9ucwomIzQzOyAqIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQuIFdoZW4gdGhlIGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQsIGEgbmV3IGZpbGUgZm9yCiYjNDM7ICogZWFjaCBhbGxvY2F0aW9uIHdpbGwgYmUgY3JlYXRlZCBpbiBAbWlncmF0ZWRpci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUoc3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpciwKJiM0MzsJCQkJCSAgICAgIGludCBuaWQsIGludCB6b25lX2lkeCwKJiM0MzsJCQkJCSAgICAgIGludCBvcmRlciwgaW50IG10eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJlcV9hbGxvYyAqcmVxOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpucl9wYWdlczsKJiM0MzsKJiM0MzsJcmVxID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfYWxsb2NfY2FjaGUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBucl9wYWdlc19hbGxvY3NfaW5mbyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bm9kZV9pZHggPSBuaWQ7CiYjNDM7CXJlcS0mZ3Q7em9uZV9pZHggPSB6b25lX2lkeDsKJiM0MzsJcmVxLSZndDtvcmRlciA9IG9yZGVyOwomIzQzOwlyZXEtJmd0O21pZ3JhdGVfdHlwZSA9IG10eXBlOwomIzQzOwlyZXEtJmd0O3BhcmVudGRpciA9IG1pZ3JhdGVkaXI7CiYjNDM7CiYjNDM7CW5yX3BhZ2VzID0gZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O25yX3BhZ2VzX2FsbG9jcyYjMzQ7LCAwMjAwLCBtaWdyYXRlZGlyLCByZXEsCiYjNDM7CQkJCSAgICAgICAmYW1wO3JlcV9wYWdlX2FsbG9jX2ZvcHMpOwomIzQzOwlpZiAoSVNfRVJSKG5yX3BhZ2VzKSkgewomIzQzOwkJa21lbV9jYWNoZV9mcmVlKHJlcV9hbGxvY19jYWNoZSwgcmVxKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKG5yX3BhZ2VzKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY3JlYXRlX21pZ3JhdGVfdHlwZV9zdWJkaXJzKCkgLSBDcmVhdGVzIGEgZGlyZWN0b3J5IGZvciBlYWNoIG1pZ3JhdGUgdHlwZQomIzQzOyAqIGluc2lkZSB0aGUgb3JkZXIgZGlyZWN0b3J5LiBPbmNlIHRoZSBtaWdyYXRlIHR5cGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIGl0CiYjNDM7ICogY3JlYXRlcyB0aGUgJiMzNDtucl9wYWdlc19hbGxvY3MmIzM0OyBmaWxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICpvcmRlcmRpciwgaW50IG5pZCwKJiM0MzsJCQkJCWludCB6b25lX2lkeCwgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpcjsKJiM0MzsJY2hhciBkaXJuYW1lWzI0XTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZm9yIChpbnQgbXR5cGUgPSAwOyBtdHlwZSAmbHQ7IE1JR1JBVEVfVFlQRVM7IG10eXBlJiM0MzsmIzQzOykgewomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7CQlpZiAobXR5cGUgPT0gTUlHUkFURV9DTUEpIC8qIENNQSBhbGxvY3MgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0Ki8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT04KJiM0MzsJCWlmIChtdHlwZSA9PSBNSUdSQVRFX0lTT0xBVEUpIC8qIGNhbiYjMzk7dCBhbGxvY2F0ZSBmcm9tIGhlcmUgKi8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsjZW5kaWYKJiM0MzsJCWlmICh6b25lX2lkeCA9PSBaT05FX01PVkFCTEUgJmFtcDsmYW1wOyBtdHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksICYjMzQ7bWlncmF0ZS0lcyYjMzQ7LAomIzQzOwkJCSBtaWdyYXRldHlwZV9uYW1lc1ttdHlwZV0pOwomIzQzOwkJbWlncmF0ZWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1lLCBvcmRlcmRpcik7CiYjNDM7CQlpZiAoSVNfRVJSKG1pZ3JhdGVkaXIpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKG1pZ3JhdGVkaXIpOwomIzQzOwomIzQzOwkJcmV0ID0gY3JlYXRlX25yX3BhZ2VzX2FsbG9jc19maWxlKG1pZ3JhdGVkaXIsIG5pZCwgem9uZV9pZHgsCiYjNDM7CQkJCQkJb3JkZXIsIG10eXBlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggcGFnZSBvcmRlciBpbnNpZGUKJiM0MzsgKiB0aGUgem9uZSBkaXJlY3RvcnkuIE9uY2UgdGhhdCB0aGUgcGFnZSBvcmRlciBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcwomIzQzOyAqIGEgZGlyZWN0b3J5IGZvciBlYWNoIG1pZ3JhdGUgdHlwZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfcGFnZV9vcmRlcnNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICp6b25lZGlyLCBpbnQgbmlkLAomIzQzOwkJCQkJaW50IHpvbmVfaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqb3JkZXJkaXI7CiYjNDM7CWNoYXIgZGlybmFtZVsxMl07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZvciAoaW50IG9yZGVyID0gMDsgb3JkZXIgJmx0OyBOUl9QQUdFX09SREVSUzsgb3JkZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksICYjMzQ7b3JkZXItJWQmIzM0Oywgb3JkZXIpOwomIzQzOwkJb3JkZXJkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgem9uZWRpcik7CiYjNDM7CQlpZiAoSVNfRVJSKG9yZGVyZGlyKSkKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUihvcmRlcmRpcik7CiYjNDM7CiYjNDM7CQlyZXQgPSBjcmVhdGVfbWlncmF0ZV90eXBlX3N1YmRpcnMob3JkZXJkaXIsIG5pZCwgem9uZV9pZHgsCiYjNDM7CQkJCQkJb3JkZXIpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjcmVhdGVfem9uZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBwb3B1bGF0ZWQgem9uZSBpbiB0aGUKJiM0MzsgKiBub2RlLiBPbmNlIHRoYXQgdGhlIHpvbmUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIGl0IGNyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yCiYjNDM7ICogZWFjaCBvcmRlciBzdXBwb3J0ZWQuCiYjNDM7ICoKJiM0MzsgKiBOb3RlOiBaT05FX0RFVklDRSBwYWdlcyB3b24mIzM5O3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMgZHJpdmVyLiBUaGUgbWFpbiByZWFzb24KJiM0MzsgKiBpcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBtYW5hZ2VkIGJ5IHRoZSBCdWRkeSBBbGxvY2F0b3Igb3IgQ01BIGFsbG9jYXRvci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfem9uZXNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICpub2RlZGlyLAomIzQzOwkJCQkJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdGEsIGludCBuaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVudHJ5ICp6b25lZGlyOwomIzQzOwlzdHJ1Y3Qgem9uZSAqem9uZTsKJiM0MzsJc3RydWN0IHpvbmUgKm5vZGVfem9uZXMgPSBwZ2RhdGEtJmd0O25vZGVfem9uZXM7CiYjNDM7CWludCB6b25lX2lkeDsKJiM0MzsJY2hhciBkaXJuYW1lWzI0XTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZm9yICh6b25lID0gbm9kZV96b25lcywgem9uZV9pZHggPSAwOyB6b25lIC0gbm9kZV96b25lcyAmbHQ7IE1BWF9OUl9aT05FUzsKJiM0MzsJCQkmIzQzOyYjNDM7em9uZSwgJiM0MzsmIzQzO3pvbmVfaWR4KSB7CiYjNDM7CQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyogWk9ORV9ERVZJQ0UgcGFnZXMgd29uJiMzOTt0IGJlIGFsbG9jYXRlZCB1c2luZyB0aGlzIGRyaXZlci4gKi8KJiM0MzsJCWlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCAmIzM0O3pvbmUtJXMmIzM0Oywgem9uZS0mZ3Q7bmFtZSk7CiYjNDM7CQl6b25lZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG5vZGVkaXIpOwomIzQzOwkJaWYgKElTX0VSUih6b25lZGlyKSkKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUih6b25lZGlyKTsKJiM0MzsKJiM0MzsJCXJldCA9IGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKHpvbmVkaXIsIG5pZCwgem9uZV9pZHgpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjcmVhdGVfbm9kZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBub2RlIHRoYXQgY29udGFpbnMKJiM0MzsgKiBtZW1vcnkuIE9uY2UgdGhhdCB0aGUgbm9kZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IKJiM0MzsgKiBlYWNoIHpvbmUgaW4gdGhlIG5vZGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgY3JlYXRlX25vZGVzX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqbW1kaXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpub2RlZGlyOwomIzQzOwljaGFyIGRpcm5hbWVbMTJdOwomIzQzOwlpbnQgbmlkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHsKJiM0MzsJCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXRhID0gTk9ERV9EQVRBKG5pZCk7CiYjNDM7CiYjNDM7CQlzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksICYjMzQ7bm9kZS0lZCYjMzQ7LCBuaWQpOwomIzQzOwkJbm9kZWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1lLCBtbWRpcik7CiYjNDM7CQlpZiAoSVNfRVJSKG5vZGVkaXIpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKG5vZGVkaXIpOwomIzQzOwomIzQzOwkJcmV0ID0gY3JlYXRlX3pvbmVzX3N1YmRpcnMobm9kZWRpciwgcGdkYXRhLCBuaWQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBwYWdlX2FsbG9jX2hvZ2dlcl9kZWJ1Z2ZzX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmZyZWVfZmlsZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmVxX2FsbG9jX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoCiYjNDM7CQkmIzM0O3JlcV9hbGxvY19jYWNoZSYjMzQ7LCBzaXplb2Yoc3RydWN0IHJlcV9hbGxvYyksIDAsCiYjNDM7CQlTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOwomIzQzOwlpZiAoIXJlcV9hbGxvY19jYWNoZSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7VGhlIHJlcV9hbGxvY19jYWNoZSBjb3VsZG4mIzM5O3QgYmUgY3JlYXRlZFxuJiMzNDspOwomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyb3JfZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWdlX2FsbG9jX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoCiYjNDM7CQkmIzM0O3BhZ2VfYWxsb2NfY2FjaGUmIzM0Oywgc2l6ZW9mKHN0cnVjdCBwYWdlX2FsbG9jKSwgMCwKJiM0MzsJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CiYjNDM7CWlmICghcGFnZV9hbGxvY19jYWNoZSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7VGhlIHBhZ2VfYWxsb2NfY2FjaGUgY291bGRuJiMzOTt0IGJlIGNyZWF0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGNsZWFuX3JlcV9hbGxvY19jYWNoZTsKJiM0MzsJfQomIzQzOwomIzQzOwltbWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigmIzM0O21tJiMzNDssIE5VTEwpOwomIzQzOwlpZiAoSVNfRVJSKG1tZGlyKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7VW5hYmxlIHRvIGNyZWF0ZSBtbSBkaXJlY3RvcnlcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IFBUUl9FUlIobW1kaXIpOwomIzQzOwkJZ290byBjbGVhbl9wYWdlX2FsbG9jX2NhY2hlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGNyZWF0ZV9ub2Rlc19zdWJkaXJzKG1tZGlyKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2xlYW5fZGlyOwomIzQzOwomIzQzOwlmcmVlX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7ZnJlZSYjMzQ7LCAwMjAwLCBtbWRpciwgTlVMTCwKJiM0MzsJCQkJCSZhbXA7ZnJlZV9wYWdlX2FsbG9jX2ZvcHMpOwomIzQzOwlpZiAoSVNfRVJSKGZyZWVfZmlsZSkpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIoZnJlZV9maWxlKTsKJiM0MzsJCWdvdG8gY2xlYW5fZGlyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFuX2RpcjoKJiM0MzsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG1tZGlyKTsKJiM0MzsKJiM0MztjbGVhbl9wYWdlX2FsbG9jX2NhY2hlOgomIzQzOwlrbWVtX2NhY2hlX2Rlc3Ryb3kocGFnZV9hbGxvY19jYWNoZSk7CiYjNDM7CiYjNDM7Y2xlYW5fcmVxX2FsbG9jX2NhY2hlOgomIzQzOwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmVxX2FsbG9jX2NhY2hlKTsKJiM0MzsKJiM0MztlcnJvcl9leGl0OgomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2V4aXQgcGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZV9hbGxvYyAqcGE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaWR4OwomIzQzOwomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO2FsbG9jc194YSwgaWR4LCBwYSkKJiM0MzsJCWZyZWVfYWxsb2NfaGVscGVyKGlkeCk7CiYjNDM7CiYjNDM7CWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShtbWRpcik7CiYjNDM7CWttZW1fY2FjaGVfZGVzdHJveShyZXFfYWxsb2NfY2FjaGUpOwomIzQzOwlrbWVtX2NhY2hlX2Rlc3Ryb3kocGFnZV9hbGxvY19jYWNoZSk7CiYjNDM7fQomIzQzOwomIzQzO21vZHVsZV9pbml0KHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfaW5pdCk7CiYjNDM7bW9kdWxlX2V4aXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19leGl0KTsKJiM0MzsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7SnVhbiBZZXNjYXMmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW9kdWxlIHRvIGFsbG9jIHBhZ2VzIHRvIGdlbmVyYXRlIG1lbW9yeSBwcmVzc3VyZSYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU2MgoJCQkJCQkJb3V0cHV0OiAxMDgKCQkJCQkJCXRob3VnaHRzOiAxMDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IE5ldyBEZWJ1Z2ZzIFBhZ2UgQWxsb2NhdG9yIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSwgYG1tL3BhZ2VfYWxsb2NfaG9nZ2VyLmNgLCB3aGljaCBzZWVtcyBkZXNpZ25lZCBmb3IgYWxsb2NhdGluZyBwYWdlcyB3aXRoIHNwZWNpZmljIHBhcmFtZXRlcnM6IG5vZGUsIHpvbmUsIG1pZ3JhdGUgdHlwZSwgYW5kIG9yZGVyLiBUaGUgbmV3IGNvbmZpZyBpcyBgUEFHRUFMTE9DX0hPR0dFUmAsIGFuZCBpdCBkZXBlbmRzIG9uIGBERUJVR19GU2AuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZnV6emFibGU/JiMzNDsgRGVidWdmcyBpbnRlcmZhY2VzIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcgdGFyZ2V0cywgZXNwZWNpYWxseSB3aGVuIHRoZXkgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMgb25lIGxvb2tzIHByb21pc2luZyBiZWNhdXNlIGl0IGRpcmVjdGx5IGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gVGhlIGtleSBpcyB0byBzZWUgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gSXQmIzM5O3MgYSBzb2Z0d2FyZSBpbnRlcmZhY2Ugc28gbm8gcGh5c2ljYWwgaGFyZHdhcmUgaXMgbmVlZGVkLCBhbmQgZGVidWdmcyBpcyBhdmFpbGFibGUgaW4gUUVNVSwgc28gdGhhdCYjMzk7cyBnb29kLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGFkZGluZyBhIG5ldyBtb2R1bGUgYW5kIGZlYXR1cmUgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBkZWJ1Z2ZzLgoKVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHVzIHRvIGFsbG9jYXRlIG1lbW9yeS4gRnV6emluZyBjb3VsZCByZXZlYWwgYnVncyBpbiB0aGlzICYjMzQ7aG9nZ2VyJiMzNDsgbW9kdWxlIGl0c2VsZiwgb3IgaXQgbWlnaHQgdHJpZ2dlciBpbnRlcmVzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgdW5kZXIgcHJlc3N1cmUuCgpMb29raW5nIGF0IHRoZSBjb2RlLCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJiMzOTt2ZSBpZGVudGlmaWVkOiBgcGFnZV9hbGxvY19yZWFkYCwgYG1ha2VfYWxsb2NgLCBgZnJlZV9hbGxvY19oZWxwZXJgLCBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgLCBgZnJlZV9wYWdlX2FsbG9jX3dyaXRlYCwgYW5kIGEgYnVuY2ggb2YgZGlyZWN0b3J5IGNyZWF0aW9uIGZ1bmN0aW9ucy4gVGhlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyBhcHBlYXIgdG8gYmUgdGhlIGZpbGUgb3BlcmF0aW9uczogc3BlY2lmaWNhbGx5LCBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgLCBgZnJlZV9wYWdlX2FsbG9jX3dyaXRlYCwgYW5kIGBwYWdlX2FsbG9jX3JlYWRgLgoKVGhlIGNvbmZpZyBvcHRpb25zIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBQQUdFQUxMT0NfSE9HR0VSYCBhbmQgaXRzIGRlcGVuZGVuY3kgb24gYERFQlVHX0ZTYC4gTGV0JiMzOTtzIHZlcmlmeSB0aG9zZSBmdW5jdGlvbnMgYWdhaW4uIFllcCwgYHJlcV9wYWdlX2FsbG9jX3dyaXRlYCwgYGZyZWVfcGFnZV9hbGxvY193cml0ZWAsIGFuZCBgcGFnZV9hbGxvY19yZWFkYCBhcmUgZGVmaW5pdGVseSB0aGUgdGFyZ2V0cy4gSSYjMzk7bSByZWFkeSB0byBkb2N1bWVudCBteSBmaW5kaW5ncy4KCkJhc2VkIG9uIHRoZSBpbnZlc3RpZ2F0aW9uLCBJJiMzOTttIHNldHRpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgdG8gYHRydWVgLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgLCBgZnJlZV9wYWdlX2FsbG9jX3dyaXRlYCwgYW5kIGBwYWdlX2FsbG9jX3JlYWRgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYFBBR0VBTExPQ19IT0dHRVJgIGFuZCBgREVCVUdfRlNgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCBhbGxvY2F0ZXMgcGFnZXMsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlIGFuZCBmaW5kIGJ1Z3MgaW4gdGhlIGhvZ2dlciBpdHNlbGYgb3IgdHJpZ2dlciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuCgpJJiMzOTtsbCBkb3VibGUgY2hlY2sgdGhhdCBgREVCVUdfRlNgIGlzIGVpdGhlciBlbmFibGVkIGJ5IGRlZmF1bHQgb3Igd2UgbmVlZCB0byBlbmFibGUgaXQsIEkmIzM5O2xsIGluY2x1ZGUgaXQgdG8gYmUgc2FmZS4gSXQgZGVwZW5kcyBvbiB0aGUgS2NvbmZpZyBvcHRpb25zLiBZZXMsIGFuZCBpdCYjMzk7cyBzYWZlIHRvIGluY2x1ZGUuIEkgY2hlY2tlZCBgbW0vS2NvbmZpZy5kZWJ1Z2AgYW5kIGNvbmZpcm1lZCB0aGF0IGBQQUdFQUxMT0NfSE9HR0VSYCBkZXBlbmRzIG9uIGBERUJVR19GU2AuCgpJIHNlZSB0aGF0IGBtYWtlX2FsbG9jYCBhbmQgYGZyZWVfYWxsb2NfaGVscGVyYCBhcmUgY2FsbGVkIGZyb20gdGhlIHByaW1hcnkgd3JpdGUgZnVuY3Rpb25zLCBidXQgdGhhdCYjMzk7cyBmaW5lLiBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgIGFuZCBgZnJlZV9wYWdlX2FsbG9jX3dyaXRlYCBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLCBidXQgYHBhZ2VfYWxsb2NfcmVhZGAgaXMgYWxzbyBhbiBlbnRyeSBwb2ludCwgZXZlbiBpZiBpdCBqdXN0IHJldHVybnMgMC4KCldhaXQsIGxvb2tpbmcgY2xvc2VyLCBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgIGlzIG1hcmtlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywgYnV0IGluIHRoaXMgY2FzZSwgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYmVjYXVzZSBpdCYjMzk7cyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0LgpgYGBjCnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlcV9wYWdlX2FsbG9jX2ZvcHMgPSB7Cgkub3duZXIgPSBUSElTX01PRFVMRSwKCS5vcGVuID0gc2ltcGxlX29wZW4sCgkud3JpdGUgPSByZXFfcGFnZV9hbGxvY193cml0ZSwKfTsKYGBgClNvLCBpdCYjMzk7cyBmaW5lIHRvIGxpc3QgaXQuIEl0IHdvbiYjMzk7dCBiZSBpbmxpbmVkLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBJdCBsb29rcyBsaWtlIGBQQUdFQUxMT0NfSE9HR0VSYCBpcyB0aGUgb25seSBuZXcgb25lLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIHNldC1yZXN1bHRzIGFuZCBkb2N1bWVudCB0aGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFQUxMT0NfSE9HR0VSJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVxX3BhZ2VfYWxsb2Nfd3JpdGUmIzM0OywKICAgICYjMzQ7ZnJlZV9wYWdlX2FsbG9jX3dyaXRlJiMzNDssCiAgICAmIzM0O3BhZ2VfYWxsb2NfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRlYnVnZnMgaW50ZXJmYWNlIGZvciBhbGxvY2F0aW5nIHBhZ2VzIHRvIGdlbmVyYXRlIG1lbW9yeSBwcmVzc3VyZS4gRnV6emluZyB0aGlzIGludGVyZmFjZSBjYW4gaGVscCB1bmNvdmVyIGJ1Z3MgaW4gdGhlIGhvZ2dlciBpdHNlbGYgb3IgdHJpZ2dlciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VBTExPQ19IT0dHRVImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFfcGFnZV9hbGxvY193cml0ZSYjMzQ7LAogICAgJiMzNDtmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGFsbG9jYXRpbmcgcGFnZXMgdG8gZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlLiBGdXp6aW5nIHRoaXMgaW50ZXJmYWNlIGNhbiBoZWxwIHVuY292ZXIgYnVncyBpbiB0aGUgaG9nZ2VyIGl0c2VsZiBvciB0cmlnZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjA0OjU1LjYzNjA0NTI5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDA4NTc0MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VBTExPQ19IT0dHRVJcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxX3BhZ2VfYWxsb2Nfd3JpdGVcIixcbiAgICBcImZyZWVfcGFnZV9hbGxvY193cml0ZVwiLFxuICAgIFwicGFnZV9hbGxvY19yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgYWxsb2NhdGluZyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUuIEZ1enppbmcgdGhpcyBpbnRlcmZhY2UgY2FuIGhlbHAgdW5jb3ZlciBidWdzIGluIHRoZSBob2dnZXIgaXRzZWxmIG9yIHRyaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjowNDo1NS42MzYwNTEyNjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUyMzQxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNDNhMzUyNjYzYWVkZDQyMTUzYWU0NGUxOTczOGQyYzc4YzVmNDdjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMDI6MDQ6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWdcXG5pbmRleCA3NjM4ZDc1YjI3ZGI4Li5iYWQ4YTYwNjE1MmMzIDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWcuZGVidWdcXG4rKysgYi9tbS9LY29uZmlnLmRlYnVnXFxuQEAgLTMwOSwzICszMDksMTUgQEAgY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbiBcXHQgIG92ZXJoZWFkIGluIHRoZSBwYWdlIGZhdWx0IHBhdGguXFxuIFxcbiBcXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cXG4rXFxuK2NvbmZpZyBQQUdFQUxMT0NfSE9HR0VSXFxuK1xcdHRyaXN0YXRlIFxcXCJBbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZXMgYW5kIG9yZGVyc1xcXCJcXG4rXFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbitcXHRoZWxwXFxuK1xcdCAgU2F5IFkgdG8gYWxsb2MgcGFnZXMgZnJvbSBkaWZmZXJlbnQgbm9kZXMsIHpvbmVzLCBtaWdyYXRlIHR5cGUgYW5kXFxuK1xcdCAgb3JkZXJzIHVzaW5nIHRoZSBkZWJ1ZyBmcyBmaWxlc3lzdGVtLiBUaGlzIGhlbHBzIHRvIGdlbmVyYXRlIG1lbW9yeVxcbitcXHQgIHByZXNzdXJlIGVhc2lseS4gVGhpcyBpcyB1c2VmdWwgdG8gZGVidWcgbWVtb3J5IHJlY2xhaW1zIGlzc3VlcyxcXG4rXFx0ICBPT00gdHJpZ2dlcnMsIHBhZ2UgbWlncmF0aW9uIGlzc3VlcywgZXRjLlxcbitcXG4rXFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuK1xcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXFxuaW5kZXggMmQwNTcwYTE2ZTViZS4uYjQ4ZjJhYzZlZTgwOCAxMDA2NDRcXG4tLS0gYS9tbS9NYWtlZmlsZVxcbisrKyBiL21tL01ha2VmaWxlXFxuQEAgLTEzMyw2ICsxMzMsNyBAQCBvYmotJChDT05GSUdfSURMRV9QQUdFX1RSQUNLSU5HKSArPSBwYWdlX2lkbGUub1xcbiBvYmotJChDT05GSUdfREVCVUdfUEFHRUFMTE9DKSArPSBkZWJ1Z19wYWdlX2FsbG9jLm9cXG4gb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxuIG9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxuK29iai0kKENPTkZJR19QQUdFQUxMT0NfSE9HR0VSKSArPSBwYWdlX2FsbG9jX2hvZ2dlci5vXFxuIG9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcbiBvYmotJChDT05GSUdfUEVSQ1BVX1NUQVRTKSArPSBwZXJjcHUtc3RhdHMub1xcbiBvYmotJChDT05GSUdfWk9ORV9ERVZJQ0UpICs9IG1lbXJlbWFwLm9cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvY19ob2dnZXIuYyBiL21tL3BhZ2VfYWxsb2NfaG9nZ2VyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyYzA1MDVhNmY1YTdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbW0vcGFnZV9hbGxvY19ob2dnZXIuY1xcbkBAIC0wLDAgKzEsNjEwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFBhZ2UgYWxsb2NhdG9yIERlYnVnRlMgSW50ZXJmYWNlXFxuKyAqIEF1dGhvcjogSnVhbiBZZXNjYXMgXFx1MDAzY2p5ZXNjYXNAZ29vZ2xlLmNvbVxcdTAwM2VcXG4rICpcXG4rICogVGhpcyBtb2R1bGUgYWxsb3dzIHRvIG1ha2UgcGFnZSBhbGxvY3MgcGVyIG5vZGUsIHpvbmUsIG1pZ3JhdGUgdHlwZVxcbisgKiBhbmQgb3JkZXIgdXNpbmcgdGhlIERlYnVnRlMgZmlsZXN5c3RlbS5cXG4rICpcXG4rICogV2hlbiB0aGlzIG1vZHVsZSBpcyBpbnN0YWxsZWQgYW5kIHRoZSBkZWJ1Z2ZzIGlzIG1vdW50ZWQsIHRoZSBcXFwibW1cXFwiIGRpcmVjdG9yeVxcbisgKiB3aWxsIGJlIGNyZWF0ZWQgaW4gXFx1MDAzY2RlYnVnZnMgbW91bnQgcG9pbnRcXHUwMDNlL21tXFxcIiBkaXJlY3RvcnkuIFVuZGVyIHRoaXMgZGlyZWN0b3J5LFxcbisgKiB0aGVyZSB3aWxsIGJlIHN1YmRpcnMgdG8gc2VsZWN0IHRoZSBub2Rlcywgem9uZXMsIG9yZGVycyBhbmQgbWlncmF0ZSB0eXBlLlxcbisgKlxcbisgKiBGb3IgZXhhbXBsZTpcXG4rICpcXG4rICogICAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9cXG4rICogICAgICB8LS0gZnJlZVxcbisgKiAgICAgIGAtLSBub2RlLTBcXG4rICogICAgICAgICB8LS0gem9uZS1ETUFcXG4rICogICAgICAgICB8ICAgfC0tIG9yZGVyLTBcXG4rICogICAgICAgICB8ICAgfCAgIHwtLSBtaWdyYXRlLUhpZ2hBdG9taWNcXG4rICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgfCAgIHwgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlXFxuKyAqICAgICAgICAgfCAgIHwgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xcbisgKiAgICAgICAgIHwgICB8ICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcXG4rICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgfCAgIHwgICBgLS0gbWlncmF0ZS1Vbm1vdmFibGVcXG4rICogICAgICAgICB8ICAgfCAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgfCAgIHwtLSAuLi5cXG4rICogICAgICAgICB8ICAgfFxcbisgKiAgICAgICAgIHwgICBgLS0gb3JkZXItOVxcbisgKiAgICAgICAgIHwgICAgICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xcbisgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcXG4rICogICAgICAgICB8ICAgICAgIHwtLSBtaWdyYXRlLU1vdmFibGVcXG4rICogICAgICAgICB8ICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgfCAgICAgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZVxcbisgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcXG4rICogICAgICAgICB8ICAgICAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxcbisgKiAgICAgICAgIHwgICAgICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3NcXG4rICogICAgICAgICBgLS0gem9uZS1Ob3JtYWxcXG4rICogICAgICAgICAgICAgfC0tIG9yZGVyLTBcXG4rICogICAgICAgICAgICAgfCAgIHwtLSBtaWdyYXRlLUhpZ2hBdG9taWNcXG4rICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgIHwgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlXFxuKyAqICAgICAgICAgICAgIHwgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xcbisgKiAgICAgICAgICAgICB8ICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcXG4rICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgIHwgICBgLS0gbWlncmF0ZS1Vbm1vdmFibGVcXG4rICogICAgICAgICAgICAgfCAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgIHwtLSAuLi4uXFxuKyAqICAgICAgICAgICAgIHxcXG4rICogICAgICAgICAgICAgYC0tIG9yZGVyLTlcXG4rICogICAgICAgICAgICAgICAgIHwtLSBtaWdyYXRlLUhpZ2hBdG9taWNcXG4rICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgICAgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlXFxuKyAqICAgICAgICAgICAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xcbisgKiAgICAgICAgICAgICAgICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcXG4rICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgICAgICBgLS0gbWlncmF0ZS1Vbm1vdmFibGVcXG4rICogICAgICAgICAgICAgICAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqXFxuKyAqIFVzYWdlOlxcbisgKlxcbisgKiAxLiBUbyB0cmlnZ2VyIHRoZSBhbGxvY2F0aW9uLCBuYXZpZ2F0ZSB0byB0aGUgZGVidWdmcyBwYXRoIGNvcnJlc3BvbmRpbmdcXG4rICogICAgdG8geW91ciB0YXJnZXQgbm9kZSwgbWVtb3J5IHpvbmUsIGFsbG9jYXRpb24gb3JkZXIsIGFuZCBtaWdyYXRpb24gdHlwZSxcXG4rICogICAgdGhlbiB3cml0ZSB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb24gY291bnQgdG8gbnJfcGFnZXNfYWxsb2NzLlxcbisgKlxcbisgKiAgICBGb3IgZXhhbXBsZSwgdG8gbWFrZSAzIGFsbG9jcyBvZiBvcmRlciA5LCBNaWdyYXRlIFR5cGUgTW92YWJsZSxcXG4rICogICAgWm9uZSBOb3JtYWwgYW5kIE5vZGUgMCwgcnVuOlxcbisgKlxcbisgKiAgICAkIGVjaG8gMyBcXHUwMDNlIC9zeXMva2VybmVsL2RlYnVnL21tL25vZGUtMC96b25lLU5vcm1hbC9vcmRlci05L21pZ3JhdGUtTW92YWJsZS9ucl9wYWdlc19hbGxvY3NcXG4rICpcXG4rICogMi4gRm9yIGVhY2ggYWxsb2NhdGlvbiBjcmVhdGVkLCBhIGNvcnJlc3BvbmRpbmcgZmlsZSBuYW1lZCBzZXF1ZW50aWFsbHlcXG4rICogICAgKDEsIDIsIG4pIHdpbGwgYXBwZWFyIGluIHRoYXQgZGlyZWN0b3J5LlxcbisgKlxcbisgKiAgICAkIGxzIC9zeXMva2VybmVsL2RlYnVnL21tL25vZGUtMC96b25lLU5vcm1hbC9vcmRlci05L21pZ3JhdGUtTW92YWJsZS9cXG4rICogICAgMSAgIDIgICAzICBucl9wYWdlc19hbGxvY3NcXG4rICpcXG4rICogMy4gVG8gZnJlZSB0aGUgYWxsb2NhdGlvbiwgd3JpdGUgdGhlIGFsbG9jYXRpb24gZmlsZSBuYW1lIGluIC9zeXMva2VybmVsL2RlYnVnL21tL2ZyZWUuXFxuKyAqICAgIEZvciBleGFtcGxlLCB0byByZWxlYXNlIHRoZSAybmQgYWxsb2NhdGlvbiBydW46XFxuKyAqXFxuKyAqICAgICQgZWNobyAyIFxcdTAwM2UgL3N5cy9rZXJuZWwvZGVidWcvbW0vZnJlZVxcbisgKi9cXG4rXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG9taWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcF90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXpvbmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9kZW1hc2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByaW50ay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuK1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbW1kaXI7XFxuK1xcbisvKipcXG4rICogYXRvbWljX2xvbmdfdCBhbGxvY3NfZmlsZV9zZXEgLSBSZXByZXNlbnRzIHRoZSBuYW1pbmcgc2VxdWVuY2UgdXNlZCBmb3JcXG4rICogYWxsb2NhdGlvbiBmaWxlcy5cXG4rICovXFxuK3N0YXRpYyBhdG9taWNfbG9uZ190IGFsbG9jc19maWxlX3NlcSA9IEFUT01JQ19JTklUKDApO1xcbitcXG4rLyoqXFxuKyAqIGFsbG9jc194YSAtIFJlcHJlc2VudCB0aGUgeGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBhbGxvY2F0aW9ucyBwZXJmb3JtXFxuKyAqIGJ5IHRoaXMgZHJpdmVyLlxcbisgKi9cXG4rc3RhdGljIERFRklORV9YQVJSQVkoYWxsb2NzX3hhKTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcmVxX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb25cXG4rICogQG5vZGVfaWR4OiBUaGUgTm9kZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLlxcbisgKiBAem9uZV9pZHg6IFRoZSBab25lIGluZGV4IHRvIGFsbG9jYXRlIGZyb20uXFxuKyAqIEBvcmRlcjogVGhlIE9yZGVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlLlxcbisgKiBAbWlncmF0ZV90eXBlOiBUaGUgTWlncmF0ZSB0eXBlIHRvIGFsbG9jYXRlIGZyb20uXFxuKyAqIEBwYXJlbnRkaXI6IFRoZSBwYXJlbnQgZGlyIHdoZXJlIHRoZSBmaWxlIHJlcHJlc2VudGluZyB0aGUgYWxsb2Mgd2FzIGNyZWF0ZWQuXFxuKyAqL1xcbitzdHJ1Y3QgcmVxX2FsbG9jIHtcXG4rXFx0aW50IG5vZGVfaWR4O1xcbitcXHRpbnQgem9uZV9pZHg7XFxuK1xcdGludCBvcmRlcjtcXG4rXFx0aW50IG1pZ3JhdGVfdHlwZTtcXG4rXFx0c3RydWN0IGRlbnRyeSAqcGFyZW50ZGlyO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwYWdlX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcGFnZSBhbGxvY2F0aW9uLlxcbisgKiBAcGFnZTogVGhlIHBvaW50ZXIgdG8gdGhlIHBhZ2UocykgYWxsb2NhdGVkLlxcbisgKiBAcmVxX2FsbG9jOiBUaGUgZGV0YWlscyBvZiB0aGUgYWxsb2NhdGlvbi5cXG4rICogQGFsbG9jX2RlbnRyeTogVGhlIHBvaW50ZXIgdG8gdGhlIGZpbGUgdGhhdCByZXByZXNlbnRzIHRoZSBhbGxvY2F0aW9uLlxcbisgKi9cXG4rc3RydWN0IHBhZ2VfYWxsb2Mge1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0c3RydWN0IHJlcV9hbGxvYyAqcmVxX2FsbG9jO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICphbGxvY19kZW50cnk7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJlcV9hbGxvY19jYWNoZTtcXG4rc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwYWdlX2FsbG9jX2NhY2hlO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX3RvX2FsbG9jX2Zyb20oaW50IHpvbmVfaWR4LCBnZnBfdCAqZmxhZ3NfcHRyKVxcbit7XFxuK1xcdHN3aXRjaCAoem9uZV9pZHgpIHtcXG4rI2lmZGVmIENPTkZJR19aT05FX0RNQVxcbitcXHRjYXNlIFpPTkVfRE1BOlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0RNQTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX1pPTkVfRE1BMzJcXG4rXFx0Y2FzZSBaT05FX0RNQTMyOlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0RNQTMyO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfSElHSE1FTVxcbitcXHRjYXNlIFpPTkVfSElHSE1FTTpcXG4rXFx0XFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdITUVNO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGNhc2UgWk9ORV9NT1ZBQkxFOlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX01PVkFCTEU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFpPTkVfTk9STUFMOlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbWlncmF0ZV90eXBlX3RvX2FsbG9jX2Zyb20oaW50IG1pZ3JhdGVfdHlwZSwgZ2ZwX3QgKmZsYWdzX3B0cilcXG4re1xcbitcXHRzd2l0Y2ggKG1pZ3JhdGVfdHlwZSkge1xcbitcXHRjYXNlIE1JR1JBVEVfVU5NT1ZBQkxFOlxcbitcXHRcXHQqZmxhZ3NfcHRyIFxcdTAwMjY9IH4oX19HRlBfUkVDTEFJTUFCTEUgfCBfX0dGUF9NT1ZBQkxFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUlHUkFURV9SRUNMQUlNQUJMRTpcXG4rXFx0XFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9SRUNMQUlNQUJMRTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUlHUkFURV9ISUdIQVRPTUlDOlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0hJR0g7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1JR1JBVEVfTU9WQUJMRTogZGVmYXVsdDpcXG4rXFx0XFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9NT1ZBQkxFO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBwYWdlX2FsbG9jX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKVxcbit7XFxuK1xcdC8qICBXaGljaCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJpbnQgYWJvdXQgdGhlIHBhZ2Ugb3IgYWxsb2NhdGlvbj8gKi9cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2VfYWxsb2NfZm9wcyA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5vcGVuID0gc2ltcGxlX29wZW4sXFxuK1xcdC5yZWFkID0gcGFnZV9hbGxvY19yZWFkLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBtYWtlX2FsbG9jKHN0cnVjdCByZXFfYWxsb2MgKnJlcSxcXG4rXFx0XFx0XFx0ICAgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBsb25nICphbGxvY19pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZV9hbGxvYyAqcGE7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHRjaGFyIG5ld19hbGxvY19uYW1lWzIwXTtcXG4rXFx0c3RydWN0IGRlbnRyeSAqbmV3X2FsbG9jX2RlbnRyeTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlX25vcHJvZihyZXEtXFx1MDAzZW5vZGVfaWR4LCBmbGFncywgcmVxLVxcdTAwM2VvcmRlcik7XFxuK1xcdGlmIChwYWdlKSB7XFxuK1xcdFxcdHBhID0ga21lbV9jYWNoZV9hbGxvYyhwYWdlX2FsbG9jX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFwYSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIGZyZWVfcGFnZXM7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdCphbGxvY19pZCA9IGF0b21pY19sb25nX2luY19yZXR1cm4oXFx1MDAyNmFsbG9jc19maWxlX3NlcSk7XFxuK1xcdFxcdHNucHJpbnRmKG5ld19hbGxvY19uYW1lLCBzaXplb2YobmV3X2FsbG9jX25hbWUpLCBcXFwiJWx1XFxcIixcXG4rXFx0XFx0XFx0ICphbGxvY19pZCk7XFxuK1xcbitcXHRcXHRuZXdfYWxsb2NfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShcXG4rXFx0XFx0XFx0bmV3X2FsbG9jX25hbWUsIDA0MDAsIHJlcS1cXHUwMDNlcGFyZW50ZGlyLFxcbitcXHRcXHRcXHRwYSwgXFx1MDAyNnBhZ2VfYWxsb2NfZm9wcyk7XFxuK1xcdFxcdGlmIChJU19FUlIobmV3X2FsbG9jX2RlbnRyeSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihuZXdfYWxsb2NfZGVudHJ5KTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX3BhZ2VfYWxsb2M7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBhLVxcdTAwM2VyZXFfYWxsb2MgPSByZXE7XFxuK1xcdFxcdHBhLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4rXFx0XFx0cGEtXFx1MDAzZWFsbG9jX2RlbnRyeSA9IG5ld19hbGxvY19kZW50cnk7XFxuK1xcbitcXHRcXHRyZXQgPSB4YV9pbnNlcnQoXFx1MDAyNmFsbG9jc194YSwgKmFsbG9jX2lkLCBwYSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVtb3ZlX2FsbG9jX2RlbnRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rcmVtb3ZlX2FsbG9jX2RlbnRyeTpcXG4rXFx0ZGVidWdmc19yZW1vdmUobmV3X2FsbG9jX2RlbnRyeSk7XFxuK1xcbitmcmVlX3BhZ2VfYWxsb2M6XFxuK1xcdGttZW1fY2FjaGVfZnJlZShwYWdlX2FsbG9jX2NhY2hlLCBwYSk7XFxuK1xcbitmcmVlX3BhZ2VzOlxcbitcXHRfX2ZyZWVfcGFnZXMocGFnZSwgcmVxLVxcdTAwM2VvcmRlcik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGZyZWVfYWxsb2NfaGVscGVyKHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xcbitcXG4rXFx0cGEgPSB4YV9lcmFzZShcXHUwMDI2YWxsb2NzX3hhLCBhbGxvY19pZCk7XFxuK1xcdGlmICghcGEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJUaGUgYWxsb2NfaWQgJWx1IHdhcyBub3QgZm91bmQhXFxcIiwgYWxsb2NfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0X19mcmVlX3BhZ2VzKHBhLVxcdTAwM2VwYWdlLCBwYS1cXHUwMDNlcmVxX2FsbG9jLVxcdTAwM2VvcmRlcik7XFxuK1xcdGRlYnVnZnNfcmVtb3ZlKHBhLVxcdTAwM2VhbGxvY19kZW50cnkpO1xcbitcXHRrbWVtX2NhY2hlX2ZyZWUocGFnZV9hbGxvY19jYWNoZSwgcGEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByZXFfcGFnZV9hbGxvY193cml0ZSgpIC0gQWxsb2NhdGVzIHRoZSBwYWdlcyBvbiB0aGUgcmVxdWVzdGVkIG5vZGUsIHpvbmUsXFxuKyAqIG9yZGVyIGFuZCBtaWdyYXRlIHR5cGUuIE9uY2UgdGhlIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkLCBhIGZpbGUgaXMgY3JlYXRlZFxcbisgKiB0byBmcmVlIHRoZSBhbGxvY2F0aW9uIGxhdGVyLlxcbisgKi9cXG4rc3RhdGljIHNzaXplX3QgcmVxX3BhZ2VfYWxsb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHRzdHJ1Y3QgcmVxX2FsbG9jICpyZXEgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfYWxsb2NzO1xcbitcXHR1bnNpZ25lZCBsb25nICphbGxvY3NfaWRzO1xcbitcXHRnZnBfdCBmbGFncyA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNudCwgMTAsIFxcdTAwMjZucl9wYWdlc19hbGxvY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0YWxsb2NzX2lkcyA9IGttYWxsb2NfYXJyYXkobnJfcGFnZXNfYWxsb2NzLCBzaXplb2YodW5zaWduZWQgbG9uZyksXFxuK1xcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWFsbG9jc19pZHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c2V0X3pvbmVfdG9fYWxsb2NfZnJvbShyZXEtXFx1MDAzZXpvbmVfaWR4LCBcXHUwMDI2ZmxhZ3MpO1xcbitcXHRzZXRfbWlncmF0ZV90eXBlX3RvX2FsbG9jX2Zyb20ocmVxLVxcdTAwM2VtaWdyYXRlX3R5cGUsIFxcdTAwMjZmbGFncyk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXNfYWxsb2NzOyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gbWFrZV9hbGxvYyhyZXEsIGZsYWdzLCBcXHUwMDI2YWxsb2NfaWQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfYWxsb2NzO1xcbitcXG4rXFx0XFx0YWxsb2NzX2lkc1tpXSA9IGFsbG9jX2lkO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShhbGxvY3NfaWRzKTtcXG4rXFxuK1xcdHJldHVybiBjbnQ7XFxuK1xcbitmcmVlX2FsbG9jczpcXG4rXFx0LyogRnJlZSBhbGwgdGhlIHBhZ2VzIGFuZCByZXNvdXJjZXMgcHJldmlvdXNseSBhbGxvY2F0ZWQuICovXFxuK1xcdGZvciAoaW50IGogPSAwOyBqIFxcdTAwM2MgaTsgaisrKSB7XFxuK1xcdFxcdGludCByZXQyID0gZnJlZV9hbGxvY19oZWxwZXIoYWxsb2NzX2lkc1tqXSk7XFxuK1xcbitcXHRcXHRpZiAocmV0MilcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJVbmFibGUgdG8gZnJlZSBwYWdlcyBhc3NvY2lhdGVkIHdpdGggZmlsZSAlbHVcXFwiLFxcbitcXHRcXHRcXHQgICAgICAgYWxsb2NzX2lkc1tqXSk7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGFsbG9jc19pZHMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVxX3BhZ2VfYWxsb2NfZm9wcyA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5vcGVuID0gc2ltcGxlX29wZW4sXFxuK1xcdC53cml0ZSA9IHJlcV9wYWdlX2FsbG9jX3dyaXRlLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIGZyZWVfcGFnZV9hbGxvY193cml0ZSgpIC0gZnJlZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgcGFnZXMuXFxuKyAqIEBmaWxlOiBGaWxlIHdoZXJlIHRoZSB1c2VyIGlzIHdyaXRpbmcuXFxuKyAqIEB1YnVmOiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGUgdXNlciB3YW50cyB0byBkZWxldGUgYW5kIGhhdmUgdGhlXFxuKyAqICAgICAgIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhhdCBmaWxlIGZyZWVkLlxcbisgKiBAY250OiBTaXplIG9mIEB1YnVmLlxcbisgKiBAcHBvczogQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZS5cXG4rICovXFxuK3N0YXRpYyBzc2l6ZV90IGZyZWVfcGFnZV9hbGxvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHR1bnNpZ25lZCBsb25nIGFsbG9jX2lkO1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNudCwgMTAsIFxcdTAwMjZhbGxvY19pZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY19pZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gY250O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmcmVlX3BhZ2VfYWxsb2NfZm9wcyA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC53cml0ZSA9IGZyZWVfcGFnZV9hbGxvY193cml0ZSxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUoKSAtIENyZWF0ZXMgdGhlIGZpbGUgXFxcIm5yX3BhZ2VzX2FsbG9jc1xcXCIuXFxuKyAqXFxuKyAqIFRoZSBcXFwibnJfcGFnZXNfYWxsb2NzXFxcIiBmaWxlIHdpbGwgYmUgdXNlZCB0byB3cml0ZSB0aGUgbnVtYmVyIG9mIGFsbG9jYXRpb25zXFxuKyAqIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQuIFdoZW4gdGhlIGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQsIGEgbmV3IGZpbGUgZm9yXFxuKyAqIGVhY2ggYWxsb2NhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgaW4gQG1pZ3JhdGVkaXIuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUoc3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgaW50IHpvbmVfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgb3JkZXIsIGludCBtdHlwZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmVxX2FsbG9jICpyZXE7XFxuK1xcdHN0cnVjdCBkZW50cnkgKm5yX3BhZ2VzO1xcbitcXG4rXFx0cmVxID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfYWxsb2NfY2FjaGUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBjcmVhdGUgbnJfcGFnZXNfYWxsb2NzX2luZm9cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbm9kZV9pZHggPSBuaWQ7XFxuK1xcdHJlcS1cXHUwMDNlem9uZV9pZHggPSB6b25lX2lkeDtcXG4rXFx0cmVxLVxcdTAwM2VvcmRlciA9IG9yZGVyO1xcbitcXHRyZXEtXFx1MDAzZW1pZ3JhdGVfdHlwZSA9IG10eXBlO1xcbitcXHRyZXEtXFx1MDAzZXBhcmVudGRpciA9IG1pZ3JhdGVkaXI7XFxuK1xcbitcXHRucl9wYWdlcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcIm5yX3BhZ2VzX2FsbG9jc1xcXCIsIDAyMDAsIG1pZ3JhdGVkaXIsIHJlcSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZyZXFfcGFnZV9hbGxvY19mb3BzKTtcXG4rXFx0aWYgKElTX0VSUihucl9wYWdlcykpIHtcXG4rXFx0XFx0a21lbV9jYWNoZV9mcmVlKHJlcV9hbGxvY19jYWNoZSwgcmVxKTtcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIobnJfcGFnZXMpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBtaWdyYXRlIHR5cGVcXG4rICogaW5zaWRlIHRoZSBvcmRlciBkaXJlY3RvcnkuIE9uY2UgdGhlIG1pZ3JhdGUgdHlwZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXRcXG4rICogY3JlYXRlcyB0aGUgXFxcIm5yX3BhZ2VzX2FsbG9jc1xcXCIgZmlsZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICpvcmRlcmRpciwgaW50IG5pZCxcXG4rXFx0XFx0XFx0XFx0XFx0aW50IHpvbmVfaWR4LCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0c3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpcjtcXG4rXFx0Y2hhciBkaXJuYW1lWzI0XTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvciAoaW50IG10eXBlID0gMDsgbXR5cGUgXFx1MDAzYyBNSUdSQVRFX1RZUEVTOyBtdHlwZSsrKSB7XFxuKyNpZmRlZiBDT05GSUdfQ01BXFxuK1xcdFxcdGlmIChtdHlwZSA9PSBNSUdSQVRFX0NNQSkgLyogQ01BIGFsbG9jcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQqL1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxcbitcXHRcXHRpZiAobXR5cGUgPT0gTUlHUkFURV9JU09MQVRFKSAvKiBjYW4ndCBhbGxvY2F0ZSBmcm9tIGhlcmUgKi9cXG4rXFx0XFx0XFx0Y29udGludWU7XFxuKyNlbmRpZlxcbitcXHRcXHRpZiAoem9uZV9pZHggPT0gWk9ORV9NT1ZBQkxFIFxcdTAwMjZcXHUwMDI2IG10eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksIFxcXCJtaWdyYXRlLSVzXFxcIixcXG4rXFx0XFx0XFx0IG1pZ3JhdGV0eXBlX25hbWVzW210eXBlXSk7XFxuK1xcdFxcdG1pZ3JhdGVkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgb3JkZXJkaXIpO1xcbitcXHRcXHRpZiAoSVNfRVJSKG1pZ3JhdGVkaXIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtaWdyYXRlZGlyKTtcXG4rXFxuK1xcdFxcdHJldCA9IGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZShtaWdyYXRlZGlyLCBuaWQsIHpvbmVfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRvcmRlciwgbXR5cGUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKCkgLSBDcmVhdGVzIGEgZGlyZWN0b3J5IGZvciBlYWNoIHBhZ2Ugb3JkZXIgaW5zaWRlXFxuKyAqIHRoZSB6b25lIGRpcmVjdG9yeS4gT25jZSB0aGF0IHRoZSBwYWdlIG9yZGVyIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCBpdCBjcmVhdGVzXFxuKyAqIGEgZGlyZWN0b3J5IGZvciBlYWNoIG1pZ3JhdGUgdHlwZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKHN0cnVjdCBkZW50cnkgKnpvbmVkaXIsIGludCBuaWQsXFxuK1xcdFxcdFxcdFxcdFxcdGludCB6b25lX2lkeClcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpvcmRlcmRpcjtcXG4rXFx0Y2hhciBkaXJuYW1lWzEyXTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvciAoaW50IG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBOUl9QQUdFX09SREVSUzsgb3JkZXIrKykge1xcbitcXHRcXHRzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksIFxcXCJvcmRlci0lZFxcXCIsIG9yZGVyKTtcXG4rXFx0XFx0b3JkZXJkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgem9uZWRpcik7XFxuK1xcdFxcdGlmIChJU19FUlIob3JkZXJkaXIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihvcmRlcmRpcik7XFxuK1xcbitcXHRcXHRyZXQgPSBjcmVhdGVfbWlncmF0ZV90eXBlX3N1YmRpcnMob3JkZXJkaXIsIG5pZCwgem9uZV9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG9yZGVyKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBjcmVhdGVfem9uZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBwb3B1bGF0ZWQgem9uZSBpbiB0aGVcXG4rICogbm9kZS4gT25jZSB0aGF0IHRoZSB6b25lIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCBpdCBjcmVhdGVzIGEgZGlyZWN0b3J5IGZvclxcbisgKiBlYWNoIG9yZGVyIHN1cHBvcnRlZC5cXG4rICpcXG4rICogTm90ZTogWk9ORV9ERVZJQ0UgcGFnZXMgd29uJ3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMgZHJpdmVyLiBUaGUgbWFpbiByZWFzb25cXG4rICogaXMgYmVjYXVzZSB0aGV5IGFyZSBub3QgbWFuYWdlZCBieSB0aGUgQnVkZHkgQWxsb2NhdG9yIG9yIENNQSBhbGxvY2F0b3IuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfem9uZXNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICpub2RlZGlyLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSwgaW50IG5pZClcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICp6b25lZGlyO1xcbitcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4rXFx0c3RydWN0IHpvbmUgKm5vZGVfem9uZXMgPSBwZ2RhdGEtXFx1MDAzZW5vZGVfem9uZXM7XFxuK1xcdGludCB6b25lX2lkeDtcXG4rXFx0Y2hhciBkaXJuYW1lWzI0XTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvciAoem9uZSA9IG5vZGVfem9uZXMsIHpvbmVfaWR4ID0gMDsgem9uZSAtIG5vZGVfem9uZXMgXFx1MDAzYyBNQVhfTlJfWk9ORVM7XFxuK1xcdFxcdFxcdCsrem9uZSwgKyt6b25lX2lkeCkge1xcbitcXHRcXHRpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIFpPTkVfREVWSUNFIHBhZ2VzIHdvbid0IGJlIGFsbG9jYXRlZCB1c2luZyB0aGlzIGRyaXZlci4gKi9cXG4rXFx0XFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcXFwiem9uZS0lc1xcXCIsIHpvbmUtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHR6b25lZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG5vZGVkaXIpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHpvbmVkaXIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih6b25lZGlyKTtcXG4rXFxuK1xcdFxcdHJldCA9IGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKHpvbmVkaXIsIG5pZCwgem9uZV9pZHgpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGNyZWF0ZV9ub2Rlc19zdWJkaXJzKCkgLSBDcmVhdGVzIGEgZGlyZWN0b3J5IGZvciBlYWNoIG5vZGUgdGhhdCBjb250YWluc1xcbisgKiBtZW1vcnkuIE9uY2UgdGhhdCB0aGUgbm9kZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBmb3JcXG4rICogZWFjaCB6b25lIGluIHRoZSBub2RlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgY3JlYXRlX25vZGVzX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqbW1kaXIpXFxuK3tcXG4rXFx0c3RydWN0IGRlbnRyeSAqbm9kZWRpcjtcXG4rXFx0Y2hhciBkaXJuYW1lWzEyXTtcXG4rXFx0aW50IG5pZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbitcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSA9IE5PREVfREFUQShuaWQpO1xcbitcXG4rXFx0XFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcXFwibm9kZS0lZFxcXCIsIG5pZCk7XFxuK1xcdFxcdG5vZGVkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgbW1kaXIpO1xcbitcXHRcXHRpZiAoSVNfRVJSKG5vZGVkaXIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihub2RlZGlyKTtcXG4rXFxuK1xcdFxcdHJldCA9IGNyZWF0ZV96b25lc19zdWJkaXJzKG5vZGVkaXIsIHBnZGF0YSwgbmlkKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBkZW50cnkgKmZyZWVfZmlsZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJlcV9hbGxvY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKFxcbitcXHRcXHRcXFwicmVxX2FsbG9jX2NhY2hlXFxcIiwgc2l6ZW9mKHN0cnVjdCByZXFfYWxsb2MpLCAwLFxcbitcXHRcXHRTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpO1xcbitcXHRpZiAoIXJlcV9hbGxvY19jYWNoZSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIlRoZSByZXFfYWxsb2NfY2FjaGUgY291bGRuJ3QgYmUgY3JlYXRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyb3JfZXhpdDtcXG4rXFx0fVxcbitcXG4rXFx0cGFnZV9hbGxvY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKFxcbitcXHRcXHRcXFwicGFnZV9hbGxvY19jYWNoZVxcXCIsIHNpemVvZihzdHJ1Y3QgcGFnZV9hbGxvYyksIDAsXFxuK1xcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XFxuK1xcdGlmICghcGFnZV9hbGxvY19jYWNoZSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIlRoZSBwYWdlX2FsbG9jX2NhY2hlIGNvdWxkbid0IGJlIGNyZWF0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGNsZWFuX3JlcV9hbGxvY19jYWNoZTtcXG4rXFx0fVxcbitcXG4rXFx0bW1kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcIm1tXFxcIiwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIobW1kaXIpKSB7XFxuK1xcdFxcdHByX2VycihcXFwiVW5hYmxlIHRvIGNyZWF0ZSBtbSBkaXJlY3RvcnlcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKG1tZGlyKTtcXG4rXFx0XFx0Z290byBjbGVhbl9wYWdlX2FsbG9jX2NhY2hlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBjcmVhdGVfbm9kZXNfc3ViZGlycyhtbWRpcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2xlYW5fZGlyO1xcbitcXG4rXFx0ZnJlZV9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZnJlZVxcXCIsIDAyMDAsIG1tZGlyLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZnJlZV9wYWdlX2FsbG9jX2ZvcHMpO1xcbitcXHRpZiAoSVNfRVJSKGZyZWVfZmlsZSkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihmcmVlX2ZpbGUpO1xcbitcXHRcXHRnb3RvIGNsZWFuX2RpcjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjbGVhbl9kaXI6XFxuK1xcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShtbWRpcik7XFxuK1xcbitjbGVhbl9wYWdlX2FsbG9jX2NhY2hlOlxcbitcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocGFnZV9hbGxvY19jYWNoZSk7XFxuK1xcbitjbGVhbl9yZXFfYWxsb2NfY2FjaGU6XFxuK1xcdGttZW1fY2FjaGVfZGVzdHJveShyZXFfYWxsb2NfY2FjaGUpO1xcbitcXG4rZXJyb3JfZXhpdDpcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19leGl0IHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfZXhpdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlX2FsbG9jICpwYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpZHg7XFxuK1xcbitcXHR4YV9mb3JfZWFjaChcXHUwMDI2YWxsb2NzX3hhLCBpZHgsIHBhKVxcbitcXHRcXHRmcmVlX2FsbG9jX2hlbHBlcihpZHgpO1xcbitcXG4rXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG1tZGlyKTtcXG4rXFx0a21lbV9jYWNoZV9kZXN0cm95KHJlcV9hbGxvY19jYWNoZSk7XFxuK1xcdGttZW1fY2FjaGVfZGVzdHJveShwYWdlX2FsbG9jX2NhY2hlKTtcXG4rfVxcbitcXG4rbW9kdWxlX2luaXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19pbml0KTtcXG4rbW9kdWxlX2V4aXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19leGl0KTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkp1YW4gWWVzY2FzXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTW9kdWxlIHRvIGFsbG9jIHBhZ2VzIHRvIGdlbmVyYXRlIG1lbW9yeSBwcmVzc3VyZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjA0OjU2Ljk1MjAyNjQ3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNjkyNTg0MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VBTExPQ19IT0dHRVJcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxX3BhZ2VfYWxsb2Nfd3JpdGVcIixcbiAgICBcImZyZWVfcGFnZV9hbGxvY193cml0ZVwiLFxuICAgIFwicGFnZV9hbGxvY19yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgYWxsb2NhdGluZyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUuIEZ1enppbmcgdGhpcyBpbnRlcmZhY2UgY2FuIGhlbHAgdW5jb3ZlciBidWdzIGluIHRoZSBob2dnZXIgaXRzZWxmIG9yIHRyaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNDNhMzUyNjYzYWVkZDQyMTUzYWU0NGUxOTczOGQyYzc4YzVmNDdjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwMjowNDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcuZGVidWcgYi9tbS9LY29uZmlnLmRlYnVnXG5pbmRleCA3NjM4ZDc1YjI3ZGI4Li5iYWQ4YTYwNjE1MmMzIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZy5kZWJ1Z1xuKysrIGIvbW0vS2NvbmZpZy5kZWJ1Z1xuQEAgLTMwOSwzICszMDksMTUgQEAgY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuIFx0ICBvdmVyaGVhZCBpbiB0aGUgcGFnZSBmYXVsdCBwYXRoLlxuIFxuIFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4rXG4rY29uZmlnIFBBR0VBTExPQ19IT0dHRVJcbitcdHRyaXN0YXRlIFwiQWxsb2MgcGFnZXMgZnJvbSBkaWZmZXJlbnQgbm9kZXMsIHpvbmVzLCBtaWdyYXRlIHR5cGVzIGFuZCBvcmRlcnNcIlxuK1x0ZGVwZW5kcyBvbiBERUJVR19GU1xuK1x0aGVscFxuK1x0ICBTYXkgWSB0byBhbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZSBhbmRcbitcdCAgb3JkZXJzIHVzaW5nIHRoZSBkZWJ1ZyBmcyBmaWxlc3lzdGVtLiBUaGlzIGhlbHBzIHRvIGdlbmVyYXRlIG1lbW9yeVxuK1x0ICBwcmVzc3VyZSBlYXNpbHkuIFRoaXMgaXMgdXNlZnVsIHRvIGRlYnVnIG1lbW9yeSByZWNsYWltcyBpc3N1ZXMsXG4rXHQgIE9PTSB0cmlnZ2VycywgcGFnZSBtaWdyYXRpb24gaXNzdWVzLCBldGMuXG4rXG4rXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbitcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCAyZDA1NzBhMTZlNWJlLi5iNDhmMmFjNmVlODA4IDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbisrKyBiL21tL01ha2VmaWxlXG5AQCAtMTMzLDYgKzEzMyw3IEBAIG9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICs9IHBhZ2VfaWRsZS5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VBTExPQykgKz0gZGVidWdfcGFnZV9hbGxvYy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXG4gb2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9cbitvYmotJChDT05GSUdfUEFHRUFMTE9DX0hPR0dFUikgKz0gcGFnZV9hbGxvY19ob2dnZXIub1xuIG9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xuIG9iai0kKENPTkZJR19QRVJDUFVfU1RBVFMpICs9IHBlcmNwdS1zdGF0cy5vXG4gb2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBtZW1yZW1hcC5vXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvY19ob2dnZXIuYyBiL21tL3BhZ2VfYWxsb2NfaG9nZ2VyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MmMwNTA1YTZmNWE3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9tbS9wYWdlX2FsbG9jX2hvZ2dlci5jXG5AQCAtMCwwICsxLDYxMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBQYWdlIGFsbG9jYXRvciBEZWJ1Z0ZTIEludGVyZmFjZVxuKyAqIEF1dGhvcjogSnVhbiBZZXNjYXMgXHUwMDNjanllc2Nhc0Bnb29nbGUuY29tXHUwMDNlXG4rICpcbisgKiBUaGlzIG1vZHVsZSBhbGxvd3MgdG8gbWFrZSBwYWdlIGFsbG9jcyBwZXIgbm9kZSwgem9uZSwgbWlncmF0ZSB0eXBlXG4rICogYW5kIG9yZGVyIHVzaW5nIHRoZSBEZWJ1Z0ZTIGZpbGVzeXN0ZW0uXG4rICpcbisgKiBXaGVuIHRoaXMgbW9kdWxlIGlzIGluc3RhbGxlZCBhbmQgdGhlIGRlYnVnZnMgaXMgbW91bnRlZCwgdGhlIFwibW1cIiBkaXJlY3RvcnlcbisgKiB3aWxsIGJlIGNyZWF0ZWQgaW4gXHUwMDNjZGVidWdmcyBtb3VudCBwb2ludFx1MDAzZS9tbVwiIGRpcmVjdG9yeS4gVW5kZXIgdGhpcyBkaXJlY3RvcnksXG4rICogdGhlcmUgd2lsbCBiZSBzdWJkaXJzIHRvIHNlbGVjdCB0aGUgbm9kZXMsIHpvbmVzLCBvcmRlcnMgYW5kIG1pZ3JhdGUgdHlwZS5cbisgKlxuKyAqIEZvciBleGFtcGxlOlxuKyAqXG4rICogICAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9cbisgKiAgICAgIHwtLSBmcmVlXG4rICogICAgICBgLS0gbm9kZS0wXG4rICogICAgICAgICB8LS0gem9uZS1ETUFcbisgKiAgICAgICAgIHwgICB8LS0gb3JkZXItMFxuKyAqICAgICAgICAgfCAgIHwgICB8LS0gbWlncmF0ZS1IaWdoQXRvbWljXG4rICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICB8ICAgfCAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbisgKiAgICAgICAgIHwgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgIHwgICB8ICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcbisgKiAgICAgICAgIHwgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgIHwgICB8ICAgYC0tIG1pZ3JhdGUtVW5tb3ZhYmxlXG4rICogICAgICAgICB8ICAgfCAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICB8ICAgfC0tIC4uLlxuKyAqICAgICAgICAgfCAgIHxcbisgKiAgICAgICAgIHwgICBgLS0gb3JkZXItOVxuKyAqICAgICAgICAgfCAgICAgICB8LS0gbWlncmF0ZS1IaWdoQXRvbWljXG4rICogICAgICAgICB8ICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICB8ICAgICAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbisgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgIHwgICAgICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcbisgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgIHwgICAgICAgYC0tIG1pZ3JhdGUtVW5tb3ZhYmxlXG4rICogICAgICAgICB8ICAgICAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICBgLS0gem9uZS1Ob3JtYWxcbisgKiAgICAgICAgICAgICB8LS0gb3JkZXItMFxuKyAqICAgICAgICAgICAgIHwgICB8LS0gbWlncmF0ZS1IaWdoQXRvbWljXG4rICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICAgICAgfCAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbisgKiAgICAgICAgICAgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgICAgICB8ICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcbisgKiAgICAgICAgICAgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgICAgICB8ICAgYC0tIG1pZ3JhdGUtVW5tb3ZhYmxlXG4rICogICAgICAgICAgICAgfCAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICAgICAgfC0tIC4uLi5cbisgKiAgICAgICAgICAgICB8XG4rICogICAgICAgICAgICAgYC0tIG9yZGVyLTlcbisgKiAgICAgICAgICAgICAgICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xuKyAqICAgICAgICAgICAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuKyAqICAgICAgICAgICAgICAgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlXG4rICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICAgICAgICAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlXG4rICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICAgICAgICAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxuKyAqICAgICAgICAgICAgICAgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuKyAqXG4rICogVXNhZ2U6XG4rICpcbisgKiAxLiBUbyB0cmlnZ2VyIHRoZSBhbGxvY2F0aW9uLCBuYXZpZ2F0ZSB0byB0aGUgZGVidWdmcyBwYXRoIGNvcnJlc3BvbmRpbmdcbisgKiAgICB0byB5b3VyIHRhcmdldCBub2RlLCBtZW1vcnkgem9uZSwgYWxsb2NhdGlvbiBvcmRlciwgYW5kIG1pZ3JhdGlvbiB0eXBlLFxuKyAqICAgIHRoZW4gd3JpdGUgdGhlIHJlcXVlc3RlZCBhbGxvY2F0aW9uIGNvdW50IHRvIG5yX3BhZ2VzX2FsbG9jcy5cbisgKlxuKyAqICAgIEZvciBleGFtcGxlLCB0byBtYWtlIDMgYWxsb2NzIG9mIG9yZGVyIDksIE1pZ3JhdGUgVHlwZSBNb3ZhYmxlLFxuKyAqICAgIFpvbmUgTm9ybWFsIGFuZCBOb2RlIDAsIHJ1bjpcbisgKlxuKyAqICAgICQgZWNobyAzIFx1MDAzZSAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9ub2RlLTAvem9uZS1Ob3JtYWwvb3JkZXItOS9taWdyYXRlLU1vdmFibGUvbnJfcGFnZXNfYWxsb2NzXG4rICpcbisgKiAyLiBGb3IgZWFjaCBhbGxvY2F0aW9uIGNyZWF0ZWQsIGEgY29ycmVzcG9uZGluZyBmaWxlIG5hbWVkIHNlcXVlbnRpYWxseVxuKyAqICAgICgxLCAyLCBuKSB3aWxsIGFwcGVhciBpbiB0aGF0IGRpcmVjdG9yeS5cbisgKlxuKyAqICAgICQgbHMgL3N5cy9rZXJuZWwvZGVidWcvbW0vbm9kZS0wL3pvbmUtTm9ybWFsL29yZGVyLTkvbWlncmF0ZS1Nb3ZhYmxlL1xuKyAqICAgIDEgICAyICAgMyAgbnJfcGFnZXNfYWxsb2NzXG4rICpcbisgKiAzLiBUbyBmcmVlIHRoZSBhbGxvY2F0aW9uLCB3cml0ZSB0aGUgYWxsb2NhdGlvbiBmaWxlIG5hbWUgaW4gL3N5cy9rZXJuZWwvZGVidWcvbW0vZnJlZS5cbisgKiAgICBGb3IgZXhhbXBsZSwgdG8gcmVsZWFzZSB0aGUgMm5kIGFsbG9jYXRpb24gcnVuOlxuKyAqXG4rICogICAgJCBlY2hvIDIgXHUwMDNlIC9zeXMva2VybmVsL2RlYnVnL21tL2ZyZWVcbisgKi9cbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcF90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXpvbmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm9kZW1hc2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbitcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbW1kaXI7XG4rXG4rLyoqXG4rICogYXRvbWljX2xvbmdfdCBhbGxvY3NfZmlsZV9zZXEgLSBSZXByZXNlbnRzIHRoZSBuYW1pbmcgc2VxdWVuY2UgdXNlZCBmb3JcbisgKiBhbGxvY2F0aW9uIGZpbGVzLlxuKyAqL1xuK3N0YXRpYyBhdG9taWNfbG9uZ190IGFsbG9jc19maWxlX3NlcSA9IEFUT01JQ19JTklUKDApO1xuK1xuKy8qKlxuKyAqIGFsbG9jc194YSAtIFJlcHJlc2VudCB0aGUgeGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBhbGxvY2F0aW9ucyBwZXJmb3JtXG4rICogYnkgdGhpcyBkcml2ZXIuXG4rICovXG4rc3RhdGljIERFRklORV9YQVJSQVkoYWxsb2NzX3hhKTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcmVxX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb25cbisgKiBAbm9kZV9pZHg6IFRoZSBOb2RlIGluZGV4IHRvIGFsbG9jYXRlIGZyb20uXG4rICogQHpvbmVfaWR4OiBUaGUgWm9uZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLlxuKyAqIEBvcmRlcjogVGhlIE9yZGVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlLlxuKyAqIEBtaWdyYXRlX3R5cGU6IFRoZSBNaWdyYXRlIHR5cGUgdG8gYWxsb2NhdGUgZnJvbS5cbisgKiBAcGFyZW50ZGlyOiBUaGUgcGFyZW50IGRpciB3aGVyZSB0aGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGFsbG9jIHdhcyBjcmVhdGVkLlxuKyAqL1xuK3N0cnVjdCByZXFfYWxsb2Mge1xuK1x0aW50IG5vZGVfaWR4O1xuK1x0aW50IHpvbmVfaWR4O1xuK1x0aW50IG9yZGVyO1xuK1x0aW50IG1pZ3JhdGVfdHlwZTtcbitcdHN0cnVjdCBkZW50cnkgKnBhcmVudGRpcjtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwYWdlX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcGFnZSBhbGxvY2F0aW9uLlxuKyAqIEBwYWdlOiBUaGUgcG9pbnRlciB0byB0aGUgcGFnZShzKSBhbGxvY2F0ZWQuXG4rICogQHJlcV9hbGxvYzogVGhlIGRldGFpbHMgb2YgdGhlIGFsbG9jYXRpb24uXG4rICogQGFsbG9jX2RlbnRyeTogVGhlIHBvaW50ZXIgdG8gdGhlIGZpbGUgdGhhdCByZXByZXNlbnRzIHRoZSBhbGxvY2F0aW9uLlxuKyAqL1xuK3N0cnVjdCBwYWdlX2FsbG9jIHtcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0c3RydWN0IHJlcV9hbGxvYyAqcmVxX2FsbG9jO1xuK1x0c3RydWN0IGRlbnRyeSAqYWxsb2NfZGVudHJ5O1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZXFfYWxsb2NfY2FjaGU7XG4rc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwYWdlX2FsbG9jX2NhY2hlO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfem9uZV90b19hbGxvY19mcm9tKGludCB6b25lX2lkeCwgZ2ZwX3QgKmZsYWdzX3B0cilcbit7XG4rXHRzd2l0Y2ggKHpvbmVfaWR4KSB7XG4rI2lmZGVmIENPTkZJR19aT05FX0RNQVxuK1x0Y2FzZSBaT05FX0RNQTpcbitcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ETUE7XG4rXHRcdGJyZWFrO1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfWk9ORV9ETUEzMlxuK1x0Y2FzZSBaT05FX0RNQTMyOlxuK1x0XHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0RNQTMyO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHX0hJR0hNRU1cbitcdGNhc2UgWk9ORV9ISUdITUVNOlxuK1x0XHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0hJR0hNRU07XG4rXHRcdGJyZWFrO1xuKyNlbmRpZlxuK1x0Y2FzZSBaT05FX01PVkFCTEU6XG4rXHRcdCpmbGFnc19wdHIgfD0gX19HRlBfTU9WQUJMRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFpPTkVfTk9STUFMOlxuK1x0ZGVmYXVsdDpcbitcdFx0KmZsYWdzX3B0ciB8PSAwO1xuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9taWdyYXRlX3R5cGVfdG9fYWxsb2NfZnJvbShpbnQgbWlncmF0ZV90eXBlLCBnZnBfdCAqZmxhZ3NfcHRyKVxuK3tcbitcdHN3aXRjaCAobWlncmF0ZV90eXBlKSB7XG4rXHRjYXNlIE1JR1JBVEVfVU5NT1ZBQkxFOlxuK1x0XHQqZmxhZ3NfcHRyIFx1MDAyNj0gfihfX0dGUF9SRUNMQUlNQUJMRSB8IF9fR0ZQX01PVkFCTEUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUlHUkFURV9SRUNMQUlNQUJMRTpcbitcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9SRUNMQUlNQUJMRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1JR1JBVEVfSElHSEFUT01JQzpcbitcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdIO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUlHUkFURV9NT1ZBQkxFOiBkZWZhdWx0OlxuK1x0XHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX01PVkFCTEU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgc3NpemVfdCBwYWdlX2FsbG9jX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLFxuK1x0XHRcdFx0ICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcbit7XG4rXHQvKiAgV2hpY2ggaW5mb3JtYXRpb24gc2hvdWxkIGJlIHByaW50IGFib3V0IHRoZSBwYWdlIG9yIGFsbG9jYXRpb24/ICovXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9hbGxvY19mb3BzID0ge1xuK1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4rXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuK1x0LnJlYWQgPSBwYWdlX2FsbG9jX3JlYWQsXG4rfTtcbitcbitzdGF0aWMgaW50IG1ha2VfYWxsb2Moc3RydWN0IHJlcV9hbGxvYyAqcmVxLFxuK1x0XHRcdCAgICBnZnBfdCBmbGFncywgdW5zaWduZWQgbG9uZyAqYWxsb2NfaWQpXG4re1xuK1x0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHRjaGFyIG5ld19hbGxvY19uYW1lWzIwXTtcbitcdHN0cnVjdCBkZW50cnkgKm5ld19hbGxvY19kZW50cnk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKHJlcS1cdTAwM2Vub2RlX2lkeCwgZmxhZ3MsIHJlcS1cdTAwM2VvcmRlcik7XG4rXHRpZiAocGFnZSkge1xuK1x0XHRwYSA9IGttZW1fY2FjaGVfYWxsb2MocGFnZV9hbGxvY19jYWNoZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghcGEpIHtcbitcdFx0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRcdGdvdG8gZnJlZV9wYWdlcztcbitcdFx0fVxuK1xuK1x0XHQqYWxsb2NfaWQgPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKFx1MDAyNmFsbG9jc19maWxlX3NlcSk7XG4rXHRcdHNucHJpbnRmKG5ld19hbGxvY19uYW1lLCBzaXplb2YobmV3X2FsbG9jX25hbWUpLCBcIiVsdVwiLFxuK1x0XHRcdCAqYWxsb2NfaWQpO1xuK1xuK1x0XHRuZXdfYWxsb2NfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShcbitcdFx0XHRuZXdfYWxsb2NfbmFtZSwgMDQwMCwgcmVxLVx1MDAzZXBhcmVudGRpcixcbitcdFx0XHRwYSwgXHUwMDI2cGFnZV9hbGxvY19mb3BzKTtcbitcdFx0aWYgKElTX0VSUihuZXdfYWxsb2NfZGVudHJ5KSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIobmV3X2FsbG9jX2RlbnRyeSk7XG4rXHRcdFx0Z290byBmcmVlX3BhZ2VfYWxsb2M7XG4rXHRcdH1cbitcbitcdFx0cGEtXHUwMDNlcmVxX2FsbG9jID0gcmVxO1xuK1x0XHRwYS1cdTAwM2VwYWdlID0gcGFnZTtcbitcdFx0cGEtXHUwMDNlYWxsb2NfZGVudHJ5ID0gbmV3X2FsbG9jX2RlbnRyeTtcbitcbitcdFx0cmV0ID0geGFfaW5zZXJ0KFx1MDAyNmFsbG9jc194YSwgKmFsbG9jX2lkLCBwYSwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZW1vdmVfYWxsb2NfZGVudHJ5O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbityZW1vdmVfYWxsb2NfZGVudHJ5OlxuK1x0ZGVidWdmc19yZW1vdmUobmV3X2FsbG9jX2RlbnRyeSk7XG4rXG4rZnJlZV9wYWdlX2FsbG9jOlxuK1x0a21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTtcbitcbitmcmVlX3BhZ2VzOlxuK1x0X19mcmVlX3BhZ2VzKHBhZ2UsIHJlcS1cdTAwM2VvcmRlcik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGZyZWVfYWxsb2NfaGVscGVyKHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQpXG4re1xuK1x0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xuK1xuK1x0cGEgPSB4YV9lcmFzZShcdTAwMjZhbGxvY3NfeGEsIGFsbG9jX2lkKTtcbitcdGlmICghcGEpIHtcbitcdFx0cHJfZXJyKFwiVGhlIGFsbG9jX2lkICVsdSB3YXMgbm90IGZvdW5kIVwiLCBhbGxvY19pZCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0X19mcmVlX3BhZ2VzKHBhLVx1MDAzZXBhZ2UsIHBhLVx1MDAzZXJlcV9hbGxvYy1cdTAwM2VvcmRlcik7XG4rXHRkZWJ1Z2ZzX3JlbW92ZShwYS1cdTAwM2VhbGxvY19kZW50cnkpO1xuK1x0a21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiByZXFfcGFnZV9hbGxvY193cml0ZSgpIC0gQWxsb2NhdGVzIHRoZSBwYWdlcyBvbiB0aGUgcmVxdWVzdGVkIG5vZGUsIHpvbmUsXG4rICogb3JkZXIgYW5kIG1pZ3JhdGUgdHlwZS4gT25jZSB0aGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQsIGEgZmlsZSBpcyBjcmVhdGVkXG4rICogdG8gZnJlZSB0aGUgYWxsb2NhdGlvbiBsYXRlci5cbisgKi9cbitzdGF0aWMgc3NpemVfdCByZXFfcGFnZV9hbGxvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcbit7XG4rXHRzdHJ1Y3QgcmVxX2FsbG9jICpyZXEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzX2FsbG9jcztcbitcdHVuc2lnbmVkIGxvbmcgKmFsbG9jc19pZHM7XG4rXHRnZnBfdCBmbGFncyA9IDA7XG4rXHRpbnQgcmV0O1xuK1x0aW50IGk7XG4rXG4rXHRyZXQgPSBrc3RydG91bF9mcm9tX3VzZXIodWJ1ZiwgY250LCAxMCwgXHUwMDI2bnJfcGFnZXNfYWxsb2NzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRhbGxvY3NfaWRzID0ga21hbGxvY19hcnJheShucl9wYWdlc19hbGxvY3MsIHNpemVvZih1bnNpZ25lZCBsb25nKSxcbitcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWFsbG9jc19pZHMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0c2V0X3pvbmVfdG9fYWxsb2NfZnJvbShyZXEtXHUwMDNlem9uZV9pZHgsIFx1MDAyNmZsYWdzKTtcbitcdHNldF9taWdyYXRlX3R5cGVfdG9fYWxsb2NfZnJvbShyZXEtXHUwMDNlbWlncmF0ZV90eXBlLCBcdTAwMjZmbGFncyk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlc19hbGxvY3M7IGkrKykge1xuK1x0XHRyZXQgPSBtYWtlX2FsbG9jKHJlcSwgZmxhZ3MsIFx1MDAyNmFsbG9jX2lkKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGZyZWVfYWxsb2NzO1xuK1xuK1x0XHRhbGxvY3NfaWRzW2ldID0gYWxsb2NfaWQ7XG4rXHR9XG4rXG4rXHRrZnJlZShhbGxvY3NfaWRzKTtcbitcbitcdHJldHVybiBjbnQ7XG4rXG4rZnJlZV9hbGxvY3M6XG4rXHQvKiBGcmVlIGFsbCB0aGUgcGFnZXMgYW5kIHJlc291cmNlcyBwcmV2aW91c2x5IGFsbG9jYXRlZC4gKi9cbitcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyBpOyBqKyspIHtcbitcdFx0aW50IHJldDIgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY3NfaWRzW2pdKTtcbitcbitcdFx0aWYgKHJldDIpXG4rXHRcdFx0cHJfZXJyKFwiVW5hYmxlIHRvIGZyZWUgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIGZpbGUgJWx1XCIsXG4rXHRcdFx0ICAgICAgIGFsbG9jc19pZHNbal0pO1xuK1x0fVxuK1xuK1x0a2ZyZWUoYWxsb2NzX2lkcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXFfcGFnZV9hbGxvY19mb3BzID0ge1xuK1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4rXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuK1x0LndyaXRlID0gcmVxX3BhZ2VfYWxsb2Nfd3JpdGUsXG4rfTtcbitcbisvKipcbisgKiBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUoKSAtIGZyZWUgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIHBhZ2VzLlxuKyAqIEBmaWxlOiBGaWxlIHdoZXJlIHRoZSB1c2VyIGlzIHdyaXRpbmcuXG4rICogQHVidWY6IENvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoZSB1c2VyIHdhbnRzIHRvIGRlbGV0ZSBhbmQgaGF2ZSB0aGVcbisgKiAgICAgICBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZmlsZSBmcmVlZC5cbisgKiBAY250OiBTaXplIG9mIEB1YnVmLlxuKyAqIEBwcG9zOiBDdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGZyZWVfcGFnZV9hbGxvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbitcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LFxuK1x0XHRcdFx0ICAgICAgbG9mZl90ICpwcG9zKVxuK3tcbitcdGludCByZXQ7XG4rXHR1bnNpZ25lZCBsb25nIGFsbG9jX2lkO1xuK1xuK1x0cmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNudCwgMTAsIFx1MDAyNmFsbG9jX2lkKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY19pZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGNudDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnJlZV9wYWdlX2FsbG9jX2ZvcHMgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC53cml0ZSA9IGZyZWVfcGFnZV9hbGxvY193cml0ZSxcbit9O1xuK1xuKy8qKlxuKyAqIGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZSgpIC0gQ3JlYXRlcyB0aGUgZmlsZSBcIm5yX3BhZ2VzX2FsbG9jc1wiLlxuKyAqXG4rICogVGhlIFwibnJfcGFnZXNfYWxsb2NzXCIgZmlsZSB3aWxsIGJlIHVzZWQgdG8gd3JpdGUgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9uc1xuKyAqIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQuIFdoZW4gdGhlIGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQsIGEgbmV3IGZpbGUgZm9yXG4rICogZWFjaCBhbGxvY2F0aW9uIHdpbGwgYmUgY3JlYXRlZCBpbiBAbWlncmF0ZWRpci5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUoc3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpcixcbitcdFx0XHRcdFx0ICAgICAgaW50IG5pZCwgaW50IHpvbmVfaWR4LFxuK1x0XHRcdFx0XHQgICAgICBpbnQgb3JkZXIsIGludCBtdHlwZSlcbit7XG4rXHRzdHJ1Y3QgcmVxX2FsbG9jICpyZXE7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpucl9wYWdlcztcbitcbitcdHJlcSA9IGttZW1fY2FjaGVfYWxsb2MocmVxX2FsbG9jX2NhY2hlLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmVxKSB7XG4rXHRcdHByX2VycihcIkZhaWxlZCB0byBjcmVhdGUgbnJfcGFnZXNfYWxsb2NzX2luZm9cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZW5vZGVfaWR4ID0gbmlkO1xuK1x0cmVxLVx1MDAzZXpvbmVfaWR4ID0gem9uZV9pZHg7XG4rXHRyZXEtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbitcdHJlcS1cdTAwM2VtaWdyYXRlX3R5cGUgPSBtdHlwZTtcbitcdHJlcS1cdTAwM2VwYXJlbnRkaXIgPSBtaWdyYXRlZGlyO1xuK1xuK1x0bnJfcGFnZXMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwibnJfcGFnZXNfYWxsb2NzXCIsIDAyMDAsIG1pZ3JhdGVkaXIsIHJlcSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZyZXFfcGFnZV9hbGxvY19mb3BzKTtcbitcdGlmIChJU19FUlIobnJfcGFnZXMpKSB7XG4rXHRcdGttZW1fY2FjaGVfZnJlZShyZXFfYWxsb2NfY2FjaGUsIHJlcSk7XG4rXHRcdHJldHVybiBQVFJfRVJSKG5yX3BhZ2VzKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBjcmVhdGVfbWlncmF0ZV90eXBlX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggbWlncmF0ZSB0eXBlXG4rICogaW5zaWRlIHRoZSBvcmRlciBkaXJlY3RvcnkuIE9uY2UgdGhlIG1pZ3JhdGUgdHlwZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXRcbisgKiBjcmVhdGVzIHRoZSBcIm5yX3BhZ2VzX2FsbG9jc1wiIGZpbGUuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgY3JlYXRlX21pZ3JhdGVfdHlwZV9zdWJkaXJzKHN0cnVjdCBkZW50cnkgKm9yZGVyZGlyLCBpbnQgbmlkLFxuK1x0XHRcdFx0XHRpbnQgem9uZV9pZHgsIGludCBvcmRlcilcbit7XG4rXHRzdHJ1Y3QgZGVudHJ5ICptaWdyYXRlZGlyO1xuK1x0Y2hhciBkaXJuYW1lWzI0XTtcbitcdGludCByZXQ7XG4rXG4rXHRmb3IgKGludCBtdHlwZSA9IDA7IG10eXBlIFx1MDAzYyBNSUdSQVRFX1RZUEVTOyBtdHlwZSsrKSB7XG4rI2lmZGVmIENPTkZJR19DTUFcbitcdFx0aWYgKG10eXBlID09IE1JR1JBVEVfQ01BKSAvKiBDTUEgYWxsb2NzIGFyZSBub3Qgc3VwcG9ydGVkIHlldCovXG4rXHRcdFx0Y29udGludWU7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OXG4rXHRcdGlmIChtdHlwZSA9PSBNSUdSQVRFX0lTT0xBVEUpIC8qIGNhbid0IGFsbG9jYXRlIGZyb20gaGVyZSAqL1xuK1x0XHRcdGNvbnRpbnVlO1xuKyNlbmRpZlxuK1x0XHRpZiAoem9uZV9pZHggPT0gWk9ORV9NT1ZBQkxFIFx1MDAyNlx1MDAyNiBtdHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNucHJpbnRmKGRpcm5hbWUsIHNpemVvZihkaXJuYW1lKSwgXCJtaWdyYXRlLSVzXCIsXG4rXHRcdFx0IG1pZ3JhdGV0eXBlX25hbWVzW210eXBlXSk7XG4rXHRcdG1pZ3JhdGVkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgb3JkZXJkaXIpO1xuK1x0XHRpZiAoSVNfRVJSKG1pZ3JhdGVkaXIpKVxuK1x0XHRcdHJldHVybiBQVFJfRVJSKG1pZ3JhdGVkaXIpO1xuK1xuK1x0XHRyZXQgPSBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUobWlncmF0ZWRpciwgbmlkLCB6b25lX2lkeCxcbitcdFx0XHRcdFx0XHRvcmRlciwgbXR5cGUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggcGFnZSBvcmRlciBpbnNpZGVcbisgKiB0aGUgem9uZSBkaXJlY3RvcnkuIE9uY2UgdGhhdCB0aGUgcGFnZSBvcmRlciBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlc1xuKyAqIGEgZGlyZWN0b3J5IGZvciBlYWNoIG1pZ3JhdGUgdHlwZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfcGFnZV9vcmRlcnNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICp6b25lZGlyLCBpbnQgbmlkLFxuK1x0XHRcdFx0XHRpbnQgem9uZV9pZHgpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqb3JkZXJkaXI7XG4rXHRjaGFyIGRpcm5hbWVbMTJdO1xuK1x0aW50IHJldDtcbitcbitcdGZvciAoaW50IG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvcmRlcisrKSB7XG4rXHRcdHNucHJpbnRmKGRpcm5hbWUsIHNpemVvZihkaXJuYW1lKSwgXCJvcmRlci0lZFwiLCBvcmRlcik7XG4rXHRcdG9yZGVyZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIHpvbmVkaXIpO1xuK1x0XHRpZiAoSVNfRVJSKG9yZGVyZGlyKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihvcmRlcmRpcik7XG4rXG4rXHRcdHJldCA9IGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycyhvcmRlcmRpciwgbmlkLCB6b25lX2lkeCxcbitcdFx0XHRcdFx0XHRvcmRlcik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBjcmVhdGVfem9uZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBwb3B1bGF0ZWQgem9uZSBpbiB0aGVcbisgKiBub2RlLiBPbmNlIHRoYXQgdGhlIHpvbmUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIGl0IGNyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yXG4rICogZWFjaCBvcmRlciBzdXBwb3J0ZWQuXG4rICpcbisgKiBOb3RlOiBaT05FX0RFVklDRSBwYWdlcyB3b24ndCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhpcyBkcml2ZXIuIFRoZSBtYWluIHJlYXNvblxuKyAqIGlzIGJlY2F1c2UgdGhleSBhcmUgbm90IG1hbmFnZWQgYnkgdGhlIEJ1ZGR5IEFsbG9jYXRvciBvciBDTUEgYWxsb2NhdG9yLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV96b25lc19zdWJkaXJzKHN0cnVjdCBkZW50cnkgKm5vZGVkaXIsXG4rXHRcdFx0XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXRhLCBpbnQgbmlkKVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKnpvbmVkaXI7XG4rXHRzdHJ1Y3Qgem9uZSAqem9uZTtcbitcdHN0cnVjdCB6b25lICpub2RlX3pvbmVzID0gcGdkYXRhLVx1MDAzZW5vZGVfem9uZXM7XG4rXHRpbnQgem9uZV9pZHg7XG4rXHRjaGFyIGRpcm5hbWVbMjRdO1xuK1x0aW50IHJldDtcbitcbitcdGZvciAoem9uZSA9IG5vZGVfem9uZXMsIHpvbmVfaWR4ID0gMDsgem9uZSAtIG5vZGVfem9uZXMgXHUwMDNjIE1BWF9OUl9aT05FUztcbitcdFx0XHQrK3pvbmUsICsrem9uZV9pZHgpIHtcbitcdFx0aWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogWk9ORV9ERVZJQ0UgcGFnZXMgd29uJ3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMgZHJpdmVyLiAqL1xuK1x0XHRpZiAoem9uZV9pc196b25lX2RldmljZSh6b25lKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcInpvbmUtJXNcIiwgem9uZS1cdTAwM2VuYW1lKTtcbitcdFx0em9uZWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1lLCBub2RlZGlyKTtcbitcdFx0aWYgKElTX0VSUih6b25lZGlyKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUih6b25lZGlyKTtcbitcbitcdFx0cmV0ID0gY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoem9uZWRpciwgbmlkLCB6b25lX2lkeCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBjcmVhdGVfbm9kZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBub2RlIHRoYXQgY29udGFpbnNcbisgKiBtZW1vcnkuIE9uY2UgdGhhdCB0aGUgbm9kZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBmb3JcbisgKiBlYWNoIHpvbmUgaW4gdGhlIG5vZGUuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgY3JlYXRlX25vZGVzX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqbW1kaXIpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqbm9kZWRpcjtcbitcdGNoYXIgZGlybmFtZVsxMl07XG4rXHRpbnQgbmlkO1xuK1x0aW50IHJldDtcbitcbitcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuK1x0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSA9IE5PREVfREFUQShuaWQpO1xuK1xuK1x0XHRzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksIFwibm9kZS0lZFwiLCBuaWQpO1xuK1x0XHRub2RlZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG1tZGlyKTtcbitcdFx0aWYgKElTX0VSUihub2RlZGlyKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihub2RlZGlyKTtcbitcbitcdFx0cmV0ID0gY3JlYXRlX3pvbmVzX3N1YmRpcnMobm9kZWRpciwgcGdkYXRhLCBuaWQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXQgcGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqZnJlZV9maWxlO1xuK1x0aW50IHJldDtcbitcbitcdHJlcV9hbGxvY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKFxuK1x0XHRcInJlcV9hbGxvY19jYWNoZVwiLCBzaXplb2Yoc3RydWN0IHJlcV9hbGxvYyksIDAsXG4rXHRcdFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XG4rXHRpZiAoIXJlcV9hbGxvY19jYWNoZSkge1xuK1x0XHRwcl9lcnIoXCJUaGUgcmVxX2FsbG9jX2NhY2hlIGNvdWxkbid0IGJlIGNyZWF0ZWRcXG5cIik7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyb3JfZXhpdDtcbitcdH1cbitcbitcdHBhZ2VfYWxsb2NfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcbitcdFx0XCJwYWdlX2FsbG9jX2NhY2hlXCIsIHNpemVvZihzdHJ1Y3QgcGFnZV9hbGxvYyksIDAsXG4rXHRcdFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XG4rXHRpZiAoIXBhZ2VfYWxsb2NfY2FjaGUpIHtcbitcdFx0cHJfZXJyKFwiVGhlIHBhZ2VfYWxsb2NfY2FjaGUgY291bGRuJ3QgYmUgY3JlYXRlZFxcblwiKTtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBjbGVhbl9yZXFfYWxsb2NfY2FjaGU7XG4rXHR9XG4rXG4rXHRtbWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcIm1tXCIsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihtbWRpcikpIHtcbitcdFx0cHJfZXJyKFwiVW5hYmxlIHRvIGNyZWF0ZSBtbSBkaXJlY3RvcnlcXG5cIik7XG4rXHRcdHJldCA9IFBUUl9FUlIobW1kaXIpO1xuK1x0XHRnb3RvIGNsZWFuX3BhZ2VfYWxsb2NfY2FjaGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBjcmVhdGVfbm9kZXNfc3ViZGlycyhtbWRpcik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGNsZWFuX2RpcjtcbitcbitcdGZyZWVfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJmcmVlXCIsIDAyMDAsIG1tZGlyLCBOVUxMLFxuK1x0XHRcdFx0XHRcdTAwMjZmcmVlX3BhZ2VfYWxsb2NfZm9wcyk7XG4rXHRpZiAoSVNfRVJSKGZyZWVfZmlsZSkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihmcmVlX2ZpbGUpO1xuK1x0XHRnb3RvIGNsZWFuX2RpcjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2NsZWFuX2RpcjpcbitcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShtbWRpcik7XG4rXG4rY2xlYW5fcGFnZV9hbGxvY19jYWNoZTpcbitcdGttZW1fY2FjaGVfZGVzdHJveShwYWdlX2FsbG9jX2NhY2hlKTtcbitcbitjbGVhbl9yZXFfYWxsb2NfY2FjaGU6XG4rXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocmVxX2FsbG9jX2NhY2hlKTtcbitcbitlcnJvcl9leGl0OlxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19leGl0IHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfZXhpdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBwYWdlX2FsbG9jICpwYTtcbitcdHVuc2lnbmVkIGxvbmcgaWR4O1xuK1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2YWxsb2NzX3hhLCBpZHgsIHBhKVxuK1x0XHRmcmVlX2FsbG9jX2hlbHBlcihpZHgpO1xuK1xuK1x0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG1tZGlyKTtcbitcdGttZW1fY2FjaGVfZGVzdHJveShyZXFfYWxsb2NfY2FjaGUpO1xuK1x0a21lbV9jYWNoZV9kZXN0cm95KHBhZ2VfYWxsb2NfY2FjaGUpO1xuK31cbitcbittb2R1bGVfaW5pdChwYWdlX2FsbG9jX2hvZ2dlcl9kZWJ1Z2ZzX2luaXQpO1xuK21vZHVsZV9leGl0KHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfZXhpdCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkp1YW4gWWVzY2FzXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIk1vZHVsZSB0byBhbGxvYyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmVcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjowNDo1Ni45NTIwMjc5NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTYxNzAzNjQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBOZXcgRGVidWdmcyBQYWdlIEFsbG9jYXRvciBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlYnVnZnMgaW50ZXJmYWNlLCBgbW0vcGFnZV9hbGxvY19ob2dnZXIuY2AsIHdoaWNoIHNlZW1zIGRlc2lnbmVkIGZvciBhbGxvY2F0aW5nIHBhZ2VzIHdpdGggc3BlY2lmaWMgcGFyYW1ldGVyczogbm9kZSwgem9uZSwgbWlncmF0ZSB0eXBlLCBhbmQgb3JkZXIuIFRoZSBuZXcgY29uZmlnIGlzIGBQQUdFQUxMT0NfSE9HR0VSYCwgYW5kIGl0IGRlcGVuZHMgb24gYERFQlVHX0ZTYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIERlYnVnZnMgaW50ZXJmYWNlcyBhcmUgYWx3YXlzIGludGVyZXN0aW5nIHRhcmdldHMsIGVzcGVjaWFsbHkgd2hlbiB0aGV5IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGlzIG9uZSBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSBpdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuIFRoZSBrZXkgaXMgdG8gc2VlIGlmIGl0J3MgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gSXQncyBhIHNvZnR3YXJlIGludGVyZmFjZSBzbyBubyBwaHlzaWNhbCBoYXJkd2FyZSBpcyBuZWVkZWQsIGFuZCBkZWJ1Z2ZzIGlzIGF2YWlsYWJsZSBpbiBRRU1VLCBzbyB0aGF0J3MgZ29vZC4gRnVuY3Rpb25hbGx5LCBpdCdzIGFkZGluZyBhIG5ldyBtb2R1bGUgYW5kIGZlYXR1cmUgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBkZWJ1Z2ZzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIG5ldyB1c2VyLXNwYWNlIGludGVyZmFjZSB0aGF0IGFsbG93cyB1cyB0byBhbGxvY2F0ZSBtZW1vcnkuIEZ1enppbmcgY291bGQgcmV2ZWFsIGJ1Z3MgaW4gdGhpcyBcImhvZ2dlclwiIG1vZHVsZSBpdHNlbGYsIG9yIGl0IG1pZ2h0IHRyaWdnZXIgaW50ZXJlc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHVuZGVyIHByZXNzdXJlLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJ3ZlIGlkZW50aWZpZWQ6IGBwYWdlX2FsbG9jX3JlYWRgLCBgbWFrZV9hbGxvY2AsIGBmcmVlX2FsbG9jX2hlbHBlcmAsIGByZXFfcGFnZV9hbGxvY193cml0ZWAsIGBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGVgLCBhbmQgYSBidW5jaCBvZiBkaXJlY3RvcnkgY3JlYXRpb24gZnVuY3Rpb25zLiBUaGUgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIGFwcGVhciB0byBiZSB0aGUgZmlsZSBvcGVyYXRpb25zOiBzcGVjaWZpY2FsbHksIGByZXFfcGFnZV9hbGxvY193cml0ZWAsIGBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGVgLCBhbmQgYHBhZ2VfYWxsb2NfcmVhZGAuXG5cblRoZSBjb25maWcgb3B0aW9ucyBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgUEFHRUFMTE9DX0hPR0dFUmAgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIGBERUJVR19GU2AuIExldCdzIHZlcmlmeSB0aG9zZSBmdW5jdGlvbnMgYWdhaW4uIFllcCwgYHJlcV9wYWdlX2FsbG9jX3dyaXRlYCwgYGZyZWVfcGFnZV9hbGxvY193cml0ZWAsIGFuZCBgcGFnZV9hbGxvY19yZWFkYCBhcmUgZGVmaW5pdGVseSB0aGUgdGFyZ2V0cy4gSSdtIHJlYWR5IHRvIGRvY3VtZW50IG15IGZpbmRpbmdzLlxuXG5CYXNlZCBvbiB0aGUgaW52ZXN0aWdhdGlvbiwgSSdtIHNldHRpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgdG8gYHRydWVgLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGByZXFfcGFnZV9hbGxvY193cml0ZWAsIGBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGVgLCBhbmQgYHBhZ2VfYWxsb2NfcmVhZGAuIFRoZSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgUEFHRUFMTE9DX0hPR0dFUmAgYW5kIGBERUJVR19GU2AuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IGFsbG9jYXRlcyBwYWdlcywgd2hpY2ggd2UgY2FuIHVzZSB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbmQgYnVncyBpbiB0aGUgaG9nZ2VyIGl0c2VsZiBvciB0cmlnZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy5cblxuSSdsbCBkb3VibGUgY2hlY2sgdGhhdCBgREVCVUdfRlNgIGlzIGVpdGhlciBlbmFibGVkIGJ5IGRlZmF1bHQgb3Igd2UgbmVlZCB0byBlbmFibGUgaXQsIEknbGwgaW5jbHVkZSBpdCB0byBiZSBzYWZlLiBJdCBkZXBlbmRzIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMuIFllcywgYW5kIGl0J3Mgc2FmZSB0byBpbmNsdWRlLiBJIGNoZWNrZWQgYG1tL0tjb25maWcuZGVidWdgIGFuZCBjb25maXJtZWQgdGhhdCBgUEFHRUFMTE9DX0hPR0dFUmAgZGVwZW5kcyBvbiBgREVCVUdfRlNgLlxuXG5JIHNlZSB0aGF0IGBtYWtlX2FsbG9jYCBhbmQgYGZyZWVfYWxsb2NfaGVscGVyYCBhcmUgY2FsbGVkIGZyb20gdGhlIHByaW1hcnkgd3JpdGUgZnVuY3Rpb25zLCBidXQgdGhhdCdzIGZpbmUuIGByZXFfcGFnZV9hbGxvY193cml0ZWAgYW5kIGBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGVgIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIGJ1dCBgcGFnZV9hbGxvY19yZWFkYCBpcyBhbHNvIGFuIGVudHJ5IHBvaW50LCBldmVuIGlmIGl0IGp1c3QgcmV0dXJucyAwLlxuXG5XYWl0LCBsb29raW5nIGNsb3NlciwgYHJlcV9wYWdlX2FsbG9jX3dyaXRlYCBpcyBtYXJrZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIE5vdywgdGhlIHByb21wdCBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIGJ1dCBpbiB0aGlzIGNhc2UsIGl0cyBhZGRyZXNzIGlzIHRha2VuIGJlY2F1c2UgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0LlxuYGBgY1xuc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVxX3BhZ2VfYWxsb2NfZm9wcyA9IHtcblx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5cdC5vcGVuID0gc2ltcGxlX29wZW4sXG5cdC53cml0ZSA9IHJlcV9wYWdlX2FsbG9jX3dyaXRlLFxufTtcbmBgYFxuU28sIGl0J3MgZmluZSB0byBsaXN0IGl0LiBJdCB3b24ndCBiZSBpbmxpbmVkLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgUEFHRUFMTE9DX0hPR0dFUmAgaXMgdGhlIG9ubHkgbmV3IG9uZS5cblxuSSdtIHJlYWR5IHRvIGNhbGwgc2V0LXJlc3VsdHMgYW5kIGRvY3VtZW50IHRoaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NjIsIk91dHB1dFRva2VucyI6MTA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjA1OjA4LjU2OTA2NjEyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1NDE3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VBTExPQ19IT0dHRVJcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxX3BhZ2VfYWxsb2Nfd3JpdGVcIixcbiAgICBcImZyZWVfcGFnZV9hbGxvY193cml0ZVwiLFxuICAgIFwicGFnZV9hbGxvY19yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgYWxsb2NhdGluZyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUuIEZ1enppbmcgdGhpcyBpbnRlcmZhY2UgY2FuIGhlbHAgdW5jb3ZlciBidWdzIGluIHRoZSBob2dnZXIgaXRzZWxmIG9yIHRyaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VBTExPQ19IT0dHRVJcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxX3BhZ2VfYWxsb2Nfd3JpdGVcIixcbiAgICBcImZyZWVfcGFnZV9hbGxvY193cml0ZVwiLFxuICAgIFwicGFnZV9hbGxvY19yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgYWxsb2NhdGluZyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUuIEZ1enppbmcgdGhpcyBpbnRlcmZhY2UgY2FuIGhlbHAgdW5jb3ZlciBidWdzIGluIHRoZSBob2dnZXIgaXRzZWxmIG9yIHRyaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhkrtx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 01:19:59 +0000 UTC FinishedAt: 2026-08-06 02:05:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "86f436567f2516a0083b210bedc933544826a2c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGEALLOC_HOGGER", "DEBUG_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "86f436567f2516a0083b210bedc933544826a2c3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PAGEALLOC_HOGGER", "DEBUG_FS" ], "series_id": "08c3e24e-3a61-4899-97e3-42cbba6446b7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "req_page_alloc_write", "free_page_alloc_write", "page_alloc_read" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VBTExPQ19IT0dHRVImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFfcGFnZV9hbGxvY193cml0ZSYjMzQ7LAogICAgJiMzNDtmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGFsbG9jYXRpbmcgcGFnZXMgdG8gZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlLiBGdXp6aW5nIHRoaXMgaW50ZXJmYWNlIGNhbiBoZWxwIHVuY292ZXIgYnVncyBpbiB0aGUgaG9nZ2VyIGl0c2VsZiBvciB0cmlnZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMjowNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA0M2EzNTI2NjNhZWRkNDIxNTNhZTQ0ZTE5NzM4ZDJjNzhjNWY0N2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDAyOjA0OjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcuZGVidWcgYi9tbS9LY29uZmlnLmRlYnVnXG5pbmRleCA3NjM4ZDc1YjI3ZGI4Li5iYWQ4YTYwNjE1MmMzIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZy5kZWJ1Z1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vS2NvbmZpZy5kZWJ1Z1xuQEAgLTMwOSwzICYjNDM7MzA5LDE1IEBAIGNvbmZpZyBQRVJfVk1BX0xPQ0tfU1RBVFNcbiBcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cbiBcbiBcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuJiM0MztcbiYjNDM7Y29uZmlnIFBBR0VBTExPQ19IT0dHRVJcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtBbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZXMgYW5kIG9yZGVyc1wmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gREVCVUdfRlNcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTYXkgWSB0byBhbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZSBhbmRcbiYjNDM7XHQgIG9yZGVycyB1c2luZyB0aGUgZGVidWcgZnMgZmlsZXN5c3RlbS4gVGhpcyBoZWxwcyB0byBnZW5lcmF0ZSBtZW1vcnlcbiYjNDM7XHQgIHByZXNzdXJlIGVhc2lseS4gVGhpcyBpcyB1c2VmdWwgdG8gZGVidWcgbWVtb3J5IHJlY2xhaW1zIGlzc3VlcyxcbiYjNDM7XHQgIE9PTSB0cmlnZ2VycywgcGFnZSBtaWdyYXRpb24gaXNzdWVzLCBldGMuXG4mIzQzO1xuJiM0MztcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuJiM0MztcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCAyZDA1NzBhMTZlNWJlLi5iNDhmMmFjNmVlODA4IDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlXG5AQCAtMTMzLDYgJiM0MzsxMzMsNyBAQCBvYmotJChDT05GSUdfSURMRV9QQUdFX1RSQUNLSU5HKSAmIzQzOz0gcGFnZV9pZGxlLm9cbiBvYmotJChDT05GSUdfREVCVUdfUEFHRUFMTE9DKSAmIzQzOz0gZGVidWdfcGFnZV9hbGxvYy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYub1xuIG9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGRhbW9uL1xuJiM0MztvYmotJChDT05GSUdfUEFHRUFMTE9DX0hPR0dFUikgJiM0Mzs9IHBhZ2VfYWxsb2NfaG9nZ2VyLm9cbiBvYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4gb2JqLSQoQ09ORklHX1BFUkNQVV9TVEFUUykgJiM0Mzs9IHBlcmNwdS1zdGF0cy5vXG4gb2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSAmIzQzOz0gbWVtcmVtYXAub1xuZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2NfaG9nZ2VyLmMgYi9tbS9wYWdlX2FsbG9jX2hvZ2dlci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNzJjMDUwNWE2ZjVhN1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9hbGxvY19ob2dnZXIuY1xuQEAgLTAsMCAmIzQzOzEsNjEwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIFBhZ2UgYWxsb2NhdG9yIERlYnVnRlMgSW50ZXJmYWNlXG4mIzQzOyAqIEF1dGhvcjogSnVhbiBZZXNjYXMgXHUwMDNjanllc2Nhc0Bnb29nbGUuY29tXHUwMDNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgbW9kdWxlIGFsbG93cyB0byBtYWtlIHBhZ2UgYWxsb2NzIHBlciBub2RlLCB6b25lLCBtaWdyYXRlIHR5cGVcbiYjNDM7ICogYW5kIG9yZGVyIHVzaW5nIHRoZSBEZWJ1Z0ZTIGZpbGVzeXN0ZW0uXG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gdGhpcyBtb2R1bGUgaXMgaW5zdGFsbGVkIGFuZCB0aGUgZGVidWdmcyBpcyBtb3VudGVkLCB0aGUgXCYjMzQ7bW1cJiMzNDsgZGlyZWN0b3J5XG4mIzQzOyAqIHdpbGwgYmUgY3JlYXRlZCBpbiBcdTAwM2NkZWJ1Z2ZzIG1vdW50IHBvaW50XHUwMDNlL21tXCYjMzQ7IGRpcmVjdG9yeS4gVW5kZXIgdGhpcyBkaXJlY3RvcnksXG4mIzQzOyAqIHRoZXJlIHdpbGwgYmUgc3ViZGlycyB0byBzZWxlY3QgdGhlIG5vZGVzLCB6b25lcywgb3JkZXJzIGFuZCBtaWdyYXRlIHR5cGUuXG4mIzQzOyAqXG4mIzQzOyAqIEZvciBleGFtcGxlOlxuJiM0MzsgKlxuJiM0MzsgKiAgICAgIC9zeXMva2VybmVsL2RlYnVnL21tL1xuJiM0MzsgKiAgICAgIHwtLSBmcmVlXG4mIzQzOyAqICAgICAgYC0tIG5vZGUtMFxuJiM0MzsgKiAgICAgICAgIHwtLSB6b25lLURNQVxuJiM0MzsgKiAgICAgICAgIHwgICB8LS0gb3JkZXItMFxuJiM0MzsgKiAgICAgICAgIHwgICB8ICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xuJiM0MzsgKiAgICAgICAgIHwgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqICAgICAgICAgfCAgIHwgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZVxuJiM0MzsgKiAgICAgICAgIHwgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICB8ICAgfCAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxuJiM0MzsgKiAgICAgICAgIHwgICB8ICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICB8ICAgfC0tIC4uLlxuJiM0MzsgKiAgICAgICAgIHwgICB8XG4mIzQzOyAqICAgICAgICAgfCAgIGAtLSBvcmRlci05XG4mIzQzOyAqICAgICAgICAgfCAgICAgICB8LS0gbWlncmF0ZS1IaWdoQXRvbWljXG4mIzQzOyAqICAgICAgICAgfCAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuJiM0MzsgKiAgICAgICAgIHwgICAgICAgfC0tIG1pZ3JhdGUtTW92YWJsZVxuJiM0MzsgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICB8ICAgICAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlXG4mIzQzOyAqICAgICAgICAgfCAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuJiM0MzsgKiAgICAgICAgIHwgICAgICAgYC0tIG1pZ3JhdGUtVW5tb3ZhYmxlXG4mIzQzOyAqICAgICAgICAgfCAgICAgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuJiM0MzsgKiAgICAgICAgIGAtLSB6b25lLU5vcm1hbFxuJiM0MzsgKiAgICAgICAgICAgICB8LS0gb3JkZXItMFxuJiM0MzsgKiAgICAgICAgICAgICB8ICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xuJiM0MzsgKiAgICAgICAgICAgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgfCAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbiYjNDM7ICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqICAgICAgICAgICAgIHwgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZVxuJiM0MzsgKiAgICAgICAgICAgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgfCAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxuJiM0MzsgKiAgICAgICAgICAgICB8ICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgfC0tIC4uLi5cbiYjNDM7ICogICAgICAgICAgICAgfFxuJiM0MzsgKiAgICAgICAgICAgICBgLS0gb3JkZXItOVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xuJiM0MzsgKiAgICAgICAgICAgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgICAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbiYjNDM7ICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqICAgICAgICAgICAgICAgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICogICAgICAgICAgICAgICAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3NcbiYjNDM7ICpcbiYjNDM7ICogVXNhZ2U6XG4mIzQzOyAqXG4mIzQzOyAqIDEuIFRvIHRyaWdnZXIgdGhlIGFsbG9jYXRpb24sIG5hdmlnYXRlIHRvIHRoZSBkZWJ1Z2ZzIHBhdGggY29ycmVzcG9uZGluZ1xuJiM0MzsgKiAgICB0byB5b3VyIHRhcmdldCBub2RlLCBtZW1vcnkgem9uZSwgYWxsb2NhdGlvbiBvcmRlciwgYW5kIG1pZ3JhdGlvbiB0eXBlLFxuJiM0MzsgKiAgICB0aGVuIHdyaXRlIHRoZSByZXF1ZXN0ZWQgYWxsb2NhdGlvbiBjb3VudCB0byBucl9wYWdlc19hbGxvY3MuXG4mIzQzOyAqXG4mIzQzOyAqICAgIEZvciBleGFtcGxlLCB0byBtYWtlIDMgYWxsb2NzIG9mIG9yZGVyIDksIE1pZ3JhdGUgVHlwZSBNb3ZhYmxlLFxuJiM0MzsgKiAgICBab25lIE5vcm1hbCBhbmQgTm9kZSAwLCBydW46XG4mIzQzOyAqXG4mIzQzOyAqICAgICQgZWNobyAzIFx1MDAzZSAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9ub2RlLTAvem9uZS1Ob3JtYWwvb3JkZXItOS9taWdyYXRlLU1vdmFibGUvbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqXG4mIzQzOyAqIDIuIEZvciBlYWNoIGFsbG9jYXRpb24gY3JlYXRlZCwgYSBjb3JyZXNwb25kaW5nIGZpbGUgbmFtZWQgc2VxdWVudGlhbGx5XG4mIzQzOyAqICAgICgxLCAyLCBuKSB3aWxsIGFwcGVhciBpbiB0aGF0IGRpcmVjdG9yeS5cbiYjNDM7ICpcbiYjNDM7ICogICAgJCBscyAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9ub2RlLTAvem9uZS1Ob3JtYWwvb3JkZXItOS9taWdyYXRlLU1vdmFibGUvXG4mIzQzOyAqICAgIDEgICAyICAgMyAgbnJfcGFnZXNfYWxsb2NzXG4mIzQzOyAqXG4mIzQzOyAqIDMuIFRvIGZyZWUgdGhlIGFsbG9jYXRpb24sIHdyaXRlIHRoZSBhbGxvY2F0aW9uIGZpbGUgbmFtZSBpbiAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9mcmVlLlxuJiM0MzsgKiAgICBGb3IgZXhhbXBsZSwgdG8gcmVsZWFzZSB0aGUgMm5kIGFsbG9jYXRpb24gcnVuOlxuJiM0MzsgKlxuJiM0MzsgKiAgICAkIGVjaG8gMiBcdTAwM2UgL3N5cy9rZXJuZWwvZGVidWcvbW0vZnJlZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCYjMzQ7OiBcJiMzNDsgZm10XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnBfdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXpvbmUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub2RlbWFzay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZW50cnkgKm1tZGlyO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGF0b21pY19sb25nX3QgYWxsb2NzX2ZpbGVfc2VxIC0gUmVwcmVzZW50cyB0aGUgbmFtaW5nIHNlcXVlbmNlIHVzZWQgZm9yXG4mIzQzOyAqIGFsbG9jYXRpb24gZmlsZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYXRvbWljX2xvbmdfdCBhbGxvY3NfZmlsZV9zZXEgPSBBVE9NSUNfSU5JVCgwKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBhbGxvY3NfeGEgLSBSZXByZXNlbnQgdGhlIHhhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBhY3R1YWwgYWxsb2NhdGlvbnMgcGVyZm9ybVxuJiM0MzsgKiBieSB0aGlzIGRyaXZlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZKGFsbG9jc194YSk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJlcV9hbGxvYyAtIFJlcHJlc2VudHMgdGhlIHJlcXVlc3RlZCBhbGxvY2F0aW9uXG4mIzQzOyAqIEBub2RlX2lkeDogVGhlIE5vZGUgaW5kZXggdG8gYWxsb2NhdGUgZnJvbS5cbiYjNDM7ICogQHpvbmVfaWR4OiBUaGUgWm9uZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLlxuJiM0MzsgKiBAb3JkZXI6IFRoZSBPcmRlciBvZiBwYWdlcyB0byBhbGxvY2F0ZS5cbiYjNDM7ICogQG1pZ3JhdGVfdHlwZTogVGhlIE1pZ3JhdGUgdHlwZSB0byBhbGxvY2F0ZSBmcm9tLlxuJiM0MzsgKiBAcGFyZW50ZGlyOiBUaGUgcGFyZW50IGRpciB3aGVyZSB0aGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGFsbG9jIHdhcyBjcmVhdGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJlcV9hbGxvYyB7XG4mIzQzO1x0aW50IG5vZGVfaWR4O1xuJiM0MztcdGludCB6b25lX2lkeDtcbiYjNDM7XHRpbnQgb3JkZXI7XG4mIzQzO1x0aW50IG1pZ3JhdGVfdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpwYXJlbnRkaXI7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBhZ2VfYWxsb2MgLSBSZXByZXNlbnRzIHRoZSBwYWdlIGFsbG9jYXRpb24uXG4mIzQzOyAqIEBwYWdlOiBUaGUgcG9pbnRlciB0byB0aGUgcGFnZShzKSBhbGxvY2F0ZWQuXG4mIzQzOyAqIEByZXFfYWxsb2M6IFRoZSBkZXRhaWxzIG9mIHRoZSBhbGxvY2F0aW9uLlxuJiM0MzsgKiBAYWxsb2NfZGVudHJ5OiBUaGUgcG9pbnRlciB0byB0aGUgZmlsZSB0aGF0IHJlcHJlc2VudHMgdGhlIGFsbG9jYXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGFnZV9hbGxvYyB7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4mIzQzO1x0c3RydWN0IHJlcV9hbGxvYyAqcmVxX2FsbG9jO1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKmFsbG9jX2RlbnRyeTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmVxX2FsbG9jX2NhY2hlO1xuJiM0MztzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBhZ2VfYWxsb2NfY2FjaGU7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfdG9fYWxsb2NfZnJvbShpbnQgem9uZV9pZHgsIGdmcF90ICpmbGFnc19wdHIpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKHpvbmVfaWR4KSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfWk9ORV9ETUFcbiYjNDM7XHRjYXNlIFpPTkVfRE1BOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ETUE7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfWk9ORV9ETUEzMlxuJiM0MztcdGNhc2UgWk9ORV9ETUEzMjpcbiYjNDM7XHRcdCpmbGFnc19wdHIgfD0gX19HRlBfRE1BMzI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfSElHSE1FTVxuJiM0MztcdGNhc2UgWk9ORV9ISUdITUVNOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdITUVNO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGNhc2UgWk9ORV9NT1ZBQkxFOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9NT1ZBQkxFO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBaT05FX05PUk1BTDpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X21pZ3JhdGVfdHlwZV90b19hbGxvY19mcm9tKGludCBtaWdyYXRlX3R5cGUsIGdmcF90ICpmbGFnc19wdHIpXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKG1pZ3JhdGVfdHlwZSkge1xuJiM0MztcdGNhc2UgTUlHUkFURV9VTk1PVkFCTEU6XG4mIzQzO1x0XHQqZmxhZ3NfcHRyIFx1MDAyNj0gfihfX0dGUF9SRUNMQUlNQUJMRSB8IF9fR0ZQX01PVkFCTEUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNSUdSQVRFX1JFQ0xBSU1BQkxFOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9SRUNMQUlNQUJMRTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUlHUkFURV9ISUdIQVRPTUlDOlxuJiM0MztcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdIO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBNSUdSQVRFX01PVkFCTEU6IGRlZmF1bHQ6XG4mIzQzO1x0XHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX01PVkFCTEU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBhZ2VfYWxsb2NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsXG4mIzQzO1x0XHRcdFx0ICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcbiYjNDM7e1xuJiM0MztcdC8qICBXaGljaCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJpbnQgYWJvdXQgdGhlIHBhZ2Ugb3IgYWxsb2NhdGlvbj8gKi9cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9hbGxvY19mb3BzID0ge1xuJiM0MztcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuJiM0MztcdC5vcGVuID0gc2ltcGxlX29wZW4sXG4mIzQzO1x0LnJlYWQgPSBwYWdlX2FsbG9jX3JlYWQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG1ha2VfYWxsb2Moc3RydWN0IHJlcV9hbGxvYyAqcmVxLFxuJiM0MztcdFx0XHQgICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmFsbG9jX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcdGNoYXIgbmV3X2FsbG9jX25hbWVbMjBdO1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm5ld19hbGxvY19kZW50cnk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKHJlcS1cdTAwM2Vub2RlX2lkeCwgZmxhZ3MsIHJlcS1cdTAwM2VvcmRlcik7XG4mIzQzO1x0aWYgKHBhZ2UpIHtcbiYjNDM7XHRcdHBhID0ga21lbV9jYWNoZV9hbGxvYyhwYWdlX2FsbG9jX2NhY2hlLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghcGEpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0Z290byBmcmVlX3BhZ2VzO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdCphbGxvY19pZCA9IGF0b21pY19sb25nX2luY19yZXR1cm4oXHUwMDI2YWxsb2NzX2ZpbGVfc2VxKTtcbiYjNDM7XHRcdHNucHJpbnRmKG5ld19hbGxvY19uYW1lLCBzaXplb2YobmV3X2FsbG9jX25hbWUpLCBcJiMzNDslbHVcJiMzNDssXG4mIzQzO1x0XHRcdCAqYWxsb2NfaWQpO1xuJiM0MztcbiYjNDM7XHRcdG5ld19hbGxvY19kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFxuJiM0MztcdFx0XHRuZXdfYWxsb2NfbmFtZSwgMDQwMCwgcmVxLVx1MDAzZXBhcmVudGRpcixcbiYjNDM7XHRcdFx0cGEsIFx1MDAyNnBhZ2VfYWxsb2NfZm9wcyk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG5ld19hbGxvY19kZW50cnkpKSB7XG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIobmV3X2FsbG9jX2RlbnRyeSk7XG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9wYWdlX2FsbG9jO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBhLVx1MDAzZXJlcV9hbGxvYyA9IHJlcTtcbiYjNDM7XHRcdHBhLVx1MDAzZXBhZ2UgPSBwYWdlO1xuJiM0MztcdFx0cGEtXHUwMDNlYWxsb2NfZGVudHJ5ID0gbmV3X2FsbG9jX2RlbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB4YV9pbnNlcnQoXHUwMDI2YWxsb2NzX3hhLCAqYWxsb2NfaWQsIHBhLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVtb3ZlX2FsbG9jX2RlbnRyeTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JlbW92ZV9hbGxvY19kZW50cnk6XG4mIzQzO1x0ZGVidWdmc19yZW1vdmUobmV3X2FsbG9jX2RlbnRyeSk7XG4mIzQzO1xuJiM0MztmcmVlX3BhZ2VfYWxsb2M6XG4mIzQzO1x0a21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTtcbiYjNDM7XG4mIzQzO2ZyZWVfcGFnZXM6XG4mIzQzO1x0X19mcmVlX3BhZ2VzKHBhZ2UsIHJlcS1cdTAwM2VvcmRlcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZnJlZV9hbGxvY19oZWxwZXIodW5zaWduZWQgbG9uZyBhbGxvY19pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlX2FsbG9jICpwYTtcbiYjNDM7XG4mIzQzO1x0cGEgPSB4YV9lcmFzZShcdTAwMjZhbGxvY3NfeGEsIGFsbG9jX2lkKTtcbiYjNDM7XHRpZiAoIXBhKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7VGhlIGFsbG9jX2lkICVsdSB3YXMgbm90IGZvdW5kIVwmIzM0OywgYWxsb2NfaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX2ZyZWVfcGFnZXMocGEtXHUwMDNlcGFnZSwgcGEtXHUwMDNlcmVxX2FsbG9jLVx1MDAzZW9yZGVyKTtcbiYjNDM7XHRkZWJ1Z2ZzX3JlbW92ZShwYS1cdTAwM2VhbGxvY19kZW50cnkpO1xuJiM0MztcdGttZW1fY2FjaGVfZnJlZShwYWdlX2FsbG9jX2NhY2hlLCBwYSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcmVxX3BhZ2VfYWxsb2Nfd3JpdGUoKSAtIEFsbG9jYXRlcyB0aGUgcGFnZXMgb24gdGhlIHJlcXVlc3RlZCBub2RlLCB6b25lLFxuJiM0MzsgKiBvcmRlciBhbmQgbWlncmF0ZSB0eXBlLiBPbmNlIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCwgYSBmaWxlIGlzIGNyZWF0ZWRcbiYjNDM7ICogdG8gZnJlZSB0aGUgYWxsb2NhdGlvbiBsYXRlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzc2l6ZV90IHJlcV9wYWdlX2FsbG9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZXFfYWxsb2MgKnJlcSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBucl9wYWdlc19hbGxvY3M7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyAqYWxsb2NzX2lkcztcbiYjNDM7XHRnZnBfdCBmbGFncyA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNudCwgMTAsIFx1MDAyNm5yX3BhZ2VzX2FsbG9jcyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGFsbG9jc19pZHMgPSBrbWFsbG9jX2FycmF5KG5yX3BhZ2VzX2FsbG9jcywgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLFxuJiM0MztcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFhbGxvY3NfaWRzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHNldF96b25lX3RvX2FsbG9jX2Zyb20ocmVxLVx1MDAzZXpvbmVfaWR4LCBcdTAwMjZmbGFncyk7XG4mIzQzO1x0c2V0X21pZ3JhdGVfdHlwZV90b19hbGxvY19mcm9tKHJlcS1cdTAwM2VtaWdyYXRlX3R5cGUsIFx1MDAyNmZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXNfYWxsb2NzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmV0ID0gbWFrZV9hbGxvYyhyZXEsIGZsYWdzLCBcdTAwMjZhbGxvY19pZCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGZyZWVfYWxsb2NzO1xuJiM0MztcbiYjNDM7XHRcdGFsbG9jc19pZHNbaV0gPSBhbGxvY19pZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKGFsbG9jc19pZHMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gY250O1xuJiM0MztcbiYjNDM7ZnJlZV9hbGxvY3M6XG4mIzQzO1x0LyogRnJlZSBhbGwgdGhlIHBhZ2VzIGFuZCByZXNvdXJjZXMgcHJldmlvdXNseSBhbGxvY2F0ZWQuICovXG4mIzQzO1x0Zm9yIChpbnQgaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgcmV0MiA9IGZyZWVfYWxsb2NfaGVscGVyKGFsbG9jc19pZHNbal0pO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZXQyKVxuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7VW5hYmxlIHRvIGZyZWUgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIGZpbGUgJWx1XCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICAgYWxsb2NzX2lkc1tqXSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShhbGxvY3NfaWRzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVxX3BhZ2VfYWxsb2NfZm9wcyA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuJiM0MztcdC53cml0ZSA9IHJlcV9wYWdlX2FsbG9jX3dyaXRlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGZyZWVfcGFnZV9hbGxvY193cml0ZSgpIC0gZnJlZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgcGFnZXMuXG4mIzQzOyAqIEBmaWxlOiBGaWxlIHdoZXJlIHRoZSB1c2VyIGlzIHdyaXRpbmcuXG4mIzQzOyAqIEB1YnVmOiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGUgdXNlciB3YW50cyB0byBkZWxldGUgYW5kIGhhdmUgdGhlXG4mIzQzOyAqICAgICAgIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhhdCBmaWxlIGZyZWVkLlxuJiM0MzsgKiBAY250OiBTaXplIG9mIEB1YnVmLlxuJiM0MzsgKiBAcHBvczogQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzc2l6ZV90IGZyZWVfcGFnZV9hbGxvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCxcbiYjNDM7XHRcdFx0XHQgICAgICBsb2ZmX3QgKnBwb3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1YnVmLCBjbnQsIDEwLCBcdTAwMjZhbGxvY19pZCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGZyZWVfYWxsb2NfaGVscGVyKGFsbG9jX2lkKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNudDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnJlZV9wYWdlX2FsbG9jX2ZvcHMgPSB7XG4mIzQzO1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4mIzQzO1x0LndyaXRlID0gZnJlZV9wYWdlX2FsbG9jX3dyaXRlLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZSgpIC0gQ3JlYXRlcyB0aGUgZmlsZSBcJiMzNDtucl9wYWdlc19hbGxvY3NcJiMzNDsuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBcJiMzNDtucl9wYWdlc19hbGxvY3NcJiMzNDsgZmlsZSB3aWxsIGJlIHVzZWQgdG8gd3JpdGUgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9uc1xuJiM0MzsgKiB0aGF0IHdpbGwgYmUgcGVyZm9ybWVkLiBXaGVuIHRoZSBhbGxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkLCBhIG5ldyBmaWxlIGZvclxuJiM0MzsgKiBlYWNoIGFsbG9jYXRpb24gd2lsbCBiZSBjcmVhdGVkIGluIEBtaWdyYXRlZGlyLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgY3JlYXRlX25yX3BhZ2VzX2FsbG9jc19maWxlKHN0cnVjdCBkZW50cnkgKm1pZ3JhdGVkaXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBpbnQgbmlkLCBpbnQgem9uZV9pZHgsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBpbnQgb3JkZXIsIGludCBtdHlwZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByZXFfYWxsb2MgKnJlcTtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpucl9wYWdlcztcbiYjNDM7XG4mIzQzO1x0cmVxID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfYWxsb2NfY2FjaGUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmVxKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBucl9wYWdlc19hbGxvY3NfaW5mb1wmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlcS1cdTAwM2Vub2RlX2lkeCA9IG5pZDtcbiYjNDM7XHRyZXEtXHUwMDNlem9uZV9pZHggPSB6b25lX2lkeDtcbiYjNDM7XHRyZXEtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbiYjNDM7XHRyZXEtXHUwMDNlbWlncmF0ZV90eXBlID0gbXR5cGU7XG4mIzQzO1x0cmVxLVx1MDAzZXBhcmVudGRpciA9IG1pZ3JhdGVkaXI7XG4mIzQzO1xuJiM0MztcdG5yX3BhZ2VzID0gZGVidWdmc19jcmVhdGVfZmlsZShcJiMzNDtucl9wYWdlc19hbGxvY3NcJiMzNDssIDAyMDAsIG1pZ3JhdGVkaXIsIHJlcSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2cmVxX3BhZ2VfYWxsb2NfZm9wcyk7XG4mIzQzO1x0aWYgKElTX0VSUihucl9wYWdlcykpIHtcbiYjNDM7XHRcdGttZW1fY2FjaGVfZnJlZShyZXFfYWxsb2NfY2FjaGUsIHJlcSk7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihucl9wYWdlcyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBtaWdyYXRlIHR5cGVcbiYjNDM7ICogaW5zaWRlIHRoZSBvcmRlciBkaXJlY3RvcnkuIE9uY2UgdGhlIG1pZ3JhdGUgdHlwZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXRcbiYjNDM7ICogY3JlYXRlcyB0aGUgXCYjMzQ7bnJfcGFnZXNfYWxsb2NzXCYjMzQ7IGZpbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbWlncmF0ZV90eXBlX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqb3JkZXJkaXIsIGludCBuaWQsXG4mIzQzO1x0XHRcdFx0XHRpbnQgem9uZV9pZHgsIGludCBvcmRlcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm1pZ3JhdGVkaXI7XG4mIzQzO1x0Y2hhciBkaXJuYW1lWzI0XTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBtdHlwZSA9IDA7IG10eXBlIFx1MDAzYyBNSUdSQVRFX1RZUEVTOyBtdHlwZSYjNDM7JiM0MzspIHtcbiYjNDM7I2lmZGVmIENPTkZJR19DTUFcbiYjNDM7XHRcdGlmIChtdHlwZSA9PSBNSUdSQVRFX0NNQSkgLyogQ01BIGFsbG9jcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxuJiM0MztcdFx0aWYgKG10eXBlID09IE1JR1JBVEVfSVNPTEFURSkgLyogY2FuJiMzOTt0IGFsbG9jYXRlIGZyb20gaGVyZSAqL1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0XHRpZiAoem9uZV9pZHggPT0gWk9ORV9NT1ZBQkxFIFx1MDAyNlx1MDAyNiBtdHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdHNucHJpbnRmKGRpcm5hbWUsIHNpemVvZihkaXJuYW1lKSwgXCYjMzQ7bWlncmF0ZS0lc1wmIzM0OyxcbiYjNDM7XHRcdFx0IG1pZ3JhdGV0eXBlX25hbWVzW210eXBlXSk7XG4mIzQzO1x0XHRtaWdyYXRlZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG9yZGVyZGlyKTtcbiYjNDM7XHRcdGlmIChJU19FUlIobWlncmF0ZWRpcikpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKG1pZ3JhdGVkaXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZShtaWdyYXRlZGlyLCBuaWQsIHpvbmVfaWR4LFxuJiM0MztcdFx0XHRcdFx0XHRvcmRlciwgbXR5cGUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggcGFnZSBvcmRlciBpbnNpZGVcbiYjNDM7ICogdGhlIHpvbmUgZGlyZWN0b3J5LiBPbmNlIHRoYXQgdGhlIHBhZ2Ugb3JkZXIgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIGl0IGNyZWF0ZXNcbiYjNDM7ICogYSBkaXJlY3RvcnkgZm9yIGVhY2ggbWlncmF0ZSB0eXBlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBpbnQgY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqem9uZWRpciwgaW50IG5pZCxcbiYjNDM7XHRcdFx0XHRcdGludCB6b25lX2lkeClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm9yZGVyZGlyO1xuJiM0MztcdGNoYXIgZGlybmFtZVsxMl07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgb3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgTlJfUEFHRV9PUkRFUlM7IG9yZGVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcJiMzNDtvcmRlci0lZFwmIzM0Oywgb3JkZXIpO1xuJiM0MztcdFx0b3JkZXJkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgem9uZWRpcik7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKG9yZGVyZGlyKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIob3JkZXJkaXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycyhvcmRlcmRpciwgbmlkLCB6b25lX2lkeCxcbiYjNDM7XHRcdFx0XHRcdFx0b3JkZXIpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY3JlYXRlX3pvbmVzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggcG9wdWxhdGVkIHpvbmUgaW4gdGhlXG4mIzQzOyAqIG5vZGUuIE9uY2UgdGhhdCB0aGUgem9uZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBmb3JcbiYjNDM7ICogZWFjaCBvcmRlciBzdXBwb3J0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGU6IFpPTkVfREVWSUNFIHBhZ2VzIHdvbiYjMzk7dCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhpcyBkcml2ZXIuIFRoZSBtYWluIHJlYXNvblxuJiM0MzsgKiBpcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBtYW5hZ2VkIGJ5IHRoZSBCdWRkeSBBbGxvY2F0b3Igb3IgQ01BIGFsbG9jYXRvci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV96b25lc19zdWJkaXJzKHN0cnVjdCBkZW50cnkgKm5vZGVkaXIsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSwgaW50IG5pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKnpvbmVkaXI7XG4mIzQzO1x0c3RydWN0IHpvbmUgKnpvbmU7XG4mIzQzO1x0c3RydWN0IHpvbmUgKm5vZGVfem9uZXMgPSBwZ2RhdGEtXHUwMDNlbm9kZV96b25lcztcbiYjNDM7XHRpbnQgem9uZV9pZHg7XG4mIzQzO1x0Y2hhciBkaXJuYW1lWzI0XTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmb3IgKHpvbmUgPSBub2RlX3pvbmVzLCB6b25lX2lkeCA9IDA7IHpvbmUgLSBub2RlX3pvbmVzIFx1MDAzYyBNQVhfTlJfWk9ORVM7XG4mIzQzO1x0XHRcdCYjNDM7JiM0Mzt6b25lLCAmIzQzOyYjNDM7em9uZV9pZHgpIHtcbiYjNDM7XHRcdGlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIFpPTkVfREVWSUNFIHBhZ2VzIHdvbiYjMzk7dCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhpcyBkcml2ZXIuICovXG4mIzQzO1x0XHRpZiAoem9uZV9pc196b25lX2RldmljZSh6b25lKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcJiMzNDt6b25lLSVzXCYjMzQ7LCB6b25lLVx1MDAzZW5hbWUpO1xuJiM0MztcdFx0em9uZWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1lLCBub2RlZGlyKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoem9uZWRpcikpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKHpvbmVkaXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKHpvbmVkaXIsIG5pZCwgem9uZV9pZHgpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY3JlYXRlX25vZGVzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggbm9kZSB0aGF0IGNvbnRhaW5zXG4mIzQzOyAqIG1lbW9yeS4gT25jZSB0aGF0IHRoZSBub2RlIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCBpdCBjcmVhdGVzIGEgZGlyZWN0b3J5IGZvclxuJiM0MzsgKiBlYWNoIHpvbmUgaW4gdGhlIG5vZGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbm9kZXNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICptbWRpcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKm5vZGVkaXI7XG4mIzQzO1x0Y2hhciBkaXJuYW1lWzEyXTtcbiYjNDM7XHRpbnQgbmlkO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuJiM0MztcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdGEgPSBOT0RFX0RBVEEobmlkKTtcbiYjNDM7XG4mIzQzO1x0XHRzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksIFwmIzM0O25vZGUtJWRcJiMzNDssIG5pZCk7XG4mIzQzO1x0XHRub2RlZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG1tZGlyKTtcbiYjNDM7XHRcdGlmIChJU19FUlIobm9kZWRpcikpXG4mIzQzO1x0XHRcdHJldHVybiBQVFJfRVJSKG5vZGVkaXIpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGNyZWF0ZV96b25lc19zdWJkaXJzKG5vZGVkaXIsIHBnZGF0YSwgbmlkKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgcGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpmcmVlX2ZpbGU7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmVxX2FsbG9jX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXG4mIzQzO1x0XHRcJiMzNDtyZXFfYWxsb2NfY2FjaGVcJiMzNDssIHNpemVvZihzdHJ1Y3QgcmVxX2FsbG9jKSwgMCxcbiYjNDM7XHRcdFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XG4mIzQzO1x0aWYgKCFyZXFfYWxsb2NfY2FjaGUpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtUaGUgcmVxX2FsbG9jX2NhY2hlIGNvdWxkbiYjMzk7dCBiZSBjcmVhdGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycm9yX2V4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwYWdlX2FsbG9jX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXG4mIzQzO1x0XHRcJiMzNDtwYWdlX2FsbG9jX2NhY2hlXCYjMzQ7LCBzaXplb2Yoc3RydWN0IHBhZ2VfYWxsb2MpLCAwLFxuJiM0MztcdFx0U0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTtcbiYjNDM7XHRpZiAoIXBhZ2VfYWxsb2NfY2FjaGUpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtUaGUgcGFnZV9hbGxvY19jYWNoZSBjb3VsZG4mIzM5O3QgYmUgY3JlYXRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBjbGVhbl9yZXFfYWxsb2NfY2FjaGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtbWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcJiMzNDttbVwmIzM0OywgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihtbWRpcikpIHtcbiYjNDM7XHRcdHByX2VycihcJiMzNDtVbmFibGUgdG8gY3JlYXRlIG1tIGRpcmVjdG9yeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKG1tZGlyKTtcbiYjNDM7XHRcdGdvdG8gY2xlYW5fcGFnZV9hbGxvY19jYWNoZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGNyZWF0ZV9ub2Rlc19zdWJkaXJzKG1tZGlyKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBjbGVhbl9kaXI7XG4mIzQzO1xuJiM0MztcdGZyZWVfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCYjMzQ7ZnJlZVwmIzM0OywgMDIwMCwgbW1kaXIsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZmcmVlX3BhZ2VfYWxsb2NfZm9wcyk7XG4mIzQzO1x0aWYgKElTX0VSUihmcmVlX2ZpbGUpKSB7XG4mIzQzO1x0XHRyZXQgPSBQVFJfRVJSKGZyZWVfZmlsZSk7XG4mIzQzO1x0XHRnb3RvIGNsZWFuX2RpcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y2xlYW5fZGlyOlxuJiM0MztcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShtbWRpcik7XG4mIzQzO1xuJiM0MztjbGVhbl9wYWdlX2FsbG9jX2NhY2hlOlxuJiM0MztcdGttZW1fY2FjaGVfZGVzdHJveShwYWdlX2FsbG9jX2NhY2hlKTtcbiYjNDM7XG4mIzQzO2NsZWFuX3JlcV9hbGxvY19jYWNoZTpcbiYjNDM7XHRrbWVtX2NhY2hlX2Rlc3Ryb3kocmVxX2FsbG9jX2NhY2hlKTtcbiYjNDM7XG4mIzQzO2Vycm9yX2V4aXQ6XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgX19leGl0IHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfZXhpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaWR4O1xuJiM0MztcbiYjNDM7XHR4YV9mb3JfZWFjaChcdTAwMjZhbGxvY3NfeGEsIGlkeCwgcGEpXG4mIzQzO1x0XHRmcmVlX2FsbG9jX2hlbHBlcihpZHgpO1xuJiM0MztcbiYjNDM7XHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobW1kaXIpO1xuJiM0MztcdGttZW1fY2FjaGVfZGVzdHJveShyZXFfYWxsb2NfY2FjaGUpO1xuJiM0MztcdGttZW1fY2FjaGVfZGVzdHJveShwYWdlX2FsbG9jX2NhY2hlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bW9kdWxlX2luaXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19pbml0KTtcbiYjNDM7bW9kdWxlX2V4aXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19leGl0KTtcbiYjNDM7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7SnVhbiBZZXNjYXNcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW9kdWxlIHRvIGFsbG9jIHBhZ2VzIHRvIGdlbmVyYXRlIG1lbW9yeSBwcmVzc3VyZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VBTExPQ19IT0dHRVImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFfcGFnZV9hbGxvY193cml0ZSYjMzQ7LAogICAgJiMzNDtmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGFsbG9jYXRpbmcgcGFnZXMgdG8gZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlLiBGdXp6aW5nIHRoaXMgaW50ZXJmYWNlIGNhbiBoZWxwIHVuY292ZXIgYnVncyBpbiB0aGUgaG9nZ2VyIGl0c2VsZiBvciB0cmlnZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0M2EzNTI2NjNhZWRkNDIxNTNhZTQ0ZTE5NzM4ZDJjNzhjNWY0N2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyA2IDAyOjA0OjUzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWcKaW5kZXggNzYzOGQ3NWIyN2RiOC4uYmFkOGE2MDYxNTJjMyAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZy5kZWJ1ZwomIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnLmRlYnVnCkBAIC0zMDksMyAmIzQzOzMwOSwxNSBAQCBjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTCiAJICBvdmVyaGVhZCBpbiB0aGUgcGFnZSBmYXVsdCBwYXRoLgogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiYjNDM7CiYjNDM7Y29uZmlnIFBBR0VBTExPQ19IT0dHRVIKJiM0MzsJdHJpc3RhdGUgJiMzNDtBbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZXMgYW5kIG9yZGVycyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gREVCVUdfRlMKJiM0MzsJaGVscAomIzQzOwkgIFNheSBZIHRvIGFsbG9jIHBhZ2VzIGZyb20gZGlmZmVyZW50IG5vZGVzLCB6b25lcywgbWlncmF0ZSB0eXBlIGFuZAomIzQzOwkgIG9yZGVycyB1c2luZyB0aGUgZGVidWcgZnMgZmlsZXN5c3RlbS4gVGhpcyBoZWxwcyB0byBnZW5lcmF0ZSBtZW1vcnkKJiM0MzsJICBwcmVzc3VyZSBlYXNpbHkuIFRoaXMgaXMgdXNlZnVsIHRvIGRlYnVnIG1lbW9yeSByZWNsYWltcyBpc3N1ZXMsCiYjNDM7CSAgT09NIHRyaWdnZXJzLCBwYWdlIG1pZ3JhdGlvbiBpc3N1ZXMsIGV0Yy4KJiM0MzsKJiM0MzsJICBJZiBpbiBkb3VidCwgc2F5IE4uCiYjNDM7CmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IDJkMDU3MGExNmU1YmUuLmI0OGYyYWM2ZWU4MDggMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC0xMzMsNiAmIzQzOzEzMyw3IEBAIG9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICYjNDM7PSBwYWdlX2lkbGUubwogb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VBTExPQykgJiM0Mzs9IGRlYnVnX3BhZ2VfYWxsb2Mubwogb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSAmIzQzOz0gZGVidWdfcGFnZV9yZWYubwogb2JqLSQoQ09ORklHX0RBTU9OKSAmIzQzOz0gZGFtb24vCiYjNDM7b2JqLSQoQ09ORklHX1BBR0VBTExPQ19IT0dHRVIpICYjNDM7PSBwYWdlX2FsbG9jX2hvZ2dlci5vCiBvYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vCiBvYmotJChDT05GSUdfUEVSQ1BVX1NUQVRTKSAmIzQzOz0gcGVyY3B1LXN0YXRzLm8KIG9iai0kKENPTkZJR19aT05FX0RFVklDRSkgJiM0Mzs9IG1lbXJlbWFwLm8KZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2NfaG9nZ2VyLmMgYi9tbS9wYWdlX2FsbG9jX2hvZ2dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyYzA1MDVhNmY1YTcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2FsbG9jX2hvZ2dlci5jCkBAIC0wLDAgJiM0MzsxLDYxMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBQYWdlIGFsbG9jYXRvciBEZWJ1Z0ZTIEludGVyZmFjZQomIzQzOyAqIEF1dGhvcjogSnVhbiBZZXNjYXMgJmx0O2p5ZXNjYXNAZ29vZ2xlLmNvbSZndDsKJiM0MzsgKgomIzQzOyAqIFRoaXMgbW9kdWxlIGFsbG93cyB0byBtYWtlIHBhZ2UgYWxsb2NzIHBlciBub2RlLCB6b25lLCBtaWdyYXRlIHR5cGUKJiM0MzsgKiBhbmQgb3JkZXIgdXNpbmcgdGhlIERlYnVnRlMgZmlsZXN5c3RlbS4KJiM0MzsgKgomIzQzOyAqIFdoZW4gdGhpcyBtb2R1bGUgaXMgaW5zdGFsbGVkIGFuZCB0aGUgZGVidWdmcyBpcyBtb3VudGVkLCB0aGUgJiMzNDttbSYjMzQ7IGRpcmVjdG9yeQomIzQzOyAqIHdpbGwgYmUgY3JlYXRlZCBpbiAmbHQ7ZGVidWdmcyBtb3VudCBwb2ludCZndDsvbW0mIzM0OyBkaXJlY3RvcnkuIFVuZGVyIHRoaXMgZGlyZWN0b3J5LAomIzQzOyAqIHRoZXJlIHdpbGwgYmUgc3ViZGlycyB0byBzZWxlY3QgdGhlIG5vZGVzLCB6b25lcywgb3JkZXJzIGFuZCBtaWdyYXRlIHR5cGUuCiYjNDM7ICoKJiM0MzsgKiBGb3IgZXhhbXBsZToKJiM0MzsgKgomIzQzOyAqICAgICAgL3N5cy9rZXJuZWwvZGVidWcvbW0vCiYjNDM7ICogICAgICB8LS0gZnJlZQomIzQzOyAqICAgICAgYC0tIG5vZGUtMAomIzQzOyAqICAgICAgICAgfC0tIHpvbmUtRE1BCiYjNDM7ICogICAgICAgICB8ICAgfC0tIG9yZGVyLTAKJiM0MzsgKiAgICAgICAgIHwgICB8ICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pYwomIzQzOyAqICAgICAgICAgfCAgIHwgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgfCAgIHwgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlCiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlCiYjNDM7ICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICB8ICAgfCAgIGAtLSBtaWdyYXRlLVVubW92YWJsZQomIzQzOyAqICAgICAgICAgfCAgIHwgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgfCAgIHwtLSAuLi4KJiM0MzsgKiAgICAgICAgIHwgICB8CiYjNDM7ICogICAgICAgICB8ICAgYC0tIG9yZGVyLTkKJiM0MzsgKiAgICAgICAgIHwgICAgICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pYwomIzQzOyAqICAgICAgICAgfCAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgfCAgICAgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlCiYjNDM7ICogICAgICAgICB8ICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICB8ICAgICAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlCiYjNDM7ICogICAgICAgICB8ICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICB8ICAgICAgIGAtLSBtaWdyYXRlLVVubW92YWJsZQomIzQzOyAqICAgICAgICAgfCAgICAgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgYC0tIHpvbmUtTm9ybWFsCiYjNDM7ICogICAgICAgICAgICAgfC0tIG9yZGVyLTAKJiM0MzsgKiAgICAgICAgICAgICB8ICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pYwomIzQzOyAqICAgICAgICAgICAgIHwgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgICAgIHwgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlCiYjNDM7ICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICAgICAgfCAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlCiYjNDM7ICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzCiYjNDM7ICogICAgICAgICAgICAgfCAgIGAtLSBtaWdyYXRlLVVubW92YWJsZQomIzQzOyAqICAgICAgICAgICAgIHwgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgICAgIHwtLSAuLi4uCiYjNDM7ICogICAgICAgICAgICAgfAomIzQzOyAqICAgICAgICAgICAgIGAtLSBvcmRlci05CiYjNDM7ICogICAgICAgICAgICAgICAgIHwtLSBtaWdyYXRlLUhpZ2hBdG9taWMKJiM0MzsgKiAgICAgICAgICAgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3MKJiM0MzsgKiAgICAgICAgICAgICAgICAgfC0tIG1pZ3JhdGUtTW92YWJsZQomIzQzOyAqICAgICAgICAgICAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgICAgICAgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZQomIzQzOyAqICAgICAgICAgICAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jcwomIzQzOyAqICAgICAgICAgICAgICAgICBgLS0gbWlncmF0ZS1Vbm1vdmFibGUKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3MKJiM0MzsgKgomIzQzOyAqIFVzYWdlOgomIzQzOyAqCiYjNDM7ICogMS4gVG8gdHJpZ2dlciB0aGUgYWxsb2NhdGlvbiwgbmF2aWdhdGUgdG8gdGhlIGRlYnVnZnMgcGF0aCBjb3JyZXNwb25kaW5nCiYjNDM7ICogICAgdG8geW91ciB0YXJnZXQgbm9kZSwgbWVtb3J5IHpvbmUsIGFsbG9jYXRpb24gb3JkZXIsIGFuZCBtaWdyYXRpb24gdHlwZSwKJiM0MzsgKiAgICB0aGVuIHdyaXRlIHRoZSByZXF1ZXN0ZWQgYWxsb2NhdGlvbiBjb3VudCB0byBucl9wYWdlc19hbGxvY3MuCiYjNDM7ICoKJiM0MzsgKiAgICBGb3IgZXhhbXBsZSwgdG8gbWFrZSAzIGFsbG9jcyBvZiBvcmRlciA5LCBNaWdyYXRlIFR5cGUgTW92YWJsZSwKJiM0MzsgKiAgICBab25lIE5vcm1hbCBhbmQgTm9kZSAwLCBydW46CiYjNDM7ICoKJiM0MzsgKiAgICAkIGVjaG8gMyAmZ3Q7IC9zeXMva2VybmVsL2RlYnVnL21tL25vZGUtMC96b25lLU5vcm1hbC9vcmRlci05L21pZ3JhdGUtTW92YWJsZS9ucl9wYWdlc19hbGxvY3MKJiM0MzsgKgomIzQzOyAqIDIuIEZvciBlYWNoIGFsbG9jYXRpb24gY3JlYXRlZCwgYSBjb3JyZXNwb25kaW5nIGZpbGUgbmFtZWQgc2VxdWVudGlhbGx5CiYjNDM7ICogICAgKDEsIDIsIG4pIHdpbGwgYXBwZWFyIGluIHRoYXQgZGlyZWN0b3J5LgomIzQzOyAqCiYjNDM7ICogICAgJCBscyAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9ub2RlLTAvem9uZS1Ob3JtYWwvb3JkZXItOS9taWdyYXRlLU1vdmFibGUvCiYjNDM7ICogICAgMSAgIDIgICAzICBucl9wYWdlc19hbGxvY3MKJiM0MzsgKgomIzQzOyAqIDMuIFRvIGZyZWUgdGhlIGFsbG9jYXRpb24sIHdyaXRlIHRoZSBhbGxvY2F0aW9uIGZpbGUgbmFtZSBpbiAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9mcmVlLgomIzQzOyAqICAgIEZvciBleGFtcGxlLCB0byByZWxlYXNlIHRoZSAybmQgYWxsb2NhdGlvbiBydW46CiYjNDM7ICoKJiM0MzsgKiAgICAkIGVjaG8gMiAmZ3Q7IC9zeXMva2VybmVsL2RlYnVnL21tL2ZyZWUKJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICYjMzQ7OiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYXRvbWljLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2dmcF90eXBlcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW16b25lLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ub2RlbWFzay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wcmludGsuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGRlbnRyeSAqbW1kaXI7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYXRvbWljX2xvbmdfdCBhbGxvY3NfZmlsZV9zZXEgLSBSZXByZXNlbnRzIHRoZSBuYW1pbmcgc2VxdWVuY2UgdXNlZCBmb3IKJiM0MzsgKiBhbGxvY2F0aW9uIGZpbGVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBhdG9taWNfbG9uZ190IGFsbG9jc19maWxlX3NlcSA9IEFUT01JQ19JTklUKDApOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGFsbG9jc194YSAtIFJlcHJlc2VudCB0aGUgeGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBhbGxvY2F0aW9ucyBwZXJmb3JtCiYjNDM7ICogYnkgdGhpcyBkcml2ZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkoYWxsb2NzX3hhKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcmVxX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb24KJiM0MzsgKiBAbm9kZV9pZHg6IFRoZSBOb2RlIGluZGV4IHRvIGFsbG9jYXRlIGZyb20uCiYjNDM7ICogQHpvbmVfaWR4OiBUaGUgWm9uZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLgomIzQzOyAqIEBvcmRlcjogVGhlIE9yZGVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlLgomIzQzOyAqIEBtaWdyYXRlX3R5cGU6IFRoZSBNaWdyYXRlIHR5cGUgdG8gYWxsb2NhdGUgZnJvbS4KJiM0MzsgKiBAcGFyZW50ZGlyOiBUaGUgcGFyZW50IGRpciB3aGVyZSB0aGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGFsbG9jIHdhcyBjcmVhdGVkLgomIzQzOyAqLwomIzQzO3N0cnVjdCByZXFfYWxsb2MgewomIzQzOwlpbnQgbm9kZV9pZHg7CiYjNDM7CWludCB6b25lX2lkeDsKJiM0MzsJaW50IG9yZGVyOwomIzQzOwlpbnQgbWlncmF0ZV90eXBlOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnRkaXI7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGFnZV9hbGxvYyAtIFJlcHJlc2VudHMgdGhlIHBhZ2UgYWxsb2NhdGlvbi4KJiM0MzsgKiBAcGFnZTogVGhlIHBvaW50ZXIgdG8gdGhlIHBhZ2UocykgYWxsb2NhdGVkLgomIzQzOyAqIEByZXFfYWxsb2M6IFRoZSBkZXRhaWxzIG9mIHRoZSBhbGxvY2F0aW9uLgomIzQzOyAqIEBhbGxvY19kZW50cnk6IFRoZSBwb2ludGVyIHRvIHRoZSBmaWxlIHRoYXQgcmVwcmVzZW50cyB0aGUgYWxsb2NhdGlvbi4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZV9hbGxvYyB7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlOwomIzQzOwlzdHJ1Y3QgcmVxX2FsbG9jICpyZXFfYWxsb2M7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmFsbG9jX2RlbnRyeTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmVxX2FsbG9jX2NhY2hlOwomIzQzO3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGFnZV9hbGxvY19jYWNoZTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfdG9fYWxsb2NfZnJvbShpbnQgem9uZV9pZHgsIGdmcF90ICpmbGFnc19wdHIpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHpvbmVfaWR4KSB7CiYjNDM7I2lmZGVmIENPTkZJR19aT05FX0RNQQomIzQzOwljYXNlIFpPTkVfRE1BOgomIzQzOwkJKmZsYWdzX3B0ciB8PSBfX0dGUF9ETUE7CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX1pPTkVfRE1BMzIKJiM0MzsJY2FzZSBaT05FX0RNQTMyOgomIzQzOwkJKmZsYWdzX3B0ciB8PSBfX0dGUF9ETUEzMjsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfSElHSE1FTQomIzQzOwljYXNlIFpPTkVfSElHSE1FTToKJiM0MzsJCSpmbGFnc19wdHIgfD0gX19HRlBfSElHSE1FTTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZgomIzQzOwljYXNlIFpPTkVfTU9WQUJMRToKJiM0MzsJCSpmbGFnc19wdHIgfD0gX19HRlBfTU9WQUJMRTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFpPTkVfTk9STUFMOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJKmZsYWdzX3B0ciB8PSAwOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNldF9taWdyYXRlX3R5cGVfdG9fYWxsb2NfZnJvbShpbnQgbWlncmF0ZV90eXBlLCBnZnBfdCAqZmxhZ3NfcHRyKQomIzQzO3sKJiM0MzsJc3dpdGNoIChtaWdyYXRlX3R5cGUpIHsKJiM0MzsJY2FzZSBNSUdSQVRFX1VOTU9WQUJMRToKJiM0MzsJCSpmbGFnc19wdHIgJmFtcDs9IH4oX19HRlBfUkVDTEFJTUFCTEUgfCBfX0dGUF9NT1ZBQkxFKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIE1JR1JBVEVfUkVDTEFJTUFCTEU6CiYjNDM7CQkqZmxhZ3NfcHRyIHw9IF9fR0ZQX1JFQ0xBSU1BQkxFOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUlHUkFURV9ISUdIQVRPTUlDOgomIzQzOwkJKmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdIOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUlHUkFURV9NT1ZBQkxFOiBkZWZhdWx0OgomIzQzOwkJKmZsYWdzX3B0ciB8PSBfX0dGUF9NT1ZBQkxFOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgcGFnZV9hbGxvY19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdWJ1ZiwKJiM0MzsJCQkJICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKJiM0Mzt7CiYjNDM7CS8qICBXaGljaCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJpbnQgYWJvdXQgdGhlIHBhZ2Ugb3IgYWxsb2NhdGlvbj8gKi8KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2VfYWxsb2NfZm9wcyA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5vcGVuID0gc2ltcGxlX29wZW4sCiYjNDM7CS5yZWFkID0gcGFnZV9hbGxvY19yZWFkLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBtYWtlX2FsbG9jKHN0cnVjdCByZXFfYWxsb2MgKnJlcSwKJiM0MzsJCQkgICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmFsbG9jX2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2VfYWxsb2MgKnBhOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsJY2hhciBuZXdfYWxsb2NfbmFtZVsyMF07CiYjNDM7CXN0cnVjdCBkZW50cnkgKm5ld19hbGxvY19kZW50cnk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlc19ub2RlX25vcHJvZihyZXEtJmd0O25vZGVfaWR4LCBmbGFncywgcmVxLSZndDtvcmRlcik7CiYjNDM7CWlmIChwYWdlKSB7CiYjNDM7CQlwYSA9IGttZW1fY2FjaGVfYWxsb2MocGFnZV9hbGxvY19jYWNoZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIXBhKSB7CiYjNDM7CQkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCQlnb3RvIGZyZWVfcGFnZXM7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkqYWxsb2NfaWQgPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKCZhbXA7YWxsb2NzX2ZpbGVfc2VxKTsKJiM0MzsJCXNucHJpbnRmKG5ld19hbGxvY19uYW1lLCBzaXplb2YobmV3X2FsbG9jX25hbWUpLCAmIzM0OyVsdSYjMzQ7LAomIzQzOwkJCSAqYWxsb2NfaWQpOwomIzQzOwomIzQzOwkJbmV3X2FsbG9jX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoCiYjNDM7CQkJbmV3X2FsbG9jX25hbWUsIDA0MDAsIHJlcS0mZ3Q7cGFyZW50ZGlyLAomIzQzOwkJCXBhLCAmYW1wO3BhZ2VfYWxsb2NfZm9wcyk7CiYjNDM7CQlpZiAoSVNfRVJSKG5ld19hbGxvY19kZW50cnkpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihuZXdfYWxsb2NfZGVudHJ5KTsKJiM0MzsJCQlnb3RvIGZyZWVfcGFnZV9hbGxvYzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXBhLSZndDtyZXFfYWxsb2MgPSByZXE7CiYjNDM7CQlwYS0mZ3Q7cGFnZSA9IHBhZ2U7CiYjNDM7CQlwYS0mZ3Q7YWxsb2NfZGVudHJ5ID0gbmV3X2FsbG9jX2RlbnRyeTsKJiM0MzsKJiM0MzsJCXJldCA9IHhhX2luc2VydCgmYW1wO2FsbG9jc194YSwgKmFsbG9jX2lkLCBwYSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVtb3ZlX2FsbG9jX2RlbnRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO3JlbW92ZV9hbGxvY19kZW50cnk6CiYjNDM7CWRlYnVnZnNfcmVtb3ZlKG5ld19hbGxvY19kZW50cnkpOwomIzQzOwomIzQzO2ZyZWVfcGFnZV9hbGxvYzoKJiM0MzsJa21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTsKJiM0MzsKJiM0MztmcmVlX3BhZ2VzOgomIzQzOwlfX2ZyZWVfcGFnZXMocGFnZSwgcmVxLSZndDtvcmRlcik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZnJlZV9hbGxvY19oZWxwZXIodW5zaWduZWQgbG9uZyBhbGxvY19pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwYWdlX2FsbG9jICpwYTsKJiM0MzsKJiM0MzsJcGEgPSB4YV9lcmFzZSgmYW1wO2FsbG9jc194YSwgYWxsb2NfaWQpOwomIzQzOwlpZiAoIXBhKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDtUaGUgYWxsb2NfaWQgJWx1IHdhcyBub3QgZm91bmQhJiMzNDssIGFsbG9jX2lkKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CV9fZnJlZV9wYWdlcyhwYS0mZ3Q7cGFnZSwgcGEtJmd0O3JlcV9hbGxvYy0mZ3Q7b3JkZXIpOwomIzQzOwlkZWJ1Z2ZzX3JlbW92ZShwYS0mZ3Q7YWxsb2NfZGVudHJ5KTsKJiM0MzsJa21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHJlcV9wYWdlX2FsbG9jX3dyaXRlKCkgLSBBbGxvY2F0ZXMgdGhlIHBhZ2VzIG9uIHRoZSByZXF1ZXN0ZWQgbm9kZSwgem9uZSwKJiM0MzsgKiBvcmRlciBhbmQgbWlncmF0ZSB0eXBlLiBPbmNlIHRoZSBhbGxvY2F0aW9uIGlzIHBlcmZvcm1lZCwgYSBmaWxlIGlzIGNyZWF0ZWQKJiM0MzsgKiB0byBmcmVlIHRoZSBhbGxvY2F0aW9uIGxhdGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzc2l6ZV90IHJlcV9wYWdlX2FsbG9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKJiM0MzsJCQkJICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmVxX2FsbG9jICpyZXEgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfYWxsb2NzOwomIzQzOwl1bnNpZ25lZCBsb25nICphbGxvY3NfaWRzOwomIzQzOwlnZnBfdCBmbGFncyA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlyZXQgPSBrc3RydG91bF9mcm9tX3VzZXIodWJ1ZiwgY250LCAxMCwgJmFtcDtucl9wYWdlc19hbGxvY3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJYWxsb2NzX2lkcyA9IGttYWxsb2NfYXJyYXkobnJfcGFnZXNfYWxsb2NzLCBzaXplb2YodW5zaWduZWQgbG9uZyksCiYjNDM7CQkJCQlHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFhbGxvY3NfaWRzKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXNldF96b25lX3RvX2FsbG9jX2Zyb20ocmVxLSZndDt6b25lX2lkeCwgJmFtcDtmbGFncyk7CiYjNDM7CXNldF9taWdyYXRlX3R5cGVfdG9fYWxsb2NfZnJvbShyZXEtJmd0O21pZ3JhdGVfdHlwZSwgJmFtcDtmbGFncyk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBucl9wYWdlc19hbGxvY3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSBtYWtlX2FsbG9jKHJlcSwgZmxhZ3MsICZhbXA7YWxsb2NfaWQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGZyZWVfYWxsb2NzOwomIzQzOwomIzQzOwkJYWxsb2NzX2lkc1tpXSA9IGFsbG9jX2lkOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtmcmVlKGFsbG9jc19pZHMpOwomIzQzOwomIzQzOwlyZXR1cm4gY250OwomIzQzOwomIzQzO2ZyZWVfYWxsb2NzOgomIzQzOwkvKiBGcmVlIGFsbCB0aGUgcGFnZXMgYW5kIHJlc291cmNlcyBwcmV2aW91c2x5IGFsbG9jYXRlZC4gKi8KJiM0MzsJZm9yIChpbnQgaiA9IDA7IGogJmx0OyBpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJaW50IHJldDIgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY3NfaWRzW2pdKTsKJiM0MzsKJiM0MzsJCWlmIChyZXQyKQomIzQzOwkJCXByX2VycigmIzM0O1VuYWJsZSB0byBmcmVlIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCBmaWxlICVsdSYjMzQ7LAomIzQzOwkJCSAgICAgICBhbGxvY3NfaWRzW2pdKTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShhbGxvY3NfaWRzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVxX3BhZ2VfYWxsb2NfZm9wcyA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS5vcGVuID0gc2ltcGxlX29wZW4sCiYjNDM7CS53cml0ZSA9IHJlcV9wYWdlX2FsbG9jX3dyaXRlLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZnJlZV9wYWdlX2FsbG9jX3dyaXRlKCkgLSBmcmVlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwYWdlcy4KJiM0MzsgKiBAZmlsZTogRmlsZSB3aGVyZSB0aGUgdXNlciBpcyB3cml0aW5nLgomIzQzOyAqIEB1YnVmOiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGUgdXNlciB3YW50cyB0byBkZWxldGUgYW5kIGhhdmUgdGhlCiYjNDM7ICogICAgICAgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGF0IGZpbGUgZnJlZWQuCiYjNDM7ICogQGNudDogU2l6ZSBvZiBAdWJ1Zi4KJiM0MzsgKiBAcHBvczogQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3NpemVfdCBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiYjNDM7CQkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAomIzQzOwkJCQkgICAgICBsb2ZmX3QgKnBwb3MpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwl1bnNpZ25lZCBsb25nIGFsbG9jX2lkOwomIzQzOwomIzQzOwlyZXQgPSBrc3RydG91bF9mcm9tX3VzZXIodWJ1ZiwgY250LCAxMCwgJmFtcDthbGxvY19pZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY19pZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gY250OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmcmVlX3BhZ2VfYWxsb2NfZm9wcyA9IHsKJiM0MzsJLm93bmVyID0gVEhJU19NT0RVTEUsCiYjNDM7CS53cml0ZSA9IGZyZWVfcGFnZV9hbGxvY193cml0ZSwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZSgpIC0gQ3JlYXRlcyB0aGUgZmlsZSAmIzM0O25yX3BhZ2VzX2FsbG9jcyYjMzQ7LgomIzQzOyAqCiYjNDM7ICogVGhlICYjMzQ7bnJfcGFnZXNfYWxsb2NzJiMzNDsgZmlsZSB3aWxsIGJlIHVzZWQgdG8gd3JpdGUgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9ucwomIzQzOyAqIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQuIFdoZW4gdGhlIGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQsIGEgbmV3IGZpbGUgZm9yCiYjNDM7ICogZWFjaCBhbGxvY2F0aW9uIHdpbGwgYmUgY3JlYXRlZCBpbiBAbWlncmF0ZWRpci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUoc3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpciwKJiM0MzsJCQkJCSAgICAgIGludCBuaWQsIGludCB6b25lX2lkeCwKJiM0MzsJCQkJCSAgICAgIGludCBvcmRlciwgaW50IG10eXBlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJlcV9hbGxvYyAqcmVxOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpucl9wYWdlczsKJiM0MzsKJiM0MzsJcmVxID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfYWxsb2NfY2FjaGUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXJlcSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBucl9wYWdlc19hbGxvY3NfaW5mbyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcS0mZ3Q7bm9kZV9pZHggPSBuaWQ7CiYjNDM7CXJlcS0mZ3Q7em9uZV9pZHggPSB6b25lX2lkeDsKJiM0MzsJcmVxLSZndDtvcmRlciA9IG9yZGVyOwomIzQzOwlyZXEtJmd0O21pZ3JhdGVfdHlwZSA9IG10eXBlOwomIzQzOwlyZXEtJmd0O3BhcmVudGRpciA9IG1pZ3JhdGVkaXI7CiYjNDM7CiYjNDM7CW5yX3BhZ2VzID0gZGVidWdmc19jcmVhdGVfZmlsZSgmIzM0O25yX3BhZ2VzX2FsbG9jcyYjMzQ7LCAwMjAwLCBtaWdyYXRlZGlyLCByZXEsCiYjNDM7CQkJCSAgICAgICAmYW1wO3JlcV9wYWdlX2FsbG9jX2ZvcHMpOwomIzQzOwlpZiAoSVNfRVJSKG5yX3BhZ2VzKSkgewomIzQzOwkJa21lbV9jYWNoZV9mcmVlKHJlcV9hbGxvY19jYWNoZSwgcmVxKTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKG5yX3BhZ2VzKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY3JlYXRlX21pZ3JhdGVfdHlwZV9zdWJkaXJzKCkgLSBDcmVhdGVzIGEgZGlyZWN0b3J5IGZvciBlYWNoIG1pZ3JhdGUgdHlwZQomIzQzOyAqIGluc2lkZSB0aGUgb3JkZXIgZGlyZWN0b3J5LiBPbmNlIHRoZSBtaWdyYXRlIHR5cGUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIGl0CiYjNDM7ICogY3JlYXRlcyB0aGUgJiMzNDtucl9wYWdlc19hbGxvY3MmIzM0OyBmaWxlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICpvcmRlcmRpciwgaW50IG5pZCwKJiM0MzsJCQkJCWludCB6b25lX2lkeCwgaW50IG9yZGVyKQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpcjsKJiM0MzsJY2hhciBkaXJuYW1lWzI0XTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZm9yIChpbnQgbXR5cGUgPSAwOyBtdHlwZSAmbHQ7IE1JR1JBVEVfVFlQRVM7IG10eXBlJiM0MzsmIzQzOykgewomIzQzOyNpZmRlZiBDT05GSUdfQ01BCiYjNDM7CQlpZiAobXR5cGUgPT0gTUlHUkFURV9DTUEpIC8qIENNQSBhbGxvY3MgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0Ki8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsjZW5kaWYKJiM0MzsjaWZkZWYgQ09ORklHX01FTU9SWV9JU09MQVRJT04KJiM0MzsJCWlmIChtdHlwZSA9PSBNSUdSQVRFX0lTT0xBVEUpIC8qIGNhbiYjMzk7dCBhbGxvY2F0ZSBmcm9tIGhlcmUgKi8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsjZW5kaWYKJiM0MzsJCWlmICh6b25lX2lkeCA9PSBaT05FX01PVkFCTEUgJmFtcDsmYW1wOyBtdHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksICYjMzQ7bWlncmF0ZS0lcyYjMzQ7LAomIzQzOwkJCSBtaWdyYXRldHlwZV9uYW1lc1ttdHlwZV0pOwomIzQzOwkJbWlncmF0ZWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1lLCBvcmRlcmRpcik7CiYjNDM7CQlpZiAoSVNfRVJSKG1pZ3JhdGVkaXIpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKG1pZ3JhdGVkaXIpOwomIzQzOwomIzQzOwkJcmV0ID0gY3JlYXRlX25yX3BhZ2VzX2FsbG9jc19maWxlKG1pZ3JhdGVkaXIsIG5pZCwgem9uZV9pZHgsCiYjNDM7CQkJCQkJb3JkZXIsIG10eXBlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggcGFnZSBvcmRlciBpbnNpZGUKJiM0MzsgKiB0aGUgem9uZSBkaXJlY3RvcnkuIE9uY2UgdGhhdCB0aGUgcGFnZSBvcmRlciBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcwomIzQzOyAqIGEgZGlyZWN0b3J5IGZvciBlYWNoIG1pZ3JhdGUgdHlwZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfcGFnZV9vcmRlcnNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICp6b25lZGlyLCBpbnQgbmlkLAomIzQzOwkJCQkJaW50IHpvbmVfaWR4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRlbnRyeSAqb3JkZXJkaXI7CiYjNDM7CWNoYXIgZGlybmFtZVsxMl07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWZvciAoaW50IG9yZGVyID0gMDsgb3JkZXIgJmx0OyBOUl9QQUdFX09SREVSUzsgb3JkZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksICYjMzQ7b3JkZXItJWQmIzM0Oywgb3JkZXIpOwomIzQzOwkJb3JkZXJkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgem9uZWRpcik7CiYjNDM7CQlpZiAoSVNfRVJSKG9yZGVyZGlyKSkKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUihvcmRlcmRpcik7CiYjNDM7CiYjNDM7CQlyZXQgPSBjcmVhdGVfbWlncmF0ZV90eXBlX3N1YmRpcnMob3JkZXJkaXIsIG5pZCwgem9uZV9pZHgsCiYjNDM7CQkJCQkJb3JkZXIpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjcmVhdGVfem9uZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBwb3B1bGF0ZWQgem9uZSBpbiB0aGUKJiM0MzsgKiBub2RlLiBPbmNlIHRoYXQgdGhlIHpvbmUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIGl0IGNyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yCiYjNDM7ICogZWFjaCBvcmRlciBzdXBwb3J0ZWQuCiYjNDM7ICoKJiM0MzsgKiBOb3RlOiBaT05FX0RFVklDRSBwYWdlcyB3b24mIzM5O3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMgZHJpdmVyLiBUaGUgbWFpbiByZWFzb24KJiM0MzsgKiBpcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBtYW5hZ2VkIGJ5IHRoZSBCdWRkeSBBbGxvY2F0b3Igb3IgQ01BIGFsbG9jYXRvci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfem9uZXNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICpub2RlZGlyLAomIzQzOwkJCQkJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdGEsIGludCBuaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVudHJ5ICp6b25lZGlyOwomIzQzOwlzdHJ1Y3Qgem9uZSAqem9uZTsKJiM0MzsJc3RydWN0IHpvbmUgKm5vZGVfem9uZXMgPSBwZ2RhdGEtJmd0O25vZGVfem9uZXM7CiYjNDM7CWludCB6b25lX2lkeDsKJiM0MzsJY2hhciBkaXJuYW1lWzI0XTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZm9yICh6b25lID0gbm9kZV96b25lcywgem9uZV9pZHggPSAwOyB6b25lIC0gbm9kZV96b25lcyAmbHQ7IE1BWF9OUl9aT05FUzsKJiM0MzsJCQkmIzQzOyYjNDM7em9uZSwgJiM0MzsmIzQzO3pvbmVfaWR4KSB7CiYjNDM7CQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJLyogWk9ORV9ERVZJQ0UgcGFnZXMgd29uJiMzOTt0IGJlIGFsbG9jYXRlZCB1c2luZyB0aGlzIGRyaXZlci4gKi8KJiM0MzsJCWlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCAmIzM0O3pvbmUtJXMmIzM0Oywgem9uZS0mZ3Q7bmFtZSk7CiYjNDM7CQl6b25lZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG5vZGVkaXIpOwomIzQzOwkJaWYgKElTX0VSUih6b25lZGlyKSkKJiM0MzsJCQlyZXR1cm4gUFRSX0VSUih6b25lZGlyKTsKJiM0MzsKJiM0MzsJCXJldCA9IGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKHpvbmVkaXIsIG5pZCwgem9uZV9pZHgpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBjcmVhdGVfbm9kZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBub2RlIHRoYXQgY29udGFpbnMKJiM0MzsgKiBtZW1vcnkuIE9uY2UgdGhhdCB0aGUgbm9kZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IKJiM0MzsgKiBlYWNoIHpvbmUgaW4gdGhlIG5vZGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBpbnQgY3JlYXRlX25vZGVzX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqbW1kaXIpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpub2RlZGlyOwomIzQzOwljaGFyIGRpcm5hbWVbMTJdOwomIzQzOwlpbnQgbmlkOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHsKJiM0MzsJCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXRhID0gTk9ERV9EQVRBKG5pZCk7CiYjNDM7CiYjNDM7CQlzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksICYjMzQ7bm9kZS0lZCYjMzQ7LCBuaWQpOwomIzQzOwkJbm9kZWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1lLCBtbWRpcik7CiYjNDM7CQlpZiAoSVNfRVJSKG5vZGVkaXIpKQomIzQzOwkJCXJldHVybiBQVFJfRVJSKG5vZGVkaXIpOwomIzQzOwomIzQzOwkJcmV0ID0gY3JlYXRlX3pvbmVzX3N1YmRpcnMobm9kZWRpciwgcGdkYXRhLCBuaWQpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBwYWdlX2FsbG9jX2hvZ2dlcl9kZWJ1Z2ZzX2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmZyZWVfZmlsZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmVxX2FsbG9jX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoCiYjNDM7CQkmIzM0O3JlcV9hbGxvY19jYWNoZSYjMzQ7LCBzaXplb2Yoc3RydWN0IHJlcV9hbGxvYyksIDAsCiYjNDM7CQlTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOwomIzQzOwlpZiAoIXJlcV9hbGxvY19jYWNoZSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7VGhlIHJlcV9hbGxvY19jYWNoZSBjb3VsZG4mIzM5O3QgYmUgY3JlYXRlZFxuJiMzNDspOwomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyb3JfZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwlwYWdlX2FsbG9jX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoCiYjNDM7CQkmIzM0O3BhZ2VfYWxsb2NfY2FjaGUmIzM0Oywgc2l6ZW9mKHN0cnVjdCBwYWdlX2FsbG9jKSwgMCwKJiM0MzsJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CiYjNDM7CWlmICghcGFnZV9hbGxvY19jYWNoZSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7VGhlIHBhZ2VfYWxsb2NfY2FjaGUgY291bGRuJiMzOTt0IGJlIGNyZWF0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGNsZWFuX3JlcV9hbGxvY19jYWNoZTsKJiM0MzsJfQomIzQzOwomIzQzOwltbWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigmIzM0O21tJiMzNDssIE5VTEwpOwomIzQzOwlpZiAoSVNfRVJSKG1tZGlyKSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7VW5hYmxlIHRvIGNyZWF0ZSBtbSBkaXJlY3RvcnlcbiYjMzQ7KTsKJiM0MzsJCXJldCA9IFBUUl9FUlIobW1kaXIpOwomIzQzOwkJZ290byBjbGVhbl9wYWdlX2FsbG9jX2NhY2hlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IGNyZWF0ZV9ub2Rlc19zdWJkaXJzKG1tZGlyKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gY2xlYW5fZGlyOwomIzQzOwomIzQzOwlmcmVlX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7ZnJlZSYjMzQ7LCAwMjAwLCBtbWRpciwgTlVMTCwKJiM0MzsJCQkJCSZhbXA7ZnJlZV9wYWdlX2FsbG9jX2ZvcHMpOwomIzQzOwlpZiAoSVNfRVJSKGZyZWVfZmlsZSkpIHsKJiM0MzsJCXJldCA9IFBUUl9FUlIoZnJlZV9maWxlKTsKJiM0MzsJCWdvdG8gY2xlYW5fZGlyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NsZWFuX2RpcjoKJiM0MzsJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG1tZGlyKTsKJiM0MzsKJiM0MztjbGVhbl9wYWdlX2FsbG9jX2NhY2hlOgomIzQzOwlrbWVtX2NhY2hlX2Rlc3Ryb3kocGFnZV9hbGxvY19jYWNoZSk7CiYjNDM7CiYjNDM7Y2xlYW5fcmVxX2FsbG9jX2NhY2hlOgomIzQzOwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmVxX2FsbG9jX2NhY2hlKTsKJiM0MzsKJiM0MztlcnJvcl9leGl0OgomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBfX2V4aXQgcGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZV9hbGxvYyAqcGE7CiYjNDM7CXVuc2lnbmVkIGxvbmcgaWR4OwomIzQzOwomIzQzOwl4YV9mb3JfZWFjaCgmYW1wO2FsbG9jc194YSwgaWR4LCBwYSkKJiM0MzsJCWZyZWVfYWxsb2NfaGVscGVyKGlkeCk7CiYjNDM7CiYjNDM7CWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShtbWRpcik7CiYjNDM7CWttZW1fY2FjaGVfZGVzdHJveShyZXFfYWxsb2NfY2FjaGUpOwomIzQzOwlrbWVtX2NhY2hlX2Rlc3Ryb3kocGFnZV9hbGxvY19jYWNoZSk7CiYjNDM7fQomIzQzOwomIzQzO21vZHVsZV9pbml0KHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfaW5pdCk7CiYjNDM7bW9kdWxlX2V4aXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19leGl0KTsKJiM0MzsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7SnVhbiBZZXNjYXMmIzM0Oyk7CiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW9kdWxlIHRvIGFsbG9jIHBhZ2VzIHRvIGdlbmVyYXRlIG1lbW9yeSBwcmVzc3VyZSYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU2MgoJCQkJCQkJb3V0cHV0OiAxMDgKCQkJCQkJCXRob3VnaHRzOiAxMDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQW5hbHlzaXM6IE5ldyBEZWJ1Z2ZzIFBhZ2UgQWxsb2NhdG9yIEludGVyZmFjZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSwgYG1tL3BhZ2VfYWxsb2NfaG9nZ2VyLmNgLCB3aGljaCBzZWVtcyBkZXNpZ25lZCBmb3IgYWxsb2NhdGluZyBwYWdlcyB3aXRoIHNwZWNpZmljIHBhcmFtZXRlcnM6IG5vZGUsIHpvbmUsIG1pZ3JhdGUgdHlwZSwgYW5kIG9yZGVyLiBUaGUgbmV3IGNvbmZpZyBpcyBgUEFHRUFMTE9DX0hPR0dFUmAsIGFuZCBpdCBkZXBlbmRzIG9uIGBERUJVR19GU2AuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgZnV6emFibGU/JiMzNDsgRGVidWdmcyBpbnRlcmZhY2VzIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcgdGFyZ2V0cywgZXNwZWNpYWxseSB3aGVuIHRoZXkgdG91Y2ggbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMgb25lIGxvb2tzIHByb21pc2luZyBiZWNhdXNlIGl0IGRpcmVjdGx5IGludGVyYWN0cyB3aXRoIHRoZSBwYWdlIGFsbG9jYXRvci4gVGhlIGtleSBpcyB0byBzZWUgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gSXQmIzM5O3MgYSBzb2Z0d2FyZSBpbnRlcmZhY2Ugc28gbm8gcGh5c2ljYWwgaGFyZHdhcmUgaXMgbmVlZGVkLCBhbmQgZGVidWdmcyBpcyBhdmFpbGFibGUgaW4gUUVNVSwgc28gdGhhdCYjMzk7cyBnb29kLiBGdW5jdGlvbmFsbHksIGl0JiMzOTtzIGFkZGluZyBhIG5ldyBtb2R1bGUgYW5kIGZlYXR1cmUgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBkZWJ1Z2ZzLgoKVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIHVzIHRvIGFsbG9jYXRlIG1lbW9yeS4gRnV6emluZyBjb3VsZCByZXZlYWwgYnVncyBpbiB0aGlzICYjMzQ7aG9nZ2VyJiMzNDsgbW9kdWxlIGl0c2VsZiwgb3IgaXQgbWlnaHQgdHJpZ2dlciBpbnRlcmVzdGluZyBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgdW5kZXIgcHJlc3N1cmUuCgpMb29raW5nIGF0IHRoZSBjb2RlLCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJiMzOTt2ZSBpZGVudGlmaWVkOiBgcGFnZV9hbGxvY19yZWFkYCwgYG1ha2VfYWxsb2NgLCBgZnJlZV9hbGxvY19oZWxwZXJgLCBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgLCBgZnJlZV9wYWdlX2FsbG9jX3dyaXRlYCwgYW5kIGEgYnVuY2ggb2YgZGlyZWN0b3J5IGNyZWF0aW9uIGZ1bmN0aW9ucy4gVGhlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZyBhcHBlYXIgdG8gYmUgdGhlIGZpbGUgb3BlcmF0aW9uczogc3BlY2lmaWNhbGx5LCBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgLCBgZnJlZV9wYWdlX2FsbG9jX3dyaXRlYCwgYW5kIGBwYWdlX2FsbG9jX3JlYWRgLgoKVGhlIGNvbmZpZyBvcHRpb25zIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBQQUdFQUxMT0NfSE9HR0VSYCBhbmQgaXRzIGRlcGVuZGVuY3kgb24gYERFQlVHX0ZTYC4gTGV0JiMzOTtzIHZlcmlmeSB0aG9zZSBmdW5jdGlvbnMgYWdhaW4uIFllcCwgYHJlcV9wYWdlX2FsbG9jX3dyaXRlYCwgYGZyZWVfcGFnZV9hbGxvY193cml0ZWAsIGFuZCBgcGFnZV9hbGxvY19yZWFkYCBhcmUgZGVmaW5pdGVseSB0aGUgdGFyZ2V0cy4gSSYjMzk7bSByZWFkeSB0byBkb2N1bWVudCBteSBmaW5kaW5ncy4KCkJhc2VkIG9uIHRoZSBpbnZlc3RpZ2F0aW9uLCBJJiMzOTttIHNldHRpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgdG8gYHRydWVgLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgLCBgZnJlZV9wYWdlX2FsbG9jX3dyaXRlYCwgYW5kIGBwYWdlX2FsbG9jX3JlYWRgLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIHdpbGwgYmUgYFBBR0VBTExPQ19IT0dHRVJgIGFuZCBgREVCVUdfRlNgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBpbnRlcmZhY2UgdGhhdCBhbGxvY2F0ZXMgcGFnZXMsIHdoaWNoIHdlIGNhbiB1c2UgdG8gZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlIGFuZCBmaW5kIGJ1Z3MgaW4gdGhlIGhvZ2dlciBpdHNlbGYgb3IgdHJpZ2dlciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuCgpJJiMzOTtsbCBkb3VibGUgY2hlY2sgdGhhdCBgREVCVUdfRlNgIGlzIGVpdGhlciBlbmFibGVkIGJ5IGRlZmF1bHQgb3Igd2UgbmVlZCB0byBlbmFibGUgaXQsIEkmIzM5O2xsIGluY2x1ZGUgaXQgdG8gYmUgc2FmZS4gSXQgZGVwZW5kcyBvbiB0aGUgS2NvbmZpZyBvcHRpb25zLiBZZXMsIGFuZCBpdCYjMzk7cyBzYWZlIHRvIGluY2x1ZGUuIEkgY2hlY2tlZCBgbW0vS2NvbmZpZy5kZWJ1Z2AgYW5kIGNvbmZpcm1lZCB0aGF0IGBQQUdFQUxMT0NfSE9HR0VSYCBkZXBlbmRzIG9uIGBERUJVR19GU2AuCgpJIHNlZSB0aGF0IGBtYWtlX2FsbG9jYCBhbmQgYGZyZWVfYWxsb2NfaGVscGVyYCBhcmUgY2FsbGVkIGZyb20gdGhlIHByaW1hcnkgd3JpdGUgZnVuY3Rpb25zLCBidXQgdGhhdCYjMzk7cyBmaW5lLiBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgIGFuZCBgZnJlZV9wYWdlX2FsbG9jX3dyaXRlYCBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLCBidXQgYHBhZ2VfYWxsb2NfcmVhZGAgaXMgYWxzbyBhbiBlbnRyeSBwb2ludCwgZXZlbiBpZiBpdCBqdXN0IHJldHVybnMgMC4KCldhaXQsIGxvb2tpbmcgY2xvc2VyLCBgcmVxX3BhZ2VfYWxsb2Nfd3JpdGVgIGlzIG1hcmtlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucywgYnV0IGluIHRoaXMgY2FzZSwgaXRzIGFkZHJlc3MgaXMgdGFrZW4gYmVjYXVzZSBpdCYjMzk7cyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0LgpgYGBjCnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlcV9wYWdlX2FsbG9jX2ZvcHMgPSB7Cgkub3duZXIgPSBUSElTX01PRFVMRSwKCS5vcGVuID0gc2ltcGxlX29wZW4sCgkud3JpdGUgPSByZXFfcGFnZV9hbGxvY193cml0ZSwKfTsKYGBgClNvLCBpdCYjMzk7cyBmaW5lIHRvIGxpc3QgaXQuIEl0IHdvbiYjMzk7dCBiZSBpbmxpbmVkLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBJdCBsb29rcyBsaWtlIGBQQUdFQUxMT0NfSE9HR0VSYCBpcyB0aGUgb25seSBuZXcgb25lLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIHNldC1yZXN1bHRzIGFuZCBkb2N1bWVudCB0aGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQQUdFQUxMT0NfSE9HR0VSJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVxX3BhZ2VfYWxsb2Nfd3JpdGUmIzM0OywKICAgICYjMzQ7ZnJlZV9wYWdlX2FsbG9jX3dyaXRlJiMzNDssCiAgICAmIzM0O3BhZ2VfYWxsb2NfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGRlYnVnZnMgaW50ZXJmYWNlIGZvciBhbGxvY2F0aW5nIHBhZ2VzIHRvIGdlbmVyYXRlIG1lbW9yeSBwcmVzc3VyZS4gRnV6emluZyB0aGlzIGludGVyZmFjZSBjYW4gaGVscCB1bmNvdmVyIGJ1Z3MgaW4gdGhlIGhvZ2dlciBpdHNlbGYgb3IgdHJpZ2dlciBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BBR0VBTExPQ19IT0dHRVImIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXFfcGFnZV9hbGxvY193cml0ZSYjMzQ7LAogICAgJiMzNDtmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUmIzM0OywKICAgICYjMzQ7cGFnZV9hbGxvY19yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZGVidWdmcyBpbnRlcmZhY2UgZm9yIGFsbG9jYXRpbmcgcGFnZXMgdG8gZ2VuZXJhdGUgbWVtb3J5IHByZXNzdXJlLiBGdXp6aW5nIHRoaXMgaW50ZXJmYWNlIGNhbiBoZWxwIHVuY292ZXIgYnVncyBpbiB0aGUgaG9nZ2VyIGl0c2VsZiBvciB0cmlnZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjA0OjU1LjYzNjA0NTI5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDA4NTc0MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VBTExPQ19IT0dHRVJcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxX3BhZ2VfYWxsb2Nfd3JpdGVcIixcbiAgICBcImZyZWVfcGFnZV9hbGxvY193cml0ZVwiLFxuICAgIFwicGFnZV9hbGxvY19yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgYWxsb2NhdGluZyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUuIEZ1enppbmcgdGhpcyBpbnRlcmZhY2UgY2FuIGhlbHAgdW5jb3ZlciBidWdzIGluIHRoZSBob2dnZXIgaXRzZWxmIG9yIHRyaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjowNDo1NS42MzYwNTEyNjNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTUyMzQxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNDNhMzUyNjYzYWVkZDQyMTUzYWU0NGUxOTczOGQyYzc4YzVmNDdjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDYgMDI6MDQ6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWdcXG5pbmRleCA3NjM4ZDc1YjI3ZGI4Li5iYWQ4YTYwNjE1MmMzIDEwMDY0NFxcbi0tLSBhL21tL0tjb25maWcuZGVidWdcXG4rKysgYi9tbS9LY29uZmlnLmRlYnVnXFxuQEAgLTMwOSwzICszMDksMTUgQEAgY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbiBcXHQgIG92ZXJoZWFkIGluIHRoZSBwYWdlIGZhdWx0IHBhdGguXFxuIFxcbiBcXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cXG4rXFxuK2NvbmZpZyBQQUdFQUxMT0NfSE9HR0VSXFxuK1xcdHRyaXN0YXRlIFxcXCJBbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZXMgYW5kIG9yZGVyc1xcXCJcXG4rXFx0ZGVwZW5kcyBvbiBERUJVR19GU1xcbitcXHRoZWxwXFxuK1xcdCAgU2F5IFkgdG8gYWxsb2MgcGFnZXMgZnJvbSBkaWZmZXJlbnQgbm9kZXMsIHpvbmVzLCBtaWdyYXRlIHR5cGUgYW5kXFxuK1xcdCAgb3JkZXJzIHVzaW5nIHRoZSBkZWJ1ZyBmcyBmaWxlc3lzdGVtLiBUaGlzIGhlbHBzIHRvIGdlbmVyYXRlIG1lbW9yeVxcbitcXHQgIHByZXNzdXJlIGVhc2lseS4gVGhpcyBpcyB1c2VmdWwgdG8gZGVidWcgbWVtb3J5IHJlY2xhaW1zIGlzc3VlcyxcXG4rXFx0ICBPT00gdHJpZ2dlcnMsIHBhZ2UgbWlncmF0aW9uIGlzc3VlcywgZXRjLlxcbitcXG4rXFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuK1xcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXFxuaW5kZXggMmQwNTcwYTE2ZTViZS4uYjQ4ZjJhYzZlZTgwOCAxMDA2NDRcXG4tLS0gYS9tbS9NYWtlZmlsZVxcbisrKyBiL21tL01ha2VmaWxlXFxuQEAgLTEzMyw2ICsxMzMsNyBAQCBvYmotJChDT05GSUdfSURMRV9QQUdFX1RSQUNLSU5HKSArPSBwYWdlX2lkbGUub1xcbiBvYmotJChDT05GSUdfREVCVUdfUEFHRUFMTE9DKSArPSBkZWJ1Z19wYWdlX2FsbG9jLm9cXG4gb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXFxuIG9iai0kKENPTkZJR19EQU1PTikgKz0gZGFtb24vXFxuK29iai0kKENPTkZJR19QQUdFQUxMT0NfSE9HR0VSKSArPSBwYWdlX2FsbG9jX2hvZ2dlci5vXFxuIG9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xcbiBvYmotJChDT05GSUdfUEVSQ1BVX1NUQVRTKSArPSBwZXJjcHUtc3RhdHMub1xcbiBvYmotJChDT05GSUdfWk9ORV9ERVZJQ0UpICs9IG1lbXJlbWFwLm9cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvY19ob2dnZXIuYyBiL21tL3BhZ2VfYWxsb2NfaG9nZ2VyLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjcyYzA1MDVhNmY1YTdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbW0vcGFnZV9hbGxvY19ob2dnZXIuY1xcbkBAIC0wLDAgKzEsNjEwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFBhZ2UgYWxsb2NhdG9yIERlYnVnRlMgSW50ZXJmYWNlXFxuKyAqIEF1dGhvcjogSnVhbiBZZXNjYXMgXFx1MDAzY2p5ZXNjYXNAZ29vZ2xlLmNvbVxcdTAwM2VcXG4rICpcXG4rICogVGhpcyBtb2R1bGUgYWxsb3dzIHRvIG1ha2UgcGFnZSBhbGxvY3MgcGVyIG5vZGUsIHpvbmUsIG1pZ3JhdGUgdHlwZVxcbisgKiBhbmQgb3JkZXIgdXNpbmcgdGhlIERlYnVnRlMgZmlsZXN5c3RlbS5cXG4rICpcXG4rICogV2hlbiB0aGlzIG1vZHVsZSBpcyBpbnN0YWxsZWQgYW5kIHRoZSBkZWJ1Z2ZzIGlzIG1vdW50ZWQsIHRoZSBcXFwibW1cXFwiIGRpcmVjdG9yeVxcbisgKiB3aWxsIGJlIGNyZWF0ZWQgaW4gXFx1MDAzY2RlYnVnZnMgbW91bnQgcG9pbnRcXHUwMDNlL21tXFxcIiBkaXJlY3RvcnkuIFVuZGVyIHRoaXMgZGlyZWN0b3J5LFxcbisgKiB0aGVyZSB3aWxsIGJlIHN1YmRpcnMgdG8gc2VsZWN0IHRoZSBub2Rlcywgem9uZXMsIG9yZGVycyBhbmQgbWlncmF0ZSB0eXBlLlxcbisgKlxcbisgKiBGb3IgZXhhbXBsZTpcXG4rICpcXG4rICogICAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9cXG4rICogICAgICB8LS0gZnJlZVxcbisgKiAgICAgIGAtLSBub2RlLTBcXG4rICogICAgICAgICB8LS0gem9uZS1ETUFcXG4rICogICAgICAgICB8ICAgfC0tIG9yZGVyLTBcXG4rICogICAgICAgICB8ICAgfCAgIHwtLSBtaWdyYXRlLUhpZ2hBdG9taWNcXG4rICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgfCAgIHwgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlXFxuKyAqICAgICAgICAgfCAgIHwgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xcbisgKiAgICAgICAgIHwgICB8ICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcXG4rICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgfCAgIHwgICBgLS0gbWlncmF0ZS1Vbm1vdmFibGVcXG4rICogICAgICAgICB8ICAgfCAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgfCAgIHwtLSAuLi5cXG4rICogICAgICAgICB8ICAgfFxcbisgKiAgICAgICAgIHwgICBgLS0gb3JkZXItOVxcbisgKiAgICAgICAgIHwgICAgICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xcbisgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcXG4rICogICAgICAgICB8ICAgICAgIHwtLSBtaWdyYXRlLU1vdmFibGVcXG4rICogICAgICAgICB8ICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgfCAgICAgICB8LS0gbWlncmF0ZS1SZWNsYWltYWJsZVxcbisgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcXG4rICogICAgICAgICB8ICAgICAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxcbisgKiAgICAgICAgIHwgICAgICAgICAgIGAtLSBucl9wYWdlc19hbGxvY3NcXG4rICogICAgICAgICBgLS0gem9uZS1Ob3JtYWxcXG4rICogICAgICAgICAgICAgfC0tIG9yZGVyLTBcXG4rICogICAgICAgICAgICAgfCAgIHwtLSBtaWdyYXRlLUhpZ2hBdG9taWNcXG4rICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgIHwgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlXFxuKyAqICAgICAgICAgICAgIHwgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xcbisgKiAgICAgICAgICAgICB8ICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcXG4rICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgIHwgICBgLS0gbWlncmF0ZS1Vbm1vdmFibGVcXG4rICogICAgICAgICAgICAgfCAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgIHwtLSAuLi4uXFxuKyAqICAgICAgICAgICAgIHxcXG4rICogICAgICAgICAgICAgYC0tIG9yZGVyLTlcXG4rICogICAgICAgICAgICAgICAgIHwtLSBtaWdyYXRlLUhpZ2hBdG9taWNcXG4rICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgICAgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlXFxuKyAqICAgICAgICAgICAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xcbisgKiAgICAgICAgICAgICAgICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcXG4rICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqICAgICAgICAgICAgICAgICBgLS0gbWlncmF0ZS1Vbm1vdmFibGVcXG4rICogICAgICAgICAgICAgICAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXFxuKyAqXFxuKyAqIFVzYWdlOlxcbisgKlxcbisgKiAxLiBUbyB0cmlnZ2VyIHRoZSBhbGxvY2F0aW9uLCBuYXZpZ2F0ZSB0byB0aGUgZGVidWdmcyBwYXRoIGNvcnJlc3BvbmRpbmdcXG4rICogICAgdG8geW91ciB0YXJnZXQgbm9kZSwgbWVtb3J5IHpvbmUsIGFsbG9jYXRpb24gb3JkZXIsIGFuZCBtaWdyYXRpb24gdHlwZSxcXG4rICogICAgdGhlbiB3cml0ZSB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb24gY291bnQgdG8gbnJfcGFnZXNfYWxsb2NzLlxcbisgKlxcbisgKiAgICBGb3IgZXhhbXBsZSwgdG8gbWFrZSAzIGFsbG9jcyBvZiBvcmRlciA5LCBNaWdyYXRlIFR5cGUgTW92YWJsZSxcXG4rICogICAgWm9uZSBOb3JtYWwgYW5kIE5vZGUgMCwgcnVuOlxcbisgKlxcbisgKiAgICAkIGVjaG8gMyBcXHUwMDNlIC9zeXMva2VybmVsL2RlYnVnL21tL25vZGUtMC96b25lLU5vcm1hbC9vcmRlci05L21pZ3JhdGUtTW92YWJsZS9ucl9wYWdlc19hbGxvY3NcXG4rICpcXG4rICogMi4gRm9yIGVhY2ggYWxsb2NhdGlvbiBjcmVhdGVkLCBhIGNvcnJlc3BvbmRpbmcgZmlsZSBuYW1lZCBzZXF1ZW50aWFsbHlcXG4rICogICAgKDEsIDIsIG4pIHdpbGwgYXBwZWFyIGluIHRoYXQgZGlyZWN0b3J5LlxcbisgKlxcbisgKiAgICAkIGxzIC9zeXMva2VybmVsL2RlYnVnL21tL25vZGUtMC96b25lLU5vcm1hbC9vcmRlci05L21pZ3JhdGUtTW92YWJsZS9cXG4rICogICAgMSAgIDIgICAzICBucl9wYWdlc19hbGxvY3NcXG4rICpcXG4rICogMy4gVG8gZnJlZSB0aGUgYWxsb2NhdGlvbiwgd3JpdGUgdGhlIGFsbG9jYXRpb24gZmlsZSBuYW1lIGluIC9zeXMva2VybmVsL2RlYnVnL21tL2ZyZWUuXFxuKyAqICAgIEZvciBleGFtcGxlLCB0byByZWxlYXNlIHRoZSAybmQgYWxsb2NhdGlvbiBydW46XFxuKyAqXFxuKyAqICAgICQgZWNobyAyIFxcdTAwM2UgL3N5cy9rZXJuZWwvZGVidWcvbW0vZnJlZVxcbisgKi9cXG4rXFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9hdG9taWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcF90eXBlcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbXpvbmUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbm9kZW1hc2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByaW50ay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuK1xcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbW1kaXI7XFxuK1xcbisvKipcXG4rICogYXRvbWljX2xvbmdfdCBhbGxvY3NfZmlsZV9zZXEgLSBSZXByZXNlbnRzIHRoZSBuYW1pbmcgc2VxdWVuY2UgdXNlZCBmb3JcXG4rICogYWxsb2NhdGlvbiBmaWxlcy5cXG4rICovXFxuK3N0YXRpYyBhdG9taWNfbG9uZ190IGFsbG9jc19maWxlX3NlcSA9IEFUT01JQ19JTklUKDApO1xcbitcXG4rLyoqXFxuKyAqIGFsbG9jc194YSAtIFJlcHJlc2VudCB0aGUgeGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBhbGxvY2F0aW9ucyBwZXJmb3JtXFxuKyAqIGJ5IHRoaXMgZHJpdmVyLlxcbisgKi9cXG4rc3RhdGljIERFRklORV9YQVJSQVkoYWxsb2NzX3hhKTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcmVxX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb25cXG4rICogQG5vZGVfaWR4OiBUaGUgTm9kZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLlxcbisgKiBAem9uZV9pZHg6IFRoZSBab25lIGluZGV4IHRvIGFsbG9jYXRlIGZyb20uXFxuKyAqIEBvcmRlcjogVGhlIE9yZGVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlLlxcbisgKiBAbWlncmF0ZV90eXBlOiBUaGUgTWlncmF0ZSB0eXBlIHRvIGFsbG9jYXRlIGZyb20uXFxuKyAqIEBwYXJlbnRkaXI6IFRoZSBwYXJlbnQgZGlyIHdoZXJlIHRoZSBmaWxlIHJlcHJlc2VudGluZyB0aGUgYWxsb2Mgd2FzIGNyZWF0ZWQuXFxuKyAqL1xcbitzdHJ1Y3QgcmVxX2FsbG9jIHtcXG4rXFx0aW50IG5vZGVfaWR4O1xcbitcXHRpbnQgem9uZV9pZHg7XFxuK1xcdGludCBvcmRlcjtcXG4rXFx0aW50IG1pZ3JhdGVfdHlwZTtcXG4rXFx0c3RydWN0IGRlbnRyeSAqcGFyZW50ZGlyO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwYWdlX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcGFnZSBhbGxvY2F0aW9uLlxcbisgKiBAcGFnZTogVGhlIHBvaW50ZXIgdG8gdGhlIHBhZ2UocykgYWxsb2NhdGVkLlxcbisgKiBAcmVxX2FsbG9jOiBUaGUgZGV0YWlscyBvZiB0aGUgYWxsb2NhdGlvbi5cXG4rICogQGFsbG9jX2RlbnRyeTogVGhlIHBvaW50ZXIgdG8gdGhlIGZpbGUgdGhhdCByZXByZXNlbnRzIHRoZSBhbGxvY2F0aW9uLlxcbisgKi9cXG4rc3RydWN0IHBhZ2VfYWxsb2Mge1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFx0c3RydWN0IHJlcV9hbGxvYyAqcmVxX2FsbG9jO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICphbGxvY19kZW50cnk7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJlcV9hbGxvY19jYWNoZTtcXG4rc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwYWdlX2FsbG9jX2NhY2hlO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX3RvX2FsbG9jX2Zyb20oaW50IHpvbmVfaWR4LCBnZnBfdCAqZmxhZ3NfcHRyKVxcbit7XFxuK1xcdHN3aXRjaCAoem9uZV9pZHgpIHtcXG4rI2lmZGVmIENPTkZJR19aT05FX0RNQVxcbitcXHRjYXNlIFpPTkVfRE1BOlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0RNQTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbisjaWZkZWYgQ09ORklHX1pPTkVfRE1BMzJcXG4rXFx0Y2FzZSBaT05FX0RNQTMyOlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0RNQTMyO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfSElHSE1FTVxcbitcXHRjYXNlIFpPTkVfSElHSE1FTTpcXG4rXFx0XFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdITUVNO1xcbitcXHRcXHRicmVhaztcXG4rI2VuZGlmXFxuK1xcdGNhc2UgWk9ORV9NT1ZBQkxFOlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX01PVkFCTEU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFpPTkVfTk9STUFMOlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbWlncmF0ZV90eXBlX3RvX2FsbG9jX2Zyb20oaW50IG1pZ3JhdGVfdHlwZSwgZ2ZwX3QgKmZsYWdzX3B0cilcXG4re1xcbitcXHRzd2l0Y2ggKG1pZ3JhdGVfdHlwZSkge1xcbitcXHRjYXNlIE1JR1JBVEVfVU5NT1ZBQkxFOlxcbitcXHRcXHQqZmxhZ3NfcHRyIFxcdTAwMjY9IH4oX19HRlBfUkVDTEFJTUFCTEUgfCBfX0dGUF9NT1ZBQkxFKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUlHUkFURV9SRUNMQUlNQUJMRTpcXG4rXFx0XFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9SRUNMQUlNQUJMRTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUlHUkFURV9ISUdIQVRPTUlDOlxcbitcXHRcXHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0hJR0g7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIE1JR1JBVEVfTU9WQUJMRTogZGVmYXVsdDpcXG4rXFx0XFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9NT1ZBQkxFO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCBwYWdlX2FsbG9jX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLFxcbitcXHRcXHRcXHRcXHQgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKVxcbit7XFxuK1xcdC8qICBXaGljaCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJpbnQgYWJvdXQgdGhlIHBhZ2Ugb3IgYWxsb2NhdGlvbj8gKi9cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBhZ2VfYWxsb2NfZm9wcyA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5vcGVuID0gc2ltcGxlX29wZW4sXFxuK1xcdC5yZWFkID0gcGFnZV9hbGxvY19yZWFkLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBtYWtlX2FsbG9jKHN0cnVjdCByZXFfYWxsb2MgKnJlcSxcXG4rXFx0XFx0XFx0ICAgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBsb25nICphbGxvY19pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZV9hbGxvYyAqcGE7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXHRjaGFyIG5ld19hbGxvY19uYW1lWzIwXTtcXG4rXFx0c3RydWN0IGRlbnRyeSAqbmV3X2FsbG9jX2RlbnRyeTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBhZ2UgPSBhbGxvY19wYWdlc19ub2RlX25vcHJvZihyZXEtXFx1MDAzZW5vZGVfaWR4LCBmbGFncywgcmVxLVxcdTAwM2VvcmRlcik7XFxuK1xcdGlmIChwYWdlKSB7XFxuK1xcdFxcdHBhID0ga21lbV9jYWNoZV9hbGxvYyhwYWdlX2FsbG9jX2NhY2hlLCBHRlBfS0VSTkVMKTtcXG4rXFx0XFx0aWYgKCFwYSkge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIGZyZWVfcGFnZXM7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdCphbGxvY19pZCA9IGF0b21pY19sb25nX2luY19yZXR1cm4oXFx1MDAyNmFsbG9jc19maWxlX3NlcSk7XFxuK1xcdFxcdHNucHJpbnRmKG5ld19hbGxvY19uYW1lLCBzaXplb2YobmV3X2FsbG9jX25hbWUpLCBcXFwiJWx1XFxcIixcXG4rXFx0XFx0XFx0ICphbGxvY19pZCk7XFxuK1xcbitcXHRcXHRuZXdfYWxsb2NfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShcXG4rXFx0XFx0XFx0bmV3X2FsbG9jX25hbWUsIDA0MDAsIHJlcS1cXHUwMDNlcGFyZW50ZGlyLFxcbitcXHRcXHRcXHRwYSwgXFx1MDAyNnBhZ2VfYWxsb2NfZm9wcyk7XFxuK1xcdFxcdGlmIChJU19FUlIobmV3X2FsbG9jX2RlbnRyeSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihuZXdfYWxsb2NfZGVudHJ5KTtcXG4rXFx0XFx0XFx0Z290byBmcmVlX3BhZ2VfYWxsb2M7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHBhLVxcdTAwM2VyZXFfYWxsb2MgPSByZXE7XFxuK1xcdFxcdHBhLVxcdTAwM2VwYWdlID0gcGFnZTtcXG4rXFx0XFx0cGEtXFx1MDAzZWFsbG9jX2RlbnRyeSA9IG5ld19hbGxvY19kZW50cnk7XFxuK1xcbitcXHRcXHRyZXQgPSB4YV9pbnNlcnQoXFx1MDAyNmFsbG9jc194YSwgKmFsbG9jX2lkLCBwYSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVtb3ZlX2FsbG9jX2RlbnRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rcmVtb3ZlX2FsbG9jX2RlbnRyeTpcXG4rXFx0ZGVidWdmc19yZW1vdmUobmV3X2FsbG9jX2RlbnRyeSk7XFxuK1xcbitmcmVlX3BhZ2VfYWxsb2M6XFxuK1xcdGttZW1fY2FjaGVfZnJlZShwYWdlX2FsbG9jX2NhY2hlLCBwYSk7XFxuK1xcbitmcmVlX3BhZ2VzOlxcbitcXHRfX2ZyZWVfcGFnZXMocGFnZSwgcmVxLVxcdTAwM2VvcmRlcik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGZyZWVfYWxsb2NfaGVscGVyKHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xcbitcXG4rXFx0cGEgPSB4YV9lcmFzZShcXHUwMDI2YWxsb2NzX3hhLCBhbGxvY19pZCk7XFxuK1xcdGlmICghcGEpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCJUaGUgYWxsb2NfaWQgJWx1IHdhcyBub3QgZm91bmQhXFxcIiwgYWxsb2NfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0X19mcmVlX3BhZ2VzKHBhLVxcdTAwM2VwYWdlLCBwYS1cXHUwMDNlcmVxX2FsbG9jLVxcdTAwM2VvcmRlcik7XFxuK1xcdGRlYnVnZnNfcmVtb3ZlKHBhLVxcdTAwM2VhbGxvY19kZW50cnkpO1xcbitcXHRrbWVtX2NhY2hlX2ZyZWUocGFnZV9hbGxvY19jYWNoZSwgcGEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByZXFfcGFnZV9hbGxvY193cml0ZSgpIC0gQWxsb2NhdGVzIHRoZSBwYWdlcyBvbiB0aGUgcmVxdWVzdGVkIG5vZGUsIHpvbmUsXFxuKyAqIG9yZGVyIGFuZCBtaWdyYXRlIHR5cGUuIE9uY2UgdGhlIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkLCBhIGZpbGUgaXMgY3JlYXRlZFxcbisgKiB0byBmcmVlIHRoZSBhbGxvY2F0aW9uIGxhdGVyLlxcbisgKi9cXG4rc3RhdGljIHNzaXplX3QgcmVxX3BhZ2VfYWxsb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHRzdHJ1Y3QgcmVxX2FsbG9jICpyZXEgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuK1xcdHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXNfYWxsb2NzO1xcbitcXHR1bnNpZ25lZCBsb25nICphbGxvY3NfaWRzO1xcbitcXHRnZnBfdCBmbGFncyA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNudCwgMTAsIFxcdTAwMjZucl9wYWdlc19hbGxvY3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0YWxsb2NzX2lkcyA9IGttYWxsb2NfYXJyYXkobnJfcGFnZXNfYWxsb2NzLCBzaXplb2YodW5zaWduZWQgbG9uZyksXFxuK1xcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWFsbG9jc19pZHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0c2V0X3pvbmVfdG9fYWxsb2NfZnJvbShyZXEtXFx1MDAzZXpvbmVfaWR4LCBcXHUwMDI2ZmxhZ3MpO1xcbitcXHRzZXRfbWlncmF0ZV90eXBlX3RvX2FsbG9jX2Zyb20ocmVxLVxcdTAwM2VtaWdyYXRlX3R5cGUsIFxcdTAwMjZmbGFncyk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXNfYWxsb2NzOyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gbWFrZV9hbGxvYyhyZXEsIGZsYWdzLCBcXHUwMDI2YWxsb2NfaWQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfYWxsb2NzO1xcbitcXG4rXFx0XFx0YWxsb2NzX2lkc1tpXSA9IGFsbG9jX2lkO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShhbGxvY3NfaWRzKTtcXG4rXFxuK1xcdHJldHVybiBjbnQ7XFxuK1xcbitmcmVlX2FsbG9jczpcXG4rXFx0LyogRnJlZSBhbGwgdGhlIHBhZ2VzIGFuZCByZXNvdXJjZXMgcHJldmlvdXNseSBhbGxvY2F0ZWQuICovXFxuK1xcdGZvciAoaW50IGogPSAwOyBqIFxcdTAwM2MgaTsgaisrKSB7XFxuK1xcdFxcdGludCByZXQyID0gZnJlZV9hbGxvY19oZWxwZXIoYWxsb2NzX2lkc1tqXSk7XFxuK1xcbitcXHRcXHRpZiAocmV0MilcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJVbmFibGUgdG8gZnJlZSBwYWdlcyBhc3NvY2lhdGVkIHdpdGggZmlsZSAlbHVcXFwiLFxcbitcXHRcXHRcXHQgICAgICAgYWxsb2NzX2lkc1tqXSk7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGFsbG9jc19pZHMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVxX3BhZ2VfYWxsb2NfZm9wcyA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC5vcGVuID0gc2ltcGxlX29wZW4sXFxuK1xcdC53cml0ZSA9IHJlcV9wYWdlX2FsbG9jX3dyaXRlLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIGZyZWVfcGFnZV9hbGxvY193cml0ZSgpIC0gZnJlZSB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgcGFnZXMuXFxuKyAqIEBmaWxlOiBGaWxlIHdoZXJlIHRoZSB1c2VyIGlzIHdyaXRpbmcuXFxuKyAqIEB1YnVmOiBDb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGUgdXNlciB3YW50cyB0byBkZWxldGUgYW5kIGhhdmUgdGhlXFxuKyAqICAgICAgIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhhdCBmaWxlIGZyZWVkLlxcbisgKiBAY250OiBTaXplIG9mIEB1YnVmLlxcbisgKiBAcHBvczogQ3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZS5cXG4rICovXFxuK3N0YXRpYyBzc2l6ZV90IGZyZWVfcGFnZV9hbGxvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGxvZmZfdCAqcHBvcylcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHR1bnNpZ25lZCBsb25nIGFsbG9jX2lkO1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNudCwgMTAsIFxcdTAwMjZhbGxvY19pZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY19pZCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gY250O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmcmVlX3BhZ2VfYWxsb2NfZm9wcyA9IHtcXG4rXFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuK1xcdC53cml0ZSA9IGZyZWVfcGFnZV9hbGxvY193cml0ZSxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUoKSAtIENyZWF0ZXMgdGhlIGZpbGUgXFxcIm5yX3BhZ2VzX2FsbG9jc1xcXCIuXFxuKyAqXFxuKyAqIFRoZSBcXFwibnJfcGFnZXNfYWxsb2NzXFxcIiBmaWxlIHdpbGwgYmUgdXNlZCB0byB3cml0ZSB0aGUgbnVtYmVyIG9mIGFsbG9jYXRpb25zXFxuKyAqIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQuIFdoZW4gdGhlIGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQsIGEgbmV3IGZpbGUgZm9yXFxuKyAqIGVhY2ggYWxsb2NhdGlvbiB3aWxsIGJlIGNyZWF0ZWQgaW4gQG1pZ3JhdGVkaXIuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUoc3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgaW50IHpvbmVfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgb3JkZXIsIGludCBtdHlwZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmVxX2FsbG9jICpyZXE7XFxuK1xcdHN0cnVjdCBkZW50cnkgKm5yX3BhZ2VzO1xcbitcXG4rXFx0cmVxID0ga21lbV9jYWNoZV9hbGxvYyhyZXFfYWxsb2NfY2FjaGUsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJlcSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBjcmVhdGUgbnJfcGFnZXNfYWxsb2NzX2luZm9cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHJlcS1cXHUwMDNlbm9kZV9pZHggPSBuaWQ7XFxuK1xcdHJlcS1cXHUwMDNlem9uZV9pZHggPSB6b25lX2lkeDtcXG4rXFx0cmVxLVxcdTAwM2VvcmRlciA9IG9yZGVyO1xcbitcXHRyZXEtXFx1MDAzZW1pZ3JhdGVfdHlwZSA9IG10eXBlO1xcbitcXHRyZXEtXFx1MDAzZXBhcmVudGRpciA9IG1pZ3JhdGVkaXI7XFxuK1xcbitcXHRucl9wYWdlcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXFxcIm5yX3BhZ2VzX2FsbG9jc1xcXCIsIDAyMDAsIG1pZ3JhdGVkaXIsIHJlcSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZyZXFfcGFnZV9hbGxvY19mb3BzKTtcXG4rXFx0aWYgKElTX0VSUihucl9wYWdlcykpIHtcXG4rXFx0XFx0a21lbV9jYWNoZV9mcmVlKHJlcV9hbGxvY19jYWNoZSwgcmVxKTtcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIobnJfcGFnZXMpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBtaWdyYXRlIHR5cGVcXG4rICogaW5zaWRlIHRoZSBvcmRlciBkaXJlY3RvcnkuIE9uY2UgdGhlIG1pZ3JhdGUgdHlwZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXRcXG4rICogY3JlYXRlcyB0aGUgXFxcIm5yX3BhZ2VzX2FsbG9jc1xcXCIgZmlsZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICpvcmRlcmRpciwgaW50IG5pZCxcXG4rXFx0XFx0XFx0XFx0XFx0aW50IHpvbmVfaWR4LCBpbnQgb3JkZXIpXFxuK3tcXG4rXFx0c3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpcjtcXG4rXFx0Y2hhciBkaXJuYW1lWzI0XTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvciAoaW50IG10eXBlID0gMDsgbXR5cGUgXFx1MDAzYyBNSUdSQVRFX1RZUEVTOyBtdHlwZSsrKSB7XFxuKyNpZmRlZiBDT05GSUdfQ01BXFxuK1xcdFxcdGlmIChtdHlwZSA9PSBNSUdSQVRFX0NNQSkgLyogQ01BIGFsbG9jcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQqL1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTlxcbitcXHRcXHRpZiAobXR5cGUgPT0gTUlHUkFURV9JU09MQVRFKSAvKiBjYW4ndCBhbGxvY2F0ZSBmcm9tIGhlcmUgKi9cXG4rXFx0XFx0XFx0Y29udGludWU7XFxuKyNlbmRpZlxcbitcXHRcXHRpZiAoem9uZV9pZHggPT0gWk9ORV9NT1ZBQkxFIFxcdTAwMjZcXHUwMDI2IG10eXBlICE9IE1JR1JBVEVfTU9WQUJMRSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksIFxcXCJtaWdyYXRlLSVzXFxcIixcXG4rXFx0XFx0XFx0IG1pZ3JhdGV0eXBlX25hbWVzW210eXBlXSk7XFxuK1xcdFxcdG1pZ3JhdGVkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgb3JkZXJkaXIpO1xcbitcXHRcXHRpZiAoSVNfRVJSKG1pZ3JhdGVkaXIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtaWdyYXRlZGlyKTtcXG4rXFxuK1xcdFxcdHJldCA9IGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZShtaWdyYXRlZGlyLCBuaWQsIHpvbmVfaWR4LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRvcmRlciwgbXR5cGUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKCkgLSBDcmVhdGVzIGEgZGlyZWN0b3J5IGZvciBlYWNoIHBhZ2Ugb3JkZXIgaW5zaWRlXFxuKyAqIHRoZSB6b25lIGRpcmVjdG9yeS4gT25jZSB0aGF0IHRoZSBwYWdlIG9yZGVyIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCBpdCBjcmVhdGVzXFxuKyAqIGEgZGlyZWN0b3J5IGZvciBlYWNoIG1pZ3JhdGUgdHlwZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKHN0cnVjdCBkZW50cnkgKnpvbmVkaXIsIGludCBuaWQsXFxuK1xcdFxcdFxcdFxcdFxcdGludCB6b25lX2lkeClcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpvcmRlcmRpcjtcXG4rXFx0Y2hhciBkaXJuYW1lWzEyXTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvciAoaW50IG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBOUl9QQUdFX09SREVSUzsgb3JkZXIrKykge1xcbitcXHRcXHRzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksIFxcXCJvcmRlci0lZFxcXCIsIG9yZGVyKTtcXG4rXFx0XFx0b3JkZXJkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgem9uZWRpcik7XFxuK1xcdFxcdGlmIChJU19FUlIob3JkZXJkaXIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihvcmRlcmRpcik7XFxuK1xcbitcXHRcXHRyZXQgPSBjcmVhdGVfbWlncmF0ZV90eXBlX3N1YmRpcnMob3JkZXJkaXIsIG5pZCwgem9uZV9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG9yZGVyKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBjcmVhdGVfem9uZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBwb3B1bGF0ZWQgem9uZSBpbiB0aGVcXG4rICogbm9kZS4gT25jZSB0aGF0IHRoZSB6b25lIGRpcmVjdG9yeSBpcyBjcmVhdGVkLCBpdCBjcmVhdGVzIGEgZGlyZWN0b3J5IGZvclxcbisgKiBlYWNoIG9yZGVyIHN1cHBvcnRlZC5cXG4rICpcXG4rICogTm90ZTogWk9ORV9ERVZJQ0UgcGFnZXMgd29uJ3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMgZHJpdmVyLiBUaGUgbWFpbiByZWFzb25cXG4rICogaXMgYmVjYXVzZSB0aGV5IGFyZSBub3QgbWFuYWdlZCBieSB0aGUgQnVkZHkgQWxsb2NhdG9yIG9yIENNQSBhbGxvY2F0b3IuXFxuKyAqL1xcbitzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfem9uZXNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICpub2RlZGlyLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSwgaW50IG5pZClcXG4re1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICp6b25lZGlyO1xcbitcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4rXFx0c3RydWN0IHpvbmUgKm5vZGVfem9uZXMgPSBwZ2RhdGEtXFx1MDAzZW5vZGVfem9uZXM7XFxuK1xcdGludCB6b25lX2lkeDtcXG4rXFx0Y2hhciBkaXJuYW1lWzI0XTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvciAoem9uZSA9IG5vZGVfem9uZXMsIHpvbmVfaWR4ID0gMDsgem9uZSAtIG5vZGVfem9uZXMgXFx1MDAzYyBNQVhfTlJfWk9ORVM7XFxuK1xcdFxcdFxcdCsrem9uZSwgKyt6b25lX2lkeCkge1xcbitcXHRcXHRpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdC8qIFpPTkVfREVWSUNFIHBhZ2VzIHdvbid0IGJlIGFsbG9jYXRlZCB1c2luZyB0aGlzIGRyaXZlci4gKi9cXG4rXFx0XFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcXFwiem9uZS0lc1xcXCIsIHpvbmUtXFx1MDAzZW5hbWUpO1xcbitcXHRcXHR6b25lZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG5vZGVkaXIpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHpvbmVkaXIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih6b25lZGlyKTtcXG4rXFxuK1xcdFxcdHJldCA9IGNyZWF0ZV9wYWdlX29yZGVyc19zdWJkaXJzKHpvbmVkaXIsIG5pZCwgem9uZV9pZHgpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGNyZWF0ZV9ub2Rlc19zdWJkaXJzKCkgLSBDcmVhdGVzIGEgZGlyZWN0b3J5IGZvciBlYWNoIG5vZGUgdGhhdCBjb250YWluc1xcbisgKiBtZW1vcnkuIE9uY2UgdGhhdCB0aGUgbm9kZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBmb3JcXG4rICogZWFjaCB6b25lIGluIHRoZSBub2RlLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBpbnQgY3JlYXRlX25vZGVzX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqbW1kaXIpXFxuK3tcXG4rXFx0c3RydWN0IGRlbnRyeSAqbm9kZWRpcjtcXG4rXFx0Y2hhciBkaXJuYW1lWzEyXTtcXG4rXFx0aW50IG5pZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbitcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSA9IE5PREVfREFUQShuaWQpO1xcbitcXG4rXFx0XFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcXFwibm9kZS0lZFxcXCIsIG5pZCk7XFxuK1xcdFxcdG5vZGVkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgbW1kaXIpO1xcbitcXHRcXHRpZiAoSVNfRVJSKG5vZGVkaXIpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihub2RlZGlyKTtcXG4rXFxuK1xcdFxcdHJldCA9IGNyZWF0ZV96b25lc19zdWJkaXJzKG5vZGVkaXIsIHBnZGF0YSwgbmlkKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBkZW50cnkgKmZyZWVfZmlsZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJlcV9hbGxvY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKFxcbitcXHRcXHRcXFwicmVxX2FsbG9jX2NhY2hlXFxcIiwgc2l6ZW9mKHN0cnVjdCByZXFfYWxsb2MpLCAwLFxcbitcXHRcXHRTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpO1xcbitcXHRpZiAoIXJlcV9hbGxvY19jYWNoZSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIlRoZSByZXFfYWxsb2NfY2FjaGUgY291bGRuJ3QgYmUgY3JlYXRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyb3JfZXhpdDtcXG4rXFx0fVxcbitcXG4rXFx0cGFnZV9hbGxvY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKFxcbitcXHRcXHRcXFwicGFnZV9hbGxvY19jYWNoZVxcXCIsIHNpemVvZihzdHJ1Y3QgcGFnZV9hbGxvYyksIDAsXFxuK1xcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XFxuK1xcdGlmICghcGFnZV9hbGxvY19jYWNoZSkge1xcbitcXHRcXHRwcl9lcnIoXFxcIlRoZSBwYWdlX2FsbG9jX2NhY2hlIGNvdWxkbid0IGJlIGNyZWF0ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGNsZWFuX3JlcV9hbGxvY19jYWNoZTtcXG4rXFx0fVxcbitcXG4rXFx0bW1kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcIm1tXFxcIiwgTlVMTCk7XFxuK1xcdGlmIChJU19FUlIobW1kaXIpKSB7XFxuK1xcdFxcdHByX2VycihcXFwiVW5hYmxlIHRvIGNyZWF0ZSBtbSBkaXJlY3RvcnlcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKG1tZGlyKTtcXG4rXFx0XFx0Z290byBjbGVhbl9wYWdlX2FsbG9jX2NhY2hlO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBjcmVhdGVfbm9kZXNfc3ViZGlycyhtbWRpcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gY2xlYW5fZGlyO1xcbitcXG4rXFx0ZnJlZV9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShcXFwiZnJlZVxcXCIsIDAyMDAsIG1tZGlyLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZnJlZV9wYWdlX2FsbG9jX2ZvcHMpO1xcbitcXHRpZiAoSVNfRVJSKGZyZWVfZmlsZSkpIHtcXG4rXFx0XFx0cmV0ID0gUFRSX0VSUihmcmVlX2ZpbGUpO1xcbitcXHRcXHRnb3RvIGNsZWFuX2RpcjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitjbGVhbl9kaXI6XFxuK1xcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShtbWRpcik7XFxuK1xcbitjbGVhbl9wYWdlX2FsbG9jX2NhY2hlOlxcbitcXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocGFnZV9hbGxvY19jYWNoZSk7XFxuK1xcbitjbGVhbl9yZXFfYWxsb2NfY2FjaGU6XFxuK1xcdGttZW1fY2FjaGVfZGVzdHJveShyZXFfYWxsb2NfY2FjaGUpO1xcbitcXG4rZXJyb3JfZXhpdDpcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgX19leGl0IHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfZXhpdCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlX2FsbG9jICpwYTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpZHg7XFxuK1xcbitcXHR4YV9mb3JfZWFjaChcXHUwMDI2YWxsb2NzX3hhLCBpZHgsIHBhKVxcbitcXHRcXHRmcmVlX2FsbG9jX2hlbHBlcihpZHgpO1xcbitcXG4rXFx0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG1tZGlyKTtcXG4rXFx0a21lbV9jYWNoZV9kZXN0cm95KHJlcV9hbGxvY19jYWNoZSk7XFxuK1xcdGttZW1fY2FjaGVfZGVzdHJveShwYWdlX2FsbG9jX2NhY2hlKTtcXG4rfVxcbitcXG4rbW9kdWxlX2luaXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19pbml0KTtcXG4rbW9kdWxlX2V4aXQocGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19leGl0KTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIkp1YW4gWWVzY2FzXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTW9kdWxlIHRvIGFsbG9jIHBhZ2VzIHRvIGdlbmVyYXRlIG1lbW9yeSBwcmVzc3VyZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjA0OjU2Ljk1MjAyNjQ3N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExNjkyNTg0MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VBTExPQ19IT0dHRVJcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxX3BhZ2VfYWxsb2Nfd3JpdGVcIixcbiAgICBcImZyZWVfcGFnZV9hbGxvY193cml0ZVwiLFxuICAgIFwicGFnZV9hbGxvY19yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgYWxsb2NhdGluZyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUuIEZ1enppbmcgdGhpcyBpbnRlcmZhY2UgY2FuIGhlbHAgdW5jb3ZlciBidWdzIGluIHRoZSBob2dnZXIgaXRzZWxmIG9yIHRyaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNDNhMzUyNjYzYWVkZDQyMTUzYWU0NGUxOTczOGQyYzc4YzVmNDdjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwMjowNDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL0tjb25maWcuZGVidWcgYi9tbS9LY29uZmlnLmRlYnVnXG5pbmRleCA3NjM4ZDc1YjI3ZGI4Li5iYWQ4YTYwNjE1MmMzIDEwMDY0NFxuLS0tIGEvbW0vS2NvbmZpZy5kZWJ1Z1xuKysrIGIvbW0vS2NvbmZpZy5kZWJ1Z1xuQEAgLTMwOSwzICszMDksMTUgQEAgY29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuIFx0ICBvdmVyaGVhZCBpbiB0aGUgcGFnZSBmYXVsdCBwYXRoLlxuIFxuIFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4rXG4rY29uZmlnIFBBR0VBTExPQ19IT0dHRVJcbitcdHRyaXN0YXRlIFwiQWxsb2MgcGFnZXMgZnJvbSBkaWZmZXJlbnQgbm9kZXMsIHpvbmVzLCBtaWdyYXRlIHR5cGVzIGFuZCBvcmRlcnNcIlxuK1x0ZGVwZW5kcyBvbiBERUJVR19GU1xuK1x0aGVscFxuK1x0ICBTYXkgWSB0byBhbGxvYyBwYWdlcyBmcm9tIGRpZmZlcmVudCBub2Rlcywgem9uZXMsIG1pZ3JhdGUgdHlwZSBhbmRcbitcdCAgb3JkZXJzIHVzaW5nIHRoZSBkZWJ1ZyBmcyBmaWxlc3lzdGVtLiBUaGlzIGhlbHBzIHRvIGdlbmVyYXRlIG1lbW9yeVxuK1x0ICBwcmVzc3VyZSBlYXNpbHkuIFRoaXMgaXMgdXNlZnVsIHRvIGRlYnVnIG1lbW9yeSByZWNsYWltcyBpc3N1ZXMsXG4rXHQgIE9PTSB0cmlnZ2VycywgcGFnZSBtaWdyYXRpb24gaXNzdWVzLCBldGMuXG4rXG4rXHQgIElmIGluIGRvdWJ0LCBzYXkgTi5cbitcbmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlXG5pbmRleCAyZDA1NzBhMTZlNWJlLi5iNDhmMmFjNmVlODA4IDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbisrKyBiL21tL01ha2VmaWxlXG5AQCAtMTMzLDYgKzEzMyw3IEBAIG9iai0kKENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcpICs9IHBhZ2VfaWRsZS5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VBTExPQykgKz0gZGVidWdfcGFnZV9hbGxvYy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX1BBR0VfUkVGKSArPSBkZWJ1Z19wYWdlX3JlZi5vXG4gb2JqLSQoQ09ORklHX0RBTU9OKSArPSBkYW1vbi9cbitvYmotJChDT05GSUdfUEFHRUFMTE9DX0hPR0dFUikgKz0gcGFnZV9hbGxvY19ob2dnZXIub1xuIG9iai0kKENPTkZJR19IQVJERU5FRF9VU0VSQ09QWSkgKz0gdXNlcmNvcHkub1xuIG9iai0kKENPTkZJR19QRVJDUFVfU1RBVFMpICs9IHBlcmNwdS1zdGF0cy5vXG4gb2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBtZW1yZW1hcC5vXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvY19ob2dnZXIuYyBiL21tL3BhZ2VfYWxsb2NfaG9nZ2VyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi43MmMwNTA1YTZmNWE3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9tbS9wYWdlX2FsbG9jX2hvZ2dlci5jXG5AQCAtMCwwICsxLDYxMCBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBQYWdlIGFsbG9jYXRvciBEZWJ1Z0ZTIEludGVyZmFjZVxuKyAqIEF1dGhvcjogSnVhbiBZZXNjYXMgXHUwMDNjanllc2Nhc0Bnb29nbGUuY29tXHUwMDNlXG4rICpcbisgKiBUaGlzIG1vZHVsZSBhbGxvd3MgdG8gbWFrZSBwYWdlIGFsbG9jcyBwZXIgbm9kZSwgem9uZSwgbWlncmF0ZSB0eXBlXG4rICogYW5kIG9yZGVyIHVzaW5nIHRoZSBEZWJ1Z0ZTIGZpbGVzeXN0ZW0uXG4rICpcbisgKiBXaGVuIHRoaXMgbW9kdWxlIGlzIGluc3RhbGxlZCBhbmQgdGhlIGRlYnVnZnMgaXMgbW91bnRlZCwgdGhlIFwibW1cIiBkaXJlY3RvcnlcbisgKiB3aWxsIGJlIGNyZWF0ZWQgaW4gXHUwMDNjZGVidWdmcyBtb3VudCBwb2ludFx1MDAzZS9tbVwiIGRpcmVjdG9yeS4gVW5kZXIgdGhpcyBkaXJlY3RvcnksXG4rICogdGhlcmUgd2lsbCBiZSBzdWJkaXJzIHRvIHNlbGVjdCB0aGUgbm9kZXMsIHpvbmVzLCBvcmRlcnMgYW5kIG1pZ3JhdGUgdHlwZS5cbisgKlxuKyAqIEZvciBleGFtcGxlOlxuKyAqXG4rICogICAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9cbisgKiAgICAgIHwtLSBmcmVlXG4rICogICAgICBgLS0gbm9kZS0wXG4rICogICAgICAgICB8LS0gem9uZS1ETUFcbisgKiAgICAgICAgIHwgICB8LS0gb3JkZXItMFxuKyAqICAgICAgICAgfCAgIHwgICB8LS0gbWlncmF0ZS1IaWdoQXRvbWljXG4rICogICAgICAgICB8ICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICB8ICAgfCAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbisgKiAgICAgICAgIHwgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgIHwgICB8ICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcbisgKiAgICAgICAgIHwgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgIHwgICB8ICAgYC0tIG1pZ3JhdGUtVW5tb3ZhYmxlXG4rICogICAgICAgICB8ICAgfCAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICB8ICAgfC0tIC4uLlxuKyAqICAgICAgICAgfCAgIHxcbisgKiAgICAgICAgIHwgICBgLS0gb3JkZXItOVxuKyAqICAgICAgICAgfCAgICAgICB8LS0gbWlncmF0ZS1IaWdoQXRvbWljXG4rICogICAgICAgICB8ICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICB8ICAgICAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbisgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgIHwgICAgICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcbisgKiAgICAgICAgIHwgICAgICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgIHwgICAgICAgYC0tIG1pZ3JhdGUtVW5tb3ZhYmxlXG4rICogICAgICAgICB8ICAgICAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICBgLS0gem9uZS1Ob3JtYWxcbisgKiAgICAgICAgICAgICB8LS0gb3JkZXItMFxuKyAqICAgICAgICAgICAgIHwgICB8LS0gbWlncmF0ZS1IaWdoQXRvbWljXG4rICogICAgICAgICAgICAgfCAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICAgICAgfCAgIHwtLSBtaWdyYXRlLU1vdmFibGVcbisgKiAgICAgICAgICAgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgICAgICB8ICAgfC0tIG1pZ3JhdGUtUmVjbGFpbWFibGVcbisgKiAgICAgICAgICAgICB8ICAgfCAgIGAtLSBucl9wYWdlc19hbGxvY3NcbisgKiAgICAgICAgICAgICB8ICAgYC0tIG1pZ3JhdGUtVW5tb3ZhYmxlXG4rICogICAgICAgICAgICAgfCAgICAgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICAgICAgfC0tIC4uLi5cbisgKiAgICAgICAgICAgICB8XG4rICogICAgICAgICAgICAgYC0tIG9yZGVyLTlcbisgKiAgICAgICAgICAgICAgICAgfC0tIG1pZ3JhdGUtSGlnaEF0b21pY1xuKyAqICAgICAgICAgICAgICAgICB8ICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuKyAqICAgICAgICAgICAgICAgICB8LS0gbWlncmF0ZS1Nb3ZhYmxlXG4rICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICAgICAgICAgIHwtLSBtaWdyYXRlLVJlY2xhaW1hYmxlXG4rICogICAgICAgICAgICAgICAgIHwgICBgLS0gbnJfcGFnZXNfYWxsb2NzXG4rICogICAgICAgICAgICAgICAgIGAtLSBtaWdyYXRlLVVubW92YWJsZVxuKyAqICAgICAgICAgICAgICAgICAgICAgYC0tIG5yX3BhZ2VzX2FsbG9jc1xuKyAqXG4rICogVXNhZ2U6XG4rICpcbisgKiAxLiBUbyB0cmlnZ2VyIHRoZSBhbGxvY2F0aW9uLCBuYXZpZ2F0ZSB0byB0aGUgZGVidWdmcyBwYXRoIGNvcnJlc3BvbmRpbmdcbisgKiAgICB0byB5b3VyIHRhcmdldCBub2RlLCBtZW1vcnkgem9uZSwgYWxsb2NhdGlvbiBvcmRlciwgYW5kIG1pZ3JhdGlvbiB0eXBlLFxuKyAqICAgIHRoZW4gd3JpdGUgdGhlIHJlcXVlc3RlZCBhbGxvY2F0aW9uIGNvdW50IHRvIG5yX3BhZ2VzX2FsbG9jcy5cbisgKlxuKyAqICAgIEZvciBleGFtcGxlLCB0byBtYWtlIDMgYWxsb2NzIG9mIG9yZGVyIDksIE1pZ3JhdGUgVHlwZSBNb3ZhYmxlLFxuKyAqICAgIFpvbmUgTm9ybWFsIGFuZCBOb2RlIDAsIHJ1bjpcbisgKlxuKyAqICAgICQgZWNobyAzIFx1MDAzZSAvc3lzL2tlcm5lbC9kZWJ1Zy9tbS9ub2RlLTAvem9uZS1Ob3JtYWwvb3JkZXItOS9taWdyYXRlLU1vdmFibGUvbnJfcGFnZXNfYWxsb2NzXG4rICpcbisgKiAyLiBGb3IgZWFjaCBhbGxvY2F0aW9uIGNyZWF0ZWQsIGEgY29ycmVzcG9uZGluZyBmaWxlIG5hbWVkIHNlcXVlbnRpYWxseVxuKyAqICAgICgxLCAyLCBuKSB3aWxsIGFwcGVhciBpbiB0aGF0IGRpcmVjdG9yeS5cbisgKlxuKyAqICAgICQgbHMgL3N5cy9rZXJuZWwvZGVidWcvbW0vbm9kZS0wL3pvbmUtTm9ybWFsL29yZGVyLTkvbWlncmF0ZS1Nb3ZhYmxlL1xuKyAqICAgIDEgICAyICAgMyAgbnJfcGFnZXNfYWxsb2NzXG4rICpcbisgKiAzLiBUbyBmcmVlIHRoZSBhbGxvY2F0aW9uLCB3cml0ZSB0aGUgYWxsb2NhdGlvbiBmaWxlIG5hbWUgaW4gL3N5cy9rZXJuZWwvZGVidWcvbW0vZnJlZS5cbisgKiAgICBGb3IgZXhhbXBsZSwgdG8gcmVsZWFzZSB0aGUgMm5kIGFsbG9jYXRpb24gcnVuOlxuKyAqXG4rICogICAgJCBlY2hvIDIgXHUwMDNlIC9zeXMva2VybmVsL2RlYnVnL21tL2ZyZWVcbisgKi9cbitcbisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcF90eXBlcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbXpvbmUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm9kZW1hc2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbitcbitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbW1kaXI7XG4rXG4rLyoqXG4rICogYXRvbWljX2xvbmdfdCBhbGxvY3NfZmlsZV9zZXEgLSBSZXByZXNlbnRzIHRoZSBuYW1pbmcgc2VxdWVuY2UgdXNlZCBmb3JcbisgKiBhbGxvY2F0aW9uIGZpbGVzLlxuKyAqL1xuK3N0YXRpYyBhdG9taWNfbG9uZ190IGFsbG9jc19maWxlX3NlcSA9IEFUT01JQ19JTklUKDApO1xuK1xuKy8qKlxuKyAqIGFsbG9jc194YSAtIFJlcHJlc2VudCB0aGUgeGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBhbGxvY2F0aW9ucyBwZXJmb3JtXG4rICogYnkgdGhpcyBkcml2ZXIuXG4rICovXG4rc3RhdGljIERFRklORV9YQVJSQVkoYWxsb2NzX3hhKTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcmVxX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcmVxdWVzdGVkIGFsbG9jYXRpb25cbisgKiBAbm9kZV9pZHg6IFRoZSBOb2RlIGluZGV4IHRvIGFsbG9jYXRlIGZyb20uXG4rICogQHpvbmVfaWR4OiBUaGUgWm9uZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLlxuKyAqIEBvcmRlcjogVGhlIE9yZGVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlLlxuKyAqIEBtaWdyYXRlX3R5cGU6IFRoZSBNaWdyYXRlIHR5cGUgdG8gYWxsb2NhdGUgZnJvbS5cbisgKiBAcGFyZW50ZGlyOiBUaGUgcGFyZW50IGRpciB3aGVyZSB0aGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGFsbG9jIHdhcyBjcmVhdGVkLlxuKyAqL1xuK3N0cnVjdCByZXFfYWxsb2Mge1xuK1x0aW50IG5vZGVfaWR4O1xuK1x0aW50IHpvbmVfaWR4O1xuK1x0aW50IG9yZGVyO1xuK1x0aW50IG1pZ3JhdGVfdHlwZTtcbitcdHN0cnVjdCBkZW50cnkgKnBhcmVudGRpcjtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwYWdlX2FsbG9jIC0gUmVwcmVzZW50cyB0aGUgcGFnZSBhbGxvY2F0aW9uLlxuKyAqIEBwYWdlOiBUaGUgcG9pbnRlciB0byB0aGUgcGFnZShzKSBhbGxvY2F0ZWQuXG4rICogQHJlcV9hbGxvYzogVGhlIGRldGFpbHMgb2YgdGhlIGFsbG9jYXRpb24uXG4rICogQGFsbG9jX2RlbnRyeTogVGhlIHBvaW50ZXIgdG8gdGhlIGZpbGUgdGhhdCByZXByZXNlbnRzIHRoZSBhbGxvY2F0aW9uLlxuKyAqL1xuK3N0cnVjdCBwYWdlX2FsbG9jIHtcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1x0c3RydWN0IHJlcV9hbGxvYyAqcmVxX2FsbG9jO1xuK1x0c3RydWN0IGRlbnRyeSAqYWxsb2NfZGVudHJ5O1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZXFfYWxsb2NfY2FjaGU7XG4rc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwYWdlX2FsbG9jX2NhY2hlO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfem9uZV90b19hbGxvY19mcm9tKGludCB6b25lX2lkeCwgZ2ZwX3QgKmZsYWdzX3B0cilcbit7XG4rXHRzd2l0Y2ggKHpvbmVfaWR4KSB7XG4rI2lmZGVmIENPTkZJR19aT05FX0RNQVxuK1x0Y2FzZSBaT05FX0RNQTpcbitcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ETUE7XG4rXHRcdGJyZWFrO1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfWk9ORV9ETUEzMlxuK1x0Y2FzZSBaT05FX0RNQTMyOlxuK1x0XHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0RNQTMyO1xuK1x0XHRicmVhaztcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHX0hJR0hNRU1cbitcdGNhc2UgWk9ORV9ISUdITUVNOlxuK1x0XHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX0hJR0hNRU07XG4rXHRcdGJyZWFrO1xuKyNlbmRpZlxuK1x0Y2FzZSBaT05FX01PVkFCTEU6XG4rXHRcdCpmbGFnc19wdHIgfD0gX19HRlBfTU9WQUJMRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFpPTkVfTk9STUFMOlxuK1x0ZGVmYXVsdDpcbitcdFx0KmZsYWdzX3B0ciB8PSAwO1xuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF9taWdyYXRlX3R5cGVfdG9fYWxsb2NfZnJvbShpbnQgbWlncmF0ZV90eXBlLCBnZnBfdCAqZmxhZ3NfcHRyKVxuK3tcbitcdHN3aXRjaCAobWlncmF0ZV90eXBlKSB7XG4rXHRjYXNlIE1JR1JBVEVfVU5NT1ZBQkxFOlxuK1x0XHQqZmxhZ3NfcHRyIFx1MDAyNj0gfihfX0dGUF9SRUNMQUlNQUJMRSB8IF9fR0ZQX01PVkFCTEUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUlHUkFURV9SRUNMQUlNQUJMRTpcbitcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9SRUNMQUlNQUJMRTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIE1JR1JBVEVfSElHSEFUT01JQzpcbitcdFx0KmZsYWdzX3B0ciB8PSBfX0dGUF9ISUdIO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUlHUkFURV9NT1ZBQkxFOiBkZWZhdWx0OlxuK1x0XHQqZmxhZ3NfcHRyIHw9IF9fR0ZQX01PVkFCTEU7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK31cbitcbitzdGF0aWMgc3NpemVfdCBwYWdlX2FsbG9jX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLFxuK1x0XHRcdFx0ICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcbit7XG4rXHQvKiAgV2hpY2ggaW5mb3JtYXRpb24gc2hvdWxkIGJlIHByaW50IGFib3V0IHRoZSBwYWdlIG9yIGFsbG9jYXRpb24/ICovXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFnZV9hbGxvY19mb3BzID0ge1xuK1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4rXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuK1x0LnJlYWQgPSBwYWdlX2FsbG9jX3JlYWQsXG4rfTtcbitcbitzdGF0aWMgaW50IG1ha2VfYWxsb2Moc3RydWN0IHJlcV9hbGxvYyAqcmVxLFxuK1x0XHRcdCAgICBnZnBfdCBmbGFncywgdW5zaWduZWQgbG9uZyAqYWxsb2NfaWQpXG4re1xuK1x0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXHRjaGFyIG5ld19hbGxvY19uYW1lWzIwXTtcbitcdHN0cnVjdCBkZW50cnkgKm5ld19hbGxvY19kZW50cnk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2VzX25vZGVfbm9wcm9mKHJlcS1cdTAwM2Vub2RlX2lkeCwgZmxhZ3MsIHJlcS1cdTAwM2VvcmRlcik7XG4rXHRpZiAocGFnZSkge1xuK1x0XHRwYSA9IGttZW1fY2FjaGVfYWxsb2MocGFnZV9hbGxvY19jYWNoZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmICghcGEpIHtcbitcdFx0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRcdGdvdG8gZnJlZV9wYWdlcztcbitcdFx0fVxuK1xuK1x0XHQqYWxsb2NfaWQgPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKFx1MDAyNmFsbG9jc19maWxlX3NlcSk7XG4rXHRcdHNucHJpbnRmKG5ld19hbGxvY19uYW1lLCBzaXplb2YobmV3X2FsbG9jX25hbWUpLCBcIiVsdVwiLFxuK1x0XHRcdCAqYWxsb2NfaWQpO1xuK1xuK1x0XHRuZXdfYWxsb2NfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShcbitcdFx0XHRuZXdfYWxsb2NfbmFtZSwgMDQwMCwgcmVxLVx1MDAzZXBhcmVudGRpcixcbitcdFx0XHRwYSwgXHUwMDI2cGFnZV9hbGxvY19mb3BzKTtcbitcdFx0aWYgKElTX0VSUihuZXdfYWxsb2NfZGVudHJ5KSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIobmV3X2FsbG9jX2RlbnRyeSk7XG4rXHRcdFx0Z290byBmcmVlX3BhZ2VfYWxsb2M7XG4rXHRcdH1cbitcbitcdFx0cGEtXHUwMDNlcmVxX2FsbG9jID0gcmVxO1xuK1x0XHRwYS1cdTAwM2VwYWdlID0gcGFnZTtcbitcdFx0cGEtXHUwMDNlYWxsb2NfZGVudHJ5ID0gbmV3X2FsbG9jX2RlbnRyeTtcbitcbitcdFx0cmV0ID0geGFfaW5zZXJ0KFx1MDAyNmFsbG9jc194YSwgKmFsbG9jX2lkLCBwYSwgR0ZQX0tFUk5FTCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZW1vdmVfYWxsb2NfZGVudHJ5O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbitcbityZW1vdmVfYWxsb2NfZGVudHJ5OlxuK1x0ZGVidWdmc19yZW1vdmUobmV3X2FsbG9jX2RlbnRyeSk7XG4rXG4rZnJlZV9wYWdlX2FsbG9jOlxuK1x0a21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTtcbitcbitmcmVlX3BhZ2VzOlxuK1x0X19mcmVlX3BhZ2VzKHBhZ2UsIHJlcS1cdTAwM2VvcmRlcik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IGZyZWVfYWxsb2NfaGVscGVyKHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQpXG4re1xuK1x0c3RydWN0IHBhZ2VfYWxsb2MgKnBhO1xuK1xuK1x0cGEgPSB4YV9lcmFzZShcdTAwMjZhbGxvY3NfeGEsIGFsbG9jX2lkKTtcbitcdGlmICghcGEpIHtcbitcdFx0cHJfZXJyKFwiVGhlIGFsbG9jX2lkICVsdSB3YXMgbm90IGZvdW5kIVwiLCBhbGxvY19pZCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0X19mcmVlX3BhZ2VzKHBhLVx1MDAzZXBhZ2UsIHBhLVx1MDAzZXJlcV9hbGxvYy1cdTAwM2VvcmRlcik7XG4rXHRkZWJ1Z2ZzX3JlbW92ZShwYS1cdTAwM2VhbGxvY19kZW50cnkpO1xuK1x0a21lbV9jYWNoZV9mcmVlKHBhZ2VfYWxsb2NfY2FjaGUsIHBhKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiByZXFfcGFnZV9hbGxvY193cml0ZSgpIC0gQWxsb2NhdGVzIHRoZSBwYWdlcyBvbiB0aGUgcmVxdWVzdGVkIG5vZGUsIHpvbmUsXG4rICogb3JkZXIgYW5kIG1pZ3JhdGUgdHlwZS4gT25jZSB0aGUgYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQsIGEgZmlsZSBpcyBjcmVhdGVkXG4rICogdG8gZnJlZSB0aGUgYWxsb2NhdGlvbiBsYXRlci5cbisgKi9cbitzdGF0aWMgc3NpemVfdCByZXFfcGFnZV9hbGxvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsXG4rXHRcdFx0XHQgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcylcbit7XG4rXHRzdHJ1Y3QgcmVxX2FsbG9jICpyZXEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHVuc2lnbmVkIGxvbmcgYWxsb2NfaWQ7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzX2FsbG9jcztcbitcdHVuc2lnbmVkIGxvbmcgKmFsbG9jc19pZHM7XG4rXHRnZnBfdCBmbGFncyA9IDA7XG4rXHRpbnQgcmV0O1xuK1x0aW50IGk7XG4rXG4rXHRyZXQgPSBrc3RydG91bF9mcm9tX3VzZXIodWJ1ZiwgY250LCAxMCwgXHUwMDI2bnJfcGFnZXNfYWxsb2NzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRhbGxvY3NfaWRzID0ga21hbGxvY19hcnJheShucl9wYWdlc19hbGxvY3MsIHNpemVvZih1bnNpZ25lZCBsb25nKSxcbitcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWFsbG9jc19pZHMpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0c2V0X3pvbmVfdG9fYWxsb2NfZnJvbShyZXEtXHUwMDNlem9uZV9pZHgsIFx1MDAyNmZsYWdzKTtcbitcdHNldF9taWdyYXRlX3R5cGVfdG9fYWxsb2NfZnJvbShyZXEtXHUwMDNlbWlncmF0ZV90eXBlLCBcdTAwMjZmbGFncyk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlc19hbGxvY3M7IGkrKykge1xuK1x0XHRyZXQgPSBtYWtlX2FsbG9jKHJlcSwgZmxhZ3MsIFx1MDAyNmFsbG9jX2lkKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGZyZWVfYWxsb2NzO1xuK1xuK1x0XHRhbGxvY3NfaWRzW2ldID0gYWxsb2NfaWQ7XG4rXHR9XG4rXG4rXHRrZnJlZShhbGxvY3NfaWRzKTtcbitcbitcdHJldHVybiBjbnQ7XG4rXG4rZnJlZV9hbGxvY3M6XG4rXHQvKiBGcmVlIGFsbCB0aGUgcGFnZXMgYW5kIHJlc291cmNlcyBwcmV2aW91c2x5IGFsbG9jYXRlZC4gKi9cbitcdGZvciAoaW50IGogPSAwOyBqIFx1MDAzYyBpOyBqKyspIHtcbitcdFx0aW50IHJldDIgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY3NfaWRzW2pdKTtcbitcbitcdFx0aWYgKHJldDIpXG4rXHRcdFx0cHJfZXJyKFwiVW5hYmxlIHRvIGZyZWUgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIGZpbGUgJWx1XCIsXG4rXHRcdFx0ICAgICAgIGFsbG9jc19pZHNbal0pO1xuK1x0fVxuK1xuK1x0a2ZyZWUoYWxsb2NzX2lkcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXFfcGFnZV9hbGxvY19mb3BzID0ge1xuK1x0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4rXHQub3BlbiA9IHNpbXBsZV9vcGVuLFxuK1x0LndyaXRlID0gcmVxX3BhZ2VfYWxsb2Nfd3JpdGUsXG4rfTtcbitcbisvKipcbisgKiBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGUoKSAtIGZyZWUgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIHBhZ2VzLlxuKyAqIEBmaWxlOiBGaWxlIHdoZXJlIHRoZSB1c2VyIGlzIHdyaXRpbmcuXG4rICogQHVidWY6IENvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoZSB1c2VyIHdhbnRzIHRvIGRlbGV0ZSBhbmQgaGF2ZSB0aGVcbisgKiAgICAgICBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZmlsZSBmcmVlZC5cbisgKiBAY250OiBTaXplIG9mIEB1YnVmLlxuKyAqIEBwcG9zOiBDdXJyZW50IHBvc2l0aW9uIGluIHRoZSBmaWxlLlxuKyAqL1xuK3N0YXRpYyBzc2l6ZV90IGZyZWVfcGFnZV9hbGxvY193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcbitcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LFxuK1x0XHRcdFx0ICAgICAgbG9mZl90ICpwcG9zKVxuK3tcbitcdGludCByZXQ7XG4rXHR1bnNpZ25lZCBsb25nIGFsbG9jX2lkO1xuK1xuK1x0cmV0ID0ga3N0cnRvdWxfZnJvbV91c2VyKHVidWYsIGNudCwgMTAsIFx1MDAyNmFsbG9jX2lkKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBmcmVlX2FsbG9jX2hlbHBlcihhbGxvY19pZCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIGNudDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnJlZV9wYWdlX2FsbG9jX2ZvcHMgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC53cml0ZSA9IGZyZWVfcGFnZV9hbGxvY193cml0ZSxcbit9O1xuK1xuKy8qKlxuKyAqIGNyZWF0ZV9ucl9wYWdlc19hbGxvY3NfZmlsZSgpIC0gQ3JlYXRlcyB0aGUgZmlsZSBcIm5yX3BhZ2VzX2FsbG9jc1wiLlxuKyAqXG4rICogVGhlIFwibnJfcGFnZXNfYWxsb2NzXCIgZmlsZSB3aWxsIGJlIHVzZWQgdG8gd3JpdGUgdGhlIG51bWJlciBvZiBhbGxvY2F0aW9uc1xuKyAqIHRoYXQgd2lsbCBiZSBwZXJmb3JtZWQuIFdoZW4gdGhlIGFsbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQsIGEgbmV3IGZpbGUgZm9yXG4rICogZWFjaCBhbGxvY2F0aW9uIHdpbGwgYmUgY3JlYXRlZCBpbiBAbWlncmF0ZWRpci5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUoc3RydWN0IGRlbnRyeSAqbWlncmF0ZWRpcixcbitcdFx0XHRcdFx0ICAgICAgaW50IG5pZCwgaW50IHpvbmVfaWR4LFxuK1x0XHRcdFx0XHQgICAgICBpbnQgb3JkZXIsIGludCBtdHlwZSlcbit7XG4rXHRzdHJ1Y3QgcmVxX2FsbG9jICpyZXE7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpucl9wYWdlcztcbitcbitcdHJlcSA9IGttZW1fY2FjaGVfYWxsb2MocmVxX2FsbG9jX2NhY2hlLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcmVxKSB7XG4rXHRcdHByX2VycihcIkZhaWxlZCB0byBjcmVhdGUgbnJfcGFnZXNfYWxsb2NzX2luZm9cIik7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0cmVxLVx1MDAzZW5vZGVfaWR4ID0gbmlkO1xuK1x0cmVxLVx1MDAzZXpvbmVfaWR4ID0gem9uZV9pZHg7XG4rXHRyZXEtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbitcdHJlcS1cdTAwM2VtaWdyYXRlX3R5cGUgPSBtdHlwZTtcbitcdHJlcS1cdTAwM2VwYXJlbnRkaXIgPSBtaWdyYXRlZGlyO1xuK1xuK1x0bnJfcGFnZXMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwibnJfcGFnZXNfYWxsb2NzXCIsIDAyMDAsIG1pZ3JhdGVkaXIsIHJlcSxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZyZXFfcGFnZV9hbGxvY19mb3BzKTtcbitcdGlmIChJU19FUlIobnJfcGFnZXMpKSB7XG4rXHRcdGttZW1fY2FjaGVfZnJlZShyZXFfYWxsb2NfY2FjaGUsIHJlcSk7XG4rXHRcdHJldHVybiBQVFJfRVJSKG5yX3BhZ2VzKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBjcmVhdGVfbWlncmF0ZV90eXBlX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggbWlncmF0ZSB0eXBlXG4rICogaW5zaWRlIHRoZSBvcmRlciBkaXJlY3RvcnkuIE9uY2UgdGhlIG1pZ3JhdGUgdHlwZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXRcbisgKiBjcmVhdGVzIHRoZSBcIm5yX3BhZ2VzX2FsbG9jc1wiIGZpbGUuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgY3JlYXRlX21pZ3JhdGVfdHlwZV9zdWJkaXJzKHN0cnVjdCBkZW50cnkgKm9yZGVyZGlyLCBpbnQgbmlkLFxuK1x0XHRcdFx0XHRpbnQgem9uZV9pZHgsIGludCBvcmRlcilcbit7XG4rXHRzdHJ1Y3QgZGVudHJ5ICptaWdyYXRlZGlyO1xuK1x0Y2hhciBkaXJuYW1lWzI0XTtcbitcdGludCByZXQ7XG4rXG4rXHRmb3IgKGludCBtdHlwZSA9IDA7IG10eXBlIFx1MDAzYyBNSUdSQVRFX1RZUEVTOyBtdHlwZSsrKSB7XG4rI2lmZGVmIENPTkZJR19DTUFcbitcdFx0aWYgKG10eXBlID09IE1JR1JBVEVfQ01BKSAvKiBDTUEgYWxsb2NzIGFyZSBub3Qgc3VwcG9ydGVkIHlldCovXG4rXHRcdFx0Y29udGludWU7XG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OXG4rXHRcdGlmIChtdHlwZSA9PSBNSUdSQVRFX0lTT0xBVEUpIC8qIGNhbid0IGFsbG9jYXRlIGZyb20gaGVyZSAqL1xuK1x0XHRcdGNvbnRpbnVlO1xuKyNlbmRpZlxuK1x0XHRpZiAoem9uZV9pZHggPT0gWk9ORV9NT1ZBQkxFIFx1MDAyNlx1MDAyNiBtdHlwZSAhPSBNSUdSQVRFX01PVkFCTEUpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdHNucHJpbnRmKGRpcm5hbWUsIHNpemVvZihkaXJuYW1lKSwgXCJtaWdyYXRlLSVzXCIsXG4rXHRcdFx0IG1pZ3JhdGV0eXBlX25hbWVzW210eXBlXSk7XG4rXHRcdG1pZ3JhdGVkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGlybmFtZSwgb3JkZXJkaXIpO1xuK1x0XHRpZiAoSVNfRVJSKG1pZ3JhdGVkaXIpKVxuK1x0XHRcdHJldHVybiBQVFJfRVJSKG1pZ3JhdGVkaXIpO1xuK1xuK1x0XHRyZXQgPSBjcmVhdGVfbnJfcGFnZXNfYWxsb2NzX2ZpbGUobWlncmF0ZWRpciwgbmlkLCB6b25lX2lkeCxcbitcdFx0XHRcdFx0XHRvcmRlciwgbXR5cGUpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoKSAtIENyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yIGVhY2ggcGFnZSBvcmRlciBpbnNpZGVcbisgKiB0aGUgem9uZSBkaXJlY3RvcnkuIE9uY2UgdGhhdCB0aGUgcGFnZSBvcmRlciBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlc1xuKyAqIGEgZGlyZWN0b3J5IGZvciBlYWNoIG1pZ3JhdGUgdHlwZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGludCBjcmVhdGVfcGFnZV9vcmRlcnNfc3ViZGlycyhzdHJ1Y3QgZGVudHJ5ICp6b25lZGlyLCBpbnQgbmlkLFxuK1x0XHRcdFx0XHRpbnQgem9uZV9pZHgpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqb3JkZXJkaXI7XG4rXHRjaGFyIGRpcm5hbWVbMTJdO1xuK1x0aW50IHJldDtcbitcbitcdGZvciAoaW50IG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvcmRlcisrKSB7XG4rXHRcdHNucHJpbnRmKGRpcm5hbWUsIHNpemVvZihkaXJuYW1lKSwgXCJvcmRlci0lZFwiLCBvcmRlcik7XG4rXHRcdG9yZGVyZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIHpvbmVkaXIpO1xuK1x0XHRpZiAoSVNfRVJSKG9yZGVyZGlyKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihvcmRlcmRpcik7XG4rXG4rXHRcdHJldCA9IGNyZWF0ZV9taWdyYXRlX3R5cGVfc3ViZGlycyhvcmRlcmRpciwgbmlkLCB6b25lX2lkeCxcbitcdFx0XHRcdFx0XHRvcmRlcik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBjcmVhdGVfem9uZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBwb3B1bGF0ZWQgem9uZSBpbiB0aGVcbisgKiBub2RlLiBPbmNlIHRoYXQgdGhlIHpvbmUgZGlyZWN0b3J5IGlzIGNyZWF0ZWQsIGl0IGNyZWF0ZXMgYSBkaXJlY3RvcnkgZm9yXG4rICogZWFjaCBvcmRlciBzdXBwb3J0ZWQuXG4rICpcbisgKiBOb3RlOiBaT05FX0RFVklDRSBwYWdlcyB3b24ndCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhpcyBkcml2ZXIuIFRoZSBtYWluIHJlYXNvblxuKyAqIGlzIGJlY2F1c2UgdGhleSBhcmUgbm90IG1hbmFnZWQgYnkgdGhlIEJ1ZGR5IEFsbG9jYXRvciBvciBDTUEgYWxsb2NhdG9yLlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgaW50IGNyZWF0ZV96b25lc19zdWJkaXJzKHN0cnVjdCBkZW50cnkgKm5vZGVkaXIsXG4rXHRcdFx0XHRcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXRhLCBpbnQgbmlkKVxuK3tcbitcdHN0cnVjdCBkZW50cnkgKnpvbmVkaXI7XG4rXHRzdHJ1Y3Qgem9uZSAqem9uZTtcbitcdHN0cnVjdCB6b25lICpub2RlX3pvbmVzID0gcGdkYXRhLVx1MDAzZW5vZGVfem9uZXM7XG4rXHRpbnQgem9uZV9pZHg7XG4rXHRjaGFyIGRpcm5hbWVbMjRdO1xuK1x0aW50IHJldDtcbitcbitcdGZvciAoem9uZSA9IG5vZGVfem9uZXMsIHpvbmVfaWR4ID0gMDsgem9uZSAtIG5vZGVfem9uZXMgXHUwMDNjIE1BWF9OUl9aT05FUztcbitcdFx0XHQrK3pvbmUsICsrem9uZV9pZHgpIHtcbitcdFx0aWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogWk9ORV9ERVZJQ0UgcGFnZXMgd29uJ3QgYmUgYWxsb2NhdGVkIHVzaW5nIHRoaXMgZHJpdmVyLiAqL1xuK1x0XHRpZiAoem9uZV9pc196b25lX2RldmljZSh6b25lKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c25wcmludGYoZGlybmFtZSwgc2l6ZW9mKGRpcm5hbWUpLCBcInpvbmUtJXNcIiwgem9uZS1cdTAwM2VuYW1lKTtcbitcdFx0em9uZWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihkaXJuYW1lLCBub2RlZGlyKTtcbitcdFx0aWYgKElTX0VSUih6b25lZGlyKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUih6b25lZGlyKTtcbitcbitcdFx0cmV0ID0gY3JlYXRlX3BhZ2Vfb3JkZXJzX3N1YmRpcnMoem9uZWRpciwgbmlkLCB6b25lX2lkeCk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBjcmVhdGVfbm9kZXNfc3ViZGlycygpIC0gQ3JlYXRlcyBhIGRpcmVjdG9yeSBmb3IgZWFjaCBub2RlIHRoYXQgY29udGFpbnNcbisgKiBtZW1vcnkuIE9uY2UgdGhhdCB0aGUgbm9kZSBkaXJlY3RvcnkgaXMgY3JlYXRlZCwgaXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBmb3JcbisgKiBlYWNoIHpvbmUgaW4gdGhlIG5vZGUuXG4rICovXG4rc3RhdGljIGlubGluZSBpbnQgY3JlYXRlX25vZGVzX3N1YmRpcnMoc3RydWN0IGRlbnRyeSAqbW1kaXIpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqbm9kZWRpcjtcbitcdGNoYXIgZGlybmFtZVsxMl07XG4rXHRpbnQgbmlkO1xuK1x0aW50IHJldDtcbitcbitcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuK1x0XHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0YSA9IE5PREVfREFUQShuaWQpO1xuK1xuK1x0XHRzbnByaW50ZihkaXJuYW1lLCBzaXplb2YoZGlybmFtZSksIFwibm9kZS0lZFwiLCBuaWQpO1xuK1x0XHRub2RlZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGRpcm5hbWUsIG1tZGlyKTtcbitcdFx0aWYgKElTX0VSUihub2RlZGlyKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihub2RlZGlyKTtcbitcbitcdFx0cmV0ID0gY3JlYXRlX3pvbmVzX3N1YmRpcnMobm9kZWRpciwgcGdkYXRhLCBuaWQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBfX2luaXQgcGFnZV9hbGxvY19ob2dnZXJfZGVidWdmc19pbml0KHZvaWQpXG4re1xuK1x0c3RydWN0IGRlbnRyeSAqZnJlZV9maWxlO1xuK1x0aW50IHJldDtcbitcbitcdHJlcV9hbGxvY19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKFxuK1x0XHRcInJlcV9hbGxvY19jYWNoZVwiLCBzaXplb2Yoc3RydWN0IHJlcV9hbGxvYyksIDAsXG4rXHRcdFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XG4rXHRpZiAoIXJlcV9hbGxvY19jYWNoZSkge1xuK1x0XHRwcl9lcnIoXCJUaGUgcmVxX2FsbG9jX2NhY2hlIGNvdWxkbid0IGJlIGNyZWF0ZWRcXG5cIik7XG4rXHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyb3JfZXhpdDtcbitcdH1cbitcbitcdHBhZ2VfYWxsb2NfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShcbitcdFx0XCJwYWdlX2FsbG9jX2NhY2hlXCIsIHNpemVvZihzdHJ1Y3QgcGFnZV9hbGxvYyksIDAsXG4rXHRcdFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7XG4rXHRpZiAoIXBhZ2VfYWxsb2NfY2FjaGUpIHtcbitcdFx0cHJfZXJyKFwiVGhlIHBhZ2VfYWxsb2NfY2FjaGUgY291bGRuJ3QgYmUgY3JlYXRlZFxcblwiKTtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBjbGVhbl9yZXFfYWxsb2NfY2FjaGU7XG4rXHR9XG4rXG4rXHRtbWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcIm1tXCIsIE5VTEwpO1xuK1x0aWYgKElTX0VSUihtbWRpcikpIHtcbitcdFx0cHJfZXJyKFwiVW5hYmxlIHRvIGNyZWF0ZSBtbSBkaXJlY3RvcnlcXG5cIik7XG4rXHRcdHJldCA9IFBUUl9FUlIobW1kaXIpO1xuK1x0XHRnb3RvIGNsZWFuX3BhZ2VfYWxsb2NfY2FjaGU7XG4rXHR9XG4rXG4rXHRyZXQgPSBjcmVhdGVfbm9kZXNfc3ViZGlycyhtbWRpcik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGNsZWFuX2RpcjtcbitcbitcdGZyZWVfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJmcmVlXCIsIDAyMDAsIG1tZGlyLCBOVUxMLFxuK1x0XHRcdFx0XHRcdTAwMjZmcmVlX3BhZ2VfYWxsb2NfZm9wcyk7XG4rXHRpZiAoSVNfRVJSKGZyZWVfZmlsZSkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihmcmVlX2ZpbGUpO1xuK1x0XHRnb3RvIGNsZWFuX2RpcjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK1xuK2NsZWFuX2RpcjpcbitcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShtbWRpcik7XG4rXG4rY2xlYW5fcGFnZV9hbGxvY19jYWNoZTpcbitcdGttZW1fY2FjaGVfZGVzdHJveShwYWdlX2FsbG9jX2NhY2hlKTtcbitcbitjbGVhbl9yZXFfYWxsb2NfY2FjaGU6XG4rXHRrbWVtX2NhY2hlX2Rlc3Ryb3kocmVxX2FsbG9jX2NhY2hlKTtcbitcbitlcnJvcl9leGl0OlxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgX19leGl0IHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfZXhpdCh2b2lkKVxuK3tcbitcdHN0cnVjdCBwYWdlX2FsbG9jICpwYTtcbitcdHVuc2lnbmVkIGxvbmcgaWR4O1xuK1xuK1x0eGFfZm9yX2VhY2goXHUwMDI2YWxsb2NzX3hhLCBpZHgsIHBhKVxuK1x0XHRmcmVlX2FsbG9jX2hlbHBlcihpZHgpO1xuK1xuK1x0ZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKG1tZGlyKTtcbitcdGttZW1fY2FjaGVfZGVzdHJveShyZXFfYWxsb2NfY2FjaGUpO1xuK1x0a21lbV9jYWNoZV9kZXN0cm95KHBhZ2VfYWxsb2NfY2FjaGUpO1xuK31cbitcbittb2R1bGVfaW5pdChwYWdlX2FsbG9jX2hvZ2dlcl9kZWJ1Z2ZzX2luaXQpO1xuK21vZHVsZV9leGl0KHBhZ2VfYWxsb2NfaG9nZ2VyX2RlYnVnZnNfZXhpdCk7XG4rXG4rTU9EVUxFX0FVVEhPUihcIkp1YW4gWWVzY2FzXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIk1vZHVsZSB0byBhbGxvYyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmVcIik7XG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMjowNDo1Ni45NTIwMjc5NjhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTYxNzAzNjQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBOZXcgRGVidWdmcyBQYWdlIEFsbG9jYXRvciBJbnRlcmZhY2UqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGRlYnVnZnMgaW50ZXJmYWNlLCBgbW0vcGFnZV9hbGxvY19ob2dnZXIuY2AsIHdoaWNoIHNlZW1zIGRlc2lnbmVkIGZvciBhbGxvY2F0aW5nIHBhZ2VzIHdpdGggc3BlY2lmaWMgcGFyYW1ldGVyczogbm9kZSwgem9uZSwgbWlncmF0ZSB0eXBlLCBhbmQgb3JkZXIuIFRoZSBuZXcgY29uZmlnIGlzIGBQQUdFQUxMT0NfSE9HR0VSYCwgYW5kIGl0IGRlcGVuZHMgb24gYERFQlVHX0ZTYC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJJcyB0aGlzIGZ1enphYmxlP1wiIERlYnVnZnMgaW50ZXJmYWNlcyBhcmUgYWx3YXlzIGludGVyZXN0aW5nIHRhcmdldHMsIGVzcGVjaWFsbHkgd2hlbiB0aGV5IHRvdWNoIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGlzIG9uZSBsb29rcyBwcm9taXNpbmcgYmVjYXVzZSBpdCBkaXJlY3RseSBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSBhbGxvY2F0b3IuIFRoZSBrZXkgaXMgdG8gc2VlIGlmIGl0J3MgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZS4gSXQncyBhIHNvZnR3YXJlIGludGVyZmFjZSBzbyBubyBwaHlzaWNhbCBoYXJkd2FyZSBpcyBuZWVkZWQsIGFuZCBkZWJ1Z2ZzIGlzIGF2YWlsYWJsZSBpbiBRRU1VLCBzbyB0aGF0J3MgZ29vZC4gRnVuY3Rpb25hbGx5LCBpdCdzIGFkZGluZyBhIG5ldyBtb2R1bGUgYW5kIGZlYXR1cmUgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBkZWJ1Z2ZzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIG5ldyB1c2VyLXNwYWNlIGludGVyZmFjZSB0aGF0IGFsbG93cyB1cyB0byBhbGxvY2F0ZSBtZW1vcnkuIEZ1enppbmcgY291bGQgcmV2ZWFsIGJ1Z3MgaW4gdGhpcyBcImhvZ2dlclwiIG1vZHVsZSBpdHNlbGYsIG9yIGl0IG1pZ2h0IHRyaWdnZXIgaW50ZXJlc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHVuZGVyIHByZXNzdXJlLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyBJJ3ZlIGlkZW50aWZpZWQ6IGBwYWdlX2FsbG9jX3JlYWRgLCBgbWFrZV9hbGxvY2AsIGBmcmVlX2FsbG9jX2hlbHBlcmAsIGByZXFfcGFnZV9hbGxvY193cml0ZWAsIGBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGVgLCBhbmQgYSBidW5jaCBvZiBkaXJlY3RvcnkgY3JlYXRpb24gZnVuY3Rpb25zLiBUaGUgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nIGFwcGVhciB0byBiZSB0aGUgZmlsZSBvcGVyYXRpb25zOiBzcGVjaWZpY2FsbHksIGByZXFfcGFnZV9hbGxvY193cml0ZWAsIGBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGVgLCBhbmQgYHBhZ2VfYWxsb2NfcmVhZGAuXG5cblRoZSBjb25maWcgb3B0aW9ucyBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgUEFHRUFMTE9DX0hPR0dFUmAgYW5kIGl0cyBkZXBlbmRlbmN5IG9uIGBERUJVR19GU2AuIExldCdzIHZlcmlmeSB0aG9zZSBmdW5jdGlvbnMgYWdhaW4uIFllcCwgYHJlcV9wYWdlX2FsbG9jX3dyaXRlYCwgYGZyZWVfcGFnZV9hbGxvY193cml0ZWAsIGFuZCBgcGFnZV9hbGxvY19yZWFkYCBhcmUgZGVmaW5pdGVseSB0aGUgdGFyZ2V0cy4gSSdtIHJlYWR5IHRvIGRvY3VtZW50IG15IGZpbmRpbmdzLlxuXG5CYXNlZCBvbiB0aGUgaW52ZXN0aWdhdGlvbiwgSSdtIHNldHRpbmcgdGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgdG8gYHRydWVgLiBJJ2xsIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGByZXFfcGFnZV9hbGxvY193cml0ZWAsIGBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGVgLCBhbmQgYHBhZ2VfYWxsb2NfcmVhZGAuIFRoZSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgUEFHRUFMTE9DX0hPR0dFUmAgYW5kIGBERUJVR19GU2AuIFRoZSByZWFzb25pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSB0aGF0IGFsbG9jYXRlcyBwYWdlcywgd2hpY2ggd2UgY2FuIHVzZSB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUgYW5kIGZpbmQgYnVncyBpbiB0aGUgaG9nZ2VyIGl0c2VsZiBvciB0cmlnZ2VyIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy5cblxuSSdsbCBkb3VibGUgY2hlY2sgdGhhdCBgREVCVUdfRlNgIGlzIGVpdGhlciBlbmFibGVkIGJ5IGRlZmF1bHQgb3Igd2UgbmVlZCB0byBlbmFibGUgaXQsIEknbGwgaW5jbHVkZSBpdCB0byBiZSBzYWZlLiBJdCBkZXBlbmRzIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMuIFllcywgYW5kIGl0J3Mgc2FmZSB0byBpbmNsdWRlLiBJIGNoZWNrZWQgYG1tL0tjb25maWcuZGVidWdgIGFuZCBjb25maXJtZWQgdGhhdCBgUEFHRUFMTE9DX0hPR0dFUmAgZGVwZW5kcyBvbiBgREVCVUdfRlNgLlxuXG5JIHNlZSB0aGF0IGBtYWtlX2FsbG9jYCBhbmQgYGZyZWVfYWxsb2NfaGVscGVyYCBhcmUgY2FsbGVkIGZyb20gdGhlIHByaW1hcnkgd3JpdGUgZnVuY3Rpb25zLCBidXQgdGhhdCdzIGZpbmUuIGByZXFfcGFnZV9hbGxvY193cml0ZWAgYW5kIGBmcmVlX3BhZ2VfYWxsb2Nfd3JpdGVgIGFyZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIGJ1dCBgcGFnZV9hbGxvY19yZWFkYCBpcyBhbHNvIGFuIGVudHJ5IHBvaW50LCBldmVuIGlmIGl0IGp1c3QgcmV0dXJucyAwLlxuXG5XYWl0LCBsb29raW5nIGNsb3NlciwgYHJlcV9wYWdlX2FsbG9jX3dyaXRlYCBpcyBtYXJrZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24uIE5vdywgdGhlIHByb21wdCBzYXlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMsIGJ1dCBpbiB0aGlzIGNhc2UsIGl0cyBhZGRyZXNzIGlzIHRha2VuIGJlY2F1c2UgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgYGZpbGVfb3BlcmF0aW9uc2Agc3RydWN0LlxuYGBgY1xuc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVxX3BhZ2VfYWxsb2NfZm9wcyA9IHtcblx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5cdC5vcGVuID0gc2ltcGxlX29wZW4sXG5cdC53cml0ZSA9IHJlcV9wYWdlX2FsbG9jX3dyaXRlLFxufTtcbmBgYFxuU28sIGl0J3MgZmluZSB0byBsaXN0IGl0LiBJdCB3b24ndCBiZSBpbmxpbmVkLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBgUEFHRUFMTE9DX0hPR0dFUmAgaXMgdGhlIG9ubHkgbmV3IG9uZS5cblxuSSdtIHJlYWR5IHRvIGNhbGwgc2V0LXJlc3VsdHMgYW5kIGRvY3VtZW50IHRoaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NjIsIk91dHB1dFRva2VucyI6MTA4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAyOjA1OjA4LjU2OTA2NjEyNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1NDE3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VBTExPQ19IT0dHRVJcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxX3BhZ2VfYWxsb2Nfd3JpdGVcIixcbiAgICBcImZyZWVfcGFnZV9hbGxvY193cml0ZVwiLFxuICAgIFwicGFnZV9hbGxvY19yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgYWxsb2NhdGluZyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUuIEZ1enppbmcgdGhpcyBpbnRlcmZhY2UgY2FuIGhlbHAgdW5jb3ZlciBidWdzIGluIHRoZSBob2dnZXIgaXRzZWxmIG9yIHRyaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBBR0VBTExPQ19IT0dHRVJcIixcbiAgICBcIkRFQlVHX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVxX3BhZ2VfYWxsb2Nfd3JpdGVcIixcbiAgICBcImZyZWVfcGFnZV9hbGxvY193cml0ZVwiLFxuICAgIFwicGFnZV9hbGxvY19yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgYWxsb2NhdGluZyBwYWdlcyB0byBnZW5lcmF0ZSBtZW1vcnkgcHJlc3N1cmUuIEZ1enppbmcgdGhpcyBpbnRlcmZhY2UgY2FuIGhlbHAgdW5jb3ZlciBidWdzIGluIHRoZSBob2dnZXIgaXRzZWxmIG9yIHRyaWdnZXIgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhkrtx[1] Phase: Succeeded StartedAt: 2026-08-06 02:05:19 +0000 UTC FinishedAt: 2026-08-06 02:05:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 02:05:19 +0000 UTC FinishedAt: 2026-08-06 02:05:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2] Phase: Succeeded StartedAt: 2026-08-06 02:05:19 +0000 UTC FinishedAt: 2026-08-06 05:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 02:05:19 +0000 UTC FinishedAt: 2026-08-06 05:49:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 02:05:19 +0000 UTC FinishedAt: 2026-08-06 02:05:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 02:05:19 +0000 UTC FinishedAt: 2026-08-06 02:05:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhkrtx/series-workflowhkrtx-convert-artifact-2305094774/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 02:05:30 +0000 UTC FinishedAt: 2026-08-06 02:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 02:05:30 +0000 UTC FinishedAt: 2026-08-06 02:21:27 +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:*df8fe485-127c-4584-8e39-8fc1b83d0fdb,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-workflowhkrtx/series-workflowhkrtx-convert-artifact-2305094774/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": "5787656e-a922-47f9-937a-106439f6a9e5", "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-workflowhkrtx/series-workflowhkrtx-build-action-3167424396/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 02:05:30 +0000 UTC FinishedAt: 2026-08-06 02:21:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*df8fe485-127c-4584-8e39-8fc1b83d0fdb,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-workflowhkrtx/series-workflowhkrtx-convert-artifact-2305094774/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": "5787656e-a922-47f9-937a-106439f6a9e5", "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-workflowhkrtx/series-workflowhkrtx-build-action-3167424396/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 02:21:27 +0000 UTC FinishedAt: 2026-08-06 02:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 02:21:27 +0000 UTC FinishedAt: 2026-08-06 02:21:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 02:21:27 +0000 UTC FinishedAt: 2026-08-06 02:21:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 02:21:27 +0000 UTC FinishedAt: 2026-08-06 02:21:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhkrtx/series-workflowhkrtx-convert-artifact-3637069577/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 02:21:37 +0000 UTC FinishedAt: 2026-08-06 02:23:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 02:21:37 +0000 UTC FinishedAt: 2026-08-06 02:23:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5787656e-a922-47f9-937a-106439f6a9e5,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-workflowhkrtx/series-workflowhkrtx-build-action-3167424396/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-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 02:23:46 +0000 UTC FinishedAt: 2026-08-06 02:23:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 02:23:46 +0000 UTC FinishedAt: 2026-08-06 02:23:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 02:23:46 +0000 UTC FinishedAt: 2026-08-06 02:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 02:23:46 +0000 UTC FinishedAt: 2026-08-06 02:43:24 +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:*df8fe485-127c-4584-8e39-8fc1b83d0fdb,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-workflowhkrtx/series-workflowhkrtx-convert-artifact-3637069577/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": "139eaabb-6675-445d-8179-8221d2ed881a", "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-workflowhkrtx/series-workflowhkrtx-build-action-781600997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 02:23:46 +0000 UTC FinishedAt: 2026-08-06 02:43:14 +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:*df8fe485-127c-4584-8e39-8fc1b83d0fdb,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-workflowhkrtx/series-workflowhkrtx-convert-artifact-3637069577/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": "139eaabb-6675-445d-8179-8221d2ed881a", "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-workflowhkrtx/series-workflowhkrtx-build-action-781600997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 02:43:24 +0000 UTC FinishedAt: 2026-08-06 02:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 02:43:24 +0000 UTC FinishedAt: 2026-08-06 02:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 02:43:24 +0000 UTC FinishedAt: 2026-08-06 02:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 02:43:24 +0000 UTC FinishedAt: 2026-08-06 02:45:37 +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:*139eaabb-6675-445d-8179-8221d2ed881a,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-workflowhkrtx/series-workflowhkrtx-build-action-781600997/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-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 02:45:46 +0000 UTC FinishedAt: 2026-08-06 05:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 02:45:46 +0000 UTC FinishedAt: 2026-08-06 05:49:05 +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":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"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:*5787656e-a922-47f9-937a-106439f6a9e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*139eaabb-6675-445d-8179-8221d2ed881a,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-workflowhkrtx/series-workflowhkrtx-build-action-3167424396/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-workflowhkrtx/series-workflowhkrtx-build-action-781600997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 02:45:46 +0000 UTC FinishedAt: 2026-08-06 02:45:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 02:45:46 +0000 UTC FinishedAt: 2026-08-06 02:45:52 +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":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"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-workflowhkrtx/series-workflowhkrtx-convert-artifact-3982200926/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 02:45:46 +0000 UTC FinishedAt: 2026-08-06 02:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 02:45:46 +0000 UTC FinishedAt: 2026-08-06 02:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 02:45:46 +0000 UTC FinishedAt: 2026-08-06 02:45:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 02:45:56 +0000 UTC FinishedAt: 2026-08-06 05:49:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhkrtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["req_page_alloc_write","free_page_alloc_write","page_alloc_read"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"86f436567f2516a0083b210bedc933544826a2c3","config_name":"upstream-apparmor-kasan.config","enable_configs":["PAGEALLOC_HOGGER","DEBUG_FS"],"series_id":"08c3e24e-3a61-4899-97e3-42cbba6446b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 02:45:56 +0000 UTC FinishedAt: 2026-08-06 05:48:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5787656e-a922-47f9-937a-106439f6a9e5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*139eaabb-6675-445d-8179-8221d2ed881a,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-workflowhkrtx/series-workflowhkrtx-build-action-3167424396/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-workflowhkrtx/series-workflowhkrtx-build-action-781600997/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-workflowhkrtx/series-workflowhkrtx-convert-artifact-3982200926/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,}