Name: series-workflownk8h7 Phase: Failed StartedAt: 2026-07-25 12:47:42 +0000 UTC FinishedAt: 2026-07-25 13:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflownk8h7[0] Phase: Succeeded StartedAt: 2026-07-25 12:47:42 +0000 UTC FinishedAt: 2026-07-25 13:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflownk8h7[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 12:47:42 +0000 UTC FinishedAt: 2026-07-25 13:38:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEFDUEkgU0FSIChTcGVjaWZpYyBBYnNvcnB0aW9uIFJhdGUpIHBhcnNpbmcgbG9naWMgZm9yIE1lZGlhdGVrIE1UNzkyeCBXaS1GaSBjYXJkcy4gVGhpcyBjb2RlIHJlbGllcyBvbiByZXRyaWV2aW5nIHRoZSBBQ1BJIGNvbXBhbmlvbiBkZXZpY2UgdmlhIEFDUElfSEFORExFKG1kZXYtXHUwMDNlZGV2KSB0byByZWFkIHRoZSBBQ1BJIHRhYmxlcy4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZHluYW1pY2FsbHkgY3JlYXRlZCBVU0Igb3IgUENJZSBkZXZpY2VzIGRvIG5vdCBoYXZlIEFDUEkgbm9kZXMgaW4gdGhlIERTRFQsIHNvIEFDUElfSEFORExFIHJldHVybnMgTlVMTC4gQ29uc2VxdWVudGx5LCB0aGUgQUNQSSByZWFkaW5nIGZhaWxzLCB0aGUgY291bnRyeWxpc3QgaXMgbmV2ZXIgcG9wdWxhdGVkLCBhbmQgdGhlIG1vZGlmaWVkIHBhcnNpbmcgZnVuY3Rpb25zIHJldHVybiBlYXJseSwgbWFraW5nIHRoaXMgY29kZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyYTI0YWQ1MDU0ZWUwNWJlMmUzYzI0OWM4YTg0Y2M3ZDlhOGUwNGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMzozNjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuaW5kZXggOTQ2ZGQ3OTU2ZTRhMGQuLjg2OGZlYWRiZmY2MTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuQEAgLTM4OCw3ICYjNDM7Mzg4LDcgQEAgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfbWFwX3YzKGludCByb3csIGludCBjb2x1bW4sIHN0cnVjdCBtdDc5MnhfYXNhcl9jbF92MyAqY2wpXG4gXHR1MzIgY29uZmlnID0gMDtcbiBcdHU4IG1vZGVfYmUgPSAwO1xuIFxuLVx0bW9kZV9iZSA9IChjbC1cdTAwM2Vtb2RlX2JlIFx1MDAzZSAweDAyKSA/IDAgOiBjbC1cdTAwM2Vtb2RlX2JlO1xuJiM0MztcdG1vZGVfYmUgPSAoY2wtXHUwMDNlbW9kZV9iZSBcdTAwM2UgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpID8gMCA6IGNsLVx1MDAzZW1vZGVfYmU7XG4gXG4gXHRpZiAoY2wtXHUwMDNldmVyc2lvbiBcdTAwM2UgMiBcdTAwMjZcdTAwMjYgY2wtXHUwMDNlY2xiZVtyb3ddIFx1MDAyNiBCSVQoY29sdW1uKSlcbiBcdFx0Y29uZmlnIHw9IChtb2RlX2JlIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyA0O1xuQEAgLTQwMiwxMCAmIzQzOzQwMiwxMCBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXAoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsICpjbClcbiBcdHUzMiBjb25maWcgPSAwO1xuIFx0dTggbW9kZV82ZywgbW9kZV81Zzk7XG4gXG4tXHRtb2RlXzZnID0gKGNsLVx1MDAzZW1vZGVfNmcgXHUwMDNlIDB4MDIpID8gMCA6IGNsLVx1MDAzZW1vZGVfNmc7XG4tXHRtb2RlXzVnOSA9IChjbC1cdTAwM2Vtb2RlXzVnOSBcdTAwM2UgMHgwMSkgPyAwIDogY2wtXHUwMDNlbW9kZV81Zzk7XG4mIzQzO1x0bW9kZV82ZyA9IChjbC1cdTAwM2Vtb2RlXzZnIFx1MDAzZSBNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVCkgPyAwIDogY2wtXHUwMDNlbW9kZV82ZztcbiYjNDM7XHRtb2RlXzVnOSA9IChjbC1cdTAwM2Vtb2RlXzVnOSBcdTAwM2UgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0VOQUJMRSkgPyAwIDogY2wtXHUwMDNlbW9kZV81Zzk7XG4gXG4tXHRpZiAoKGNsLVx1MDAzZWNsNmdbcm93XSBcdTAwMjYgQklUKGNvbHVtbikpIHx8IGNsLVx1MDAzZW1vZGVfNmcgPT0gMHgwMilcbiYjNDM7XHRpZiAoKGNsLVx1MDAzZWNsNmdbcm93XSBcdTAwMjYgQklUKGNvbHVtbikpIHx8IGNsLVx1MDAzZW1vZGVfNmcgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpXG4gXHRcdGNvbmZpZyB8PSAobW9kZV82ZyBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgMjtcbiBcdGlmIChjbC1cdTAwM2V2ZXJzaW9uIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBjbC1cdTAwM2VjbDVnOVtyb3ddIFx1MDAyNiBCSVQoY29sdW1uKSlcbiBcdFx0Y29uZmlnIHw9IChtb2RlXzVnOSBcdTAwMjYgMHgzKTtcbkBAIC00MjYsNiAmIzQzOzQyNiw5IEBAIG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbiBcdGlmICghY2wpXG4gXHRcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XG4gXG4mIzQzO1x0aWYgKGNsLVx1MDAzZW1vZGVfYmUgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYmUpOyBpJiM0MzsmIzQzOykge1xuIFx0XHRjb2wgPSA3IC0gaSAlIDg7XG4gXHRcdHJvdyA9IGkgLyA4O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG5pbmRleCA0NzQwMzMwNzM4MzE1OC4uMTEwZjY4NDM4ZDkwMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG5AQCAtMTcsNiAmIzQzOzE3LDEzIEBAXG4gXG4gI2RlZmluZSBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSURcdDB4ZmZmZmZmZmZcbiBcbiYjNDM7LyogTVRDTCBwZXItYmFuZCBjb250cm9sIG1vZGUgKG1vZGVfNmcvbW9kZV81ZzkvbW9kZV9iZSkgKi9cbiYjNDM7ZW51bSB7XG4mIzQzO1x0TVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RJU0FCTEVcdD0gMHgwMCxcdC8qIGZvcmNlIGRpc2FibGUgKi9cbiYjNDM7XHRNVDc5MlhfQUNQSV9NVENMX01PREVfRU5BQkxFXHQ9IDB4MDEsXHQvKiBlbmFibGUgaWYgZHJpdmVyIFx1MDAyNiBCSU9TIHN1cHBvcnQgKi9cbiYjNDM7XHRNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVFx0PSAweDAyLFx0Lyogc3VwcG9ydGluZyBkZXBlbmRzIG9uIGRyaXZlciBzZXR0aW5nICovXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBtdDc5MnhfYXNhcl9keW5fbGltaXQge1xuIFx0dTggaWR4O1xuIFx0dTggZnJwWzVdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBBQ1BJIFNBUiAoU3BlY2lmaWMgQWJzb3JwdGlvbiBSYXRlKSBwYXJzaW5nIGxvZ2ljIGZvciBNZWRpYXRlayBNVDc5MnggV2ktRmkgY2FyZHMuIFRoaXMgY29kZSByZWxpZXMgb24gcmV0cmlldmluZyB0aGUgQUNQSSBjb21wYW5pb24gZGV2aWNlIHZpYSBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldikgdG8gcmVhZCB0aGUgQUNQSSB0YWJsZXMuIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGR5bmFtaWNhbGx5IGNyZWF0ZWQgVVNCIG9yIFBDSWUgZGV2aWNlcyBkbyBub3QgaGF2ZSBBQ1BJIG5vZGVzIGluIHRoZSBEU0RULCBzbyBBQ1BJX0hBTkRMRSByZXR1cm5zIE5VTEwuIENvbnNlcXVlbnRseSwgdGhlIEFDUEkgcmVhZGluZyBmYWlscywgdGhlIGNvdW50cnlsaXN0IGlzIG5ldmVyIHBvcHVsYXRlZCwgYW5kIHRoZSBtb2RpZmllZCBwYXJzaW5nIGZ1bmN0aW9ucyByZXR1cm4gZWFybHksIG1ha2luZyB0aGlzIGNvZGUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMmEyNGFkNTA1NGVlMDViZTJlM2MyNDljOGE4NGNjN2Q5YThlMDRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMTM6MzY6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYwppbmRleCA5NDZkZDc5NTZlNGEwZC4uODY4ZmVhZGJmZjYxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYwpAQCAtMzg4LDcgJiM0MzszODgsNyBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjbCkKIAl1MzIgY29uZmlnID0gMDsKIAl1OCBtb2RlX2JlID0gMDsKIAotCW1vZGVfYmUgPSAoY2wtJmd0O21vZGVfYmUgJmd0OyAweDAyKSA/IDAgOiBjbC0mZ3Q7bW9kZV9iZTsKJiM0MzsJbW9kZV9iZSA9IChjbC0mZ3Q7bW9kZV9iZSAmZ3Q7IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKSA/IDAgOiBjbC0mZ3Q7bW9kZV9iZTsKIAogCWlmIChjbC0mZ3Q7dmVyc2lvbiAmZ3Q7IDIgJmFtcDsmYW1wOyBjbC0mZ3Q7Y2xiZVtyb3ddICZhbXA7IEJJVChjb2x1bW4pKQogCQljb25maWcgfD0gKG1vZGVfYmUgJmFtcDsgMHgzKSAmbHQ7Jmx0OyA0OwpAQCAtNDAyLDEwICYjNDM7NDAyLDEwIEBAIG10NzkyeF9hY3BpX2dldF9tdGNsX21hcChpbnQgcm93LCBpbnQgY29sdW1uLCBzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2wgKmNsKQogCXUzMiBjb25maWcgPSAwOwogCXU4IG1vZGVfNmcsIG1vZGVfNWc5OwogCi0JbW9kZV82ZyA9IChjbC0mZ3Q7bW9kZV82ZyAmZ3Q7IDB4MDIpID8gMCA6IGNsLSZndDttb2RlXzZnOwotCW1vZGVfNWc5ID0gKGNsLSZndDttb2RlXzVnOSAmZ3Q7IDB4MDEpID8gMCA6IGNsLSZndDttb2RlXzVnOTsKJiM0MzsJbW9kZV82ZyA9IChjbC0mZ3Q7bW9kZV82ZyAmZ3Q7IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKSA/IDAgOiBjbC0mZ3Q7bW9kZV82ZzsKJiM0MzsJbW9kZV81ZzkgPSAoY2wtJmd0O21vZGVfNWc5ICZndDsgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0VOQUJMRSkgPyAwIDogY2wtJmd0O21vZGVfNWc5OwogCi0JaWYgKChjbC0mZ3Q7Y2w2Z1tyb3ddICZhbXA7IEJJVChjb2x1bW4pKSB8fCBjbC0mZ3Q7bW9kZV82ZyA9PSAweDAyKQomIzQzOwlpZiAoKGNsLSZndDtjbDZnW3Jvd10gJmFtcDsgQklUKGNvbHVtbikpIHx8IGNsLSZndDttb2RlXzZnID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKQogCQljb25maWcgfD0gKG1vZGVfNmcgJmFtcDsgMHgzKSAmbHQ7Jmx0OyAyOwogCWlmIChjbC0mZ3Q7dmVyc2lvbiAmZ3Q7IDEgJmFtcDsmYW1wOyBjbC0mZ3Q7Y2w1Zzlbcm93XSAmYW1wOyBCSVQoY29sdW1uKSkKIAkJY29uZmlnIHw9IChtb2RlXzVnOSAmYW1wOyAweDMpOwpAQCAtNDI2LDYgJiM0Mzs0MjYsOSBAQCBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpCiAJaWYgKCFjbCkKIAkJcmV0dXJuIE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRDsKIAomIzQzOwlpZiAoY2wtJmd0O21vZGVfYmUgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShjY19saXN0X2JlKTsgaSYjNDM7JiM0MzspIHsKIAkJY29sID0gNyAtIGkgJSA4OwogCQlyb3cgPSBpIC8gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oCmluZGV4IDQ3NDAzMzA3MzgzMTU4Li4xMTBmNjg0MzhkOTAwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oCkBAIC0xNyw2ICYjNDM7MTcsMTMgQEAKIAogI2RlZmluZSBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQJMHhmZmZmZmZmZgogCiYjNDM7LyogTVRDTCBwZXItYmFuZCBjb250cm9sIG1vZGUgKG1vZGVfNmcvbW9kZV81ZzkvbW9kZV9iZSkgKi8KJiM0MztlbnVtIHsKJiM0MzsJTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RJU0FCTEUJPSAweDAwLAkvKiBmb3JjZSBkaXNhYmxlICovCiYjNDM7CU1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9FTkFCTEUJPSAweDAxLAkvKiBlbmFibGUgaWYgZHJpdmVyICZhbXA7IEJJT1Mgc3VwcG9ydCAqLwomIzQzOwlNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVAk9IDB4MDIsCS8qIHN1cHBvcnRpbmcgZGVwZW5kcyBvbiBkcml2ZXIgc2V0dGluZyAqLwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgbXQ3OTJ4X2FzYXJfZHluX2xpbWl0IHsKIAl1OCBpZHg7CiAJdTggZnJwWzVdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY2AuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgY2xlYW5pbmcgdXAgc29tZSBtYWdpYyBudW1iZXJzIHJlbGF0ZWQgdG8gQUNQSSBTQVIgcGFyc2luZyBmb3IgdGhlIE1UNzkyeCB3aXJlbGVzcyBjYXJkcy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSByZXBsYWNpbmcgdGhvc2UgbnVtYmVycyB3aXRoIGVudW0gdmFsdWVzOiBgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFRgIGFuZCBgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0VOQUJMRWAuICBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGEgY2hlY2sgaW4gYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB0byBzaG9ydC1jaXJjdWl0IGlmIGBjbC0mZ3Q7bW9kZV9iZWAgaXMgYE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUYC4gIFRoaXMgaXMgc3RhbmRhcmQgc3R1ZmYgZm9yIHRoaXMga2luZCBvZiBjbGVhbnVwLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZSBhbmQgcG90ZW50aWFsbHkgbGVzcyBlcnJvci1wcm9uZS4KClRoZSBjb3JlIG9mIHRoaXMgaXMgQUNQSSBTQVIgcGFyc2luZy4gVGhlc2UgdGFibGVzIGFyZSBnZW5lcmFsbHkgcHJvdmlkZWQgYnkgdGhlIEJJT1Mgb3IgZmlybXdhcmUgYW5kIGFyZSBwYXJzZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBvciBpbiByZXNwb25zZSB0byBBQ1BJIGV2ZW50cy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIGNvZGUgcGF0aCBldmVuIGFjY2Vzc2libGUgaW4gYSBRRU1VIGVudmlyb25tZW50PyBTeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBpbmplY3QgQUNQSSB0YWJsZXMsIGJ1dCB1c3VhbGx5LCB0aGF0JiMzOTtzIHRhaWxvcmVkIHRvIHRoZSBoYXJkd2FyZS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIE1lZGlhdGVrIE1UNzkyeCwgYSBQQ0llL1NESU8vVVNCIFdpLUZpIGNhcmQsIGl0JiMzOTtzIHByb2JhYmx5IGZlYXNpYmxlIHRvIGV4ZXJjaXNlIHRoaXMgY29kZSB3aXRoIGNhcmVmdWxseSBjcmFmdGVkIEFDUEkgZGF0YS4KCk5vdywgaG93IGNhbiBJIGZ1enogdGhpcz8gIExldCYjMzk7cyBzZWXigKYgVGhlIGtleSBmdW5jdGlvbiBtb2RpZmllZCBpcyBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIHRvIHNlZSB3aGF0IHRyaWdnZXJzIGl0IGFuZCB0aGVuIGV4cGxvcmUgdGhlIHBvdGVudGlhbCBvZiBmdXp6aW5nIHRoYXQgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTY9c3RhdGljIHUzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0MTc6bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MTgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDcyPXUzMiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDgwOlx0Y29uZmlnID0gbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMocGh5LCBhbHBoYTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00ODEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUcmFjaW5nIHRoZSBDb25maWd1cmF0aW9uIEFjcXVpc2l0aW9uKioKClJpZ2h0LCBgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZmAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiBhbmQgKndoZW4qIHRoaXMgZnVuY3Rpb24gZ2V0cyBpbnZva2VkLiBTbywgbXkgbWVudGFsIG1hcCBub3cgbmVlZHMgdG8gZXhwYW5kIHRvIGlkZW50aWZ5IHRoZSBjYWxsZXJzIG9mIGBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBmb3IgaXRzIGludm9jYXRpb25zLiBLbm93aW5nIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIHN5c3RlbSBjb250ZXh0IGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBhY2Nlc3NlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYz0xMzA2PWludCBfX210NzkyMV9tY3Vfc2V0X2NsYyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqYWxwaGEyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTEzMzItXHRcdC5hY3BpX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfZmxhZ3MoXHUwMDI2ZGV2LVx1MDAzZXBoeSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYzoxMzMzOlx0XHQubXRjbF9jb25mID0gbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZihcdTAwMjZkZXYtXHUwMDNlcGh5LCBhbHBoYTIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtMTMzNC1cdH07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jPTIxPXZvaWQgbXQ3OTI1X3JlZ2RfYmVfY3RybChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqYWxwaGEyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYy0yNi1cdGJvb2wgb2xkID0gZGV2LVx1MDAzZWhhc19laHQsIG5ldyA9IHRydWU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM6Mjc6XHR1MzIgbXRjbF9jb25mID0gbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZihcdTAwMjZkZXYtXHUwMDNlcGh5LCBhbHBoYTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTI4LVx0dTggKnBvcztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM9Njc9bXQ3OTI1X3JlZ2RfY2hhbm5lbF91cGRhdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG10NzkyeF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtNzUtXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jOjc2Olx0dTMyIG10Y2xfY29uZiA9IG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoXHUwMDI2ZGV2LVx1MDAzZXBoeSwgbWRldi1cdTAwM2VhbHBoYTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTc3LVx0aW50IGk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD01NTI9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaDo1NTM6dTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4LmgtNTU0LSNlbHNlXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD01NjY9c3RhdGljIGlubGluZSB1OCBtdDc5MnhfYWNwaV9nZXRfZmxhZ3Moc3RydWN0IG10NzkyeF9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeC5oLTU3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4Lmg6NTcxOnN0YXRpYyBpbmxpbmUgdTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaC01NzIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDQ5PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDcyOnUzMiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDczLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ4OC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQ4OTpFWFBPUlRfU1lNQk9MX0dQTChtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjYxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgTVQ3OTIxL01UNzkyNSBXaS1GaSBDYXJkIEVtdWxhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgTVQ3OTIxIGFuZCBNVDc5MjUgV2ktRmkgY2FyZHMgZnJvbSBNZWRpYXRlay4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgZW11bGF0ZSB0aGVzZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGUgTVQ3OTIxIGFwcGVhcnMgdG8gYmUgYSBQQ0llL1VTQi9TRElPIGRldmljZSwgd2hpY2ggaW1tZWRpYXRlbHkgZ2l2ZXMgdXMgYSBmZXcgcG9pbnRzIG9mIGVudHJ5IHRvIGV4cGxvcmUuIFRoZW4gSSByZW1lbWJlcmVkIHN5emthbGxlciBoYXMgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJbnRlcmVzdGluZy4uLiBkb2VzIHRoZSBNVDc5MjEgZXZlbiAqaGF2ZSogYSBVU0IgZHJpdmVyPyBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIEkgbmVlZCB0byBjb25maXJtLiBLbm93aW5nIHRoYXQgd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCB0aGUgdmlhYmlsaXR5IG9mIHVzaW5nIFVTQiBmdXp6aW5nIGFzIGFuIGVtdWxhdGlvbiB2ZWN0b3IuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRyaXZlciBsYW5kc2NhcGUgZm9yIHRoYXQgY2FyZCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTIxdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZT01PW9iai0kKENPTkZJR19NVDc5MjFTKSAmIzQzOz0gbXQ3OTIxcy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19NVDc5MjFVKSAmIzQzOz0gbXQ3OTIxdS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZS03LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlPTExPW10NzkyMXMteSA6PSBzZGlvLm8gc2Rpb19tYWMubyBzZGlvX21jdS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZToxMjptdDc5MjF1LXkgOj0gdXNiLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjE1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdDc5MjF1X2RldmljZV90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMTYtXHR7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGU4ZCwgMHg3OTAyLCAweGZmLCAweGZmLCAweGZmKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYz0zNT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNjptdDc5MjF1X21jdV9zZW5kX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzctXHRcdFx0IGludCBjbWQsIGludCAqc2VxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6NjU6c3RhdGljIGludCBtdDc5MjF1X21jdV9pbml0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy02Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtNzAtXHRcdC50YWlscm9vbSA9IE1UX1VTQl9UQUlMX1NJWkUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzo3MTpcdFx0Lm1jdV9za2Jfc2VuZF9tc2cgPSBtdDc5MjF1X21jdV9zZW5kX21lc3NhZ2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy03Mi1cdFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzkyMV9tY3VfcGFyc2VfcmVzcG9uc2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzo4OTpzdGF0aWMgaW50IG10NzkyMXVfbWFjX3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy05MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMTQ5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MTUwOnN0YXRpYyBpbnQgbXQ3OTIxdV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNTEtXHRcdFx0IGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNzEtXHRzdGF0aWMgY29uc3Qgc3RydWN0IG10NzkyeF9oaWZfb3BzIGhpZl9vcHMgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoxNzI6XHRcdC5tY3VfaW5pdCA9IG10NzkyMXVfbWN1X2luaXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNzMtXHRcdC5pbml0X3Jlc2V0ID0gbXQ3OTJ4dV9pbml0X3Jlc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MTc0Olx0XHQucmVzZXQgPSBtdDc5MjF1X21hY19yZXNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTE3NS1cdH07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMjYzLSNpZmRlZiBDT05GSUdfUE1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjI2NDpzdGF0aWMgaW50IG10NzkyMXVfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IHN0YXRlKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMjY1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0yOTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoyOTE6c3RhdGljIGludCBtdDc5MjF1X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTI5Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzMzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzM0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBtdDc5MjF1X2RldmljZV90YWJsZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zMzUtTU9EVUxFX0ZJUk1XQVJFKE1UNzkyMV9GSVJNV0FSRV9XTSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYz0zMzY9TU9EVUxFX0ZJUk1XQVJFKE1UNzkyMV9ST01fUEFUQ0gpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzM4OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtdDc5MjF1X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTMzOS1cdC5uYW1lXHRcdD0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNDA6XHQuaWRfdGFibGVcdD0gbXQ3OTIxdV9kZXZpY2VfdGFibGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNDE6XHQucHJvYmVcdFx0PSBtdDc5MjF1X3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzQyLVx0LmRpc2Nvbm5lY3RcdD0gbXQ3OTJ4dV9kaXNjb25uZWN0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzQzLSNpZmRlZiBDT05GSUdfUE1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjM0NDpcdC5zdXNwZW5kXHQ9IG10NzkyMXVfc3VzcGVuZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjM0NTpcdC5yZXN1bWVcdFx0PSBtdDc5MjF1X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjM0NjpcdC5yZXNldF9yZXN1bWVcdD0gbXQ3OTIxdV9yZXN1bWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zNDctI2VuZGlmIC8qIENPTkZJR19QTSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM1MC19O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzUxOm1vZHVsZV91c2JfZHJpdmVyKG10NzkyMXVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgYSBVU0IgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIHNvIEkgc2VlIGEgVVNCIGRyaXZlciBmb3IgdGhlIE1UNzkyMSwgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGluIGBtdDc5MnhfYWNwaV9zYXIuY2A/IFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBBQ1BJIFNBUiAoU3BlY2lmaWMgQWJzb3JwdGlvbiBSYXRlKSBpcyB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHRoZXJtYWwgcmVndWxhdGlvbiwgb2Z0ZW4gbGlua2VkIHRvIGJhdHRlcnktcG93ZXJlZCBkZXZpY2VzIG9yIHRob3NlIHdpdGggcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBoZWF0IGdlbmVyYXRpb24uIEkgd291bGRuJiMzOTt0IGluc3RpbmN0aXZlbHkgY29ubmVjdCBBQ1BJIFNBUiBkaXJlY3RseSB0byBhIFVTQiBkZXZpY2UsIHRob3VnaCB0aGVyZSBtaWdodCBiZSBhIHJlYXNvbiBmb3IgdGhpcyBJJiMzOTttIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgQUNQSSB0YWJsZSBkYXRhLCBzaW5jZSB0aGlzIGlzIHdoZXJlIHRoZSBsaW5rIGJldHdlZW4gQUNQSSBhbmQgdGhlIFVTQiBkZXZpY2Ugd291bGQgYmUgZXN0YWJsaXNoZWQgaWYgaXQgZXhpc3RzLiBLbm93aW5nIHRoZSByZXRyaWV2YWwgbWV0aG9kIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gSXMgdGhpcyB0YWJsZSB1c2VkIHRvIGNvbmZpZ3VyZSBkZXZpY2UgcG93ZXIgc3RhdGVzIG9uIFVTQiBkZXZpY2VzLCBvciBpcyBpdCBnZXR0aW5nIGNhbGxlZCBpbiBlcnJvcj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTY9c3RhdGljIHUzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0MTc6bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MTgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDcyPXUzMiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDgwOlx0Y29uZmlnID0gbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMocGh5LCBhbHBoYTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00ODEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIE1UNzkyeCBBQ1BJIFRhYmxlIFBhcnNpbmcqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyByb3V0aW5lLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIEFDUEkgdGFibGUuIElzIGl0IGEgd2VsbC1kZWZpbmVkIHN0cnVjdHVyZSBvciBzb21ldGhpbmcgbW9yZSBhZC1ob2M/IEdpdmVuIHRoZSB2ZXJzaW9uIG51bWJlciAodjMpLCB0aGVyZSYjMzk7cyBsaWtlbHkgZXZvbHV0aW9uIGluIHRoZSB0YWJsZSBmb3JtYXQgdG8gY29uc2lkZXIsIGFuZCB0aGVyZWZvcmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKG9yIHRoZSBsYWNrIHRoZXJlb2YpIHdpbGwgYmUgaW1wb3J0YW50IHRvIGdyYXNwLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBkYXRhIGlzIGJlaW5nIGV4dHJhY3RlZDogaXMgdGhpcyBwcmltYXJpbHkgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBhcmUgdGhlIGtleSBmaWVsZHMgdGhlIGRyaXZlciByZWxpZXMgdXBvbj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMg4oCTIHRoaW5ncyBsaWtlIGFzc3VtaW5nIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9uIGxldmVscywgaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMsIG9yIGJ5dGUtb3JkZXIgaXNzdWVzIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yLWhhbmRsaW5nIGFuZCBob3cgZ3JhY2VmdWxseSBpdCByZXNwb25kcyB0byBjb3JydXB0ZWQgb3IgbWlzc2luZyBkYXRhIHdpdGhpbiB0aGUgdGFibGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHZhbGlkYXRpb24gY2hlY2tzIGFyZSB0aG9yb3VnaCwgYW5kIGhvdyB0aGV5IHJlcG9ydC9oYW5kbGUgZXJyb3JzLiBGaW5hbGx5LCB3aGF0JiMzOTtzIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgQUNQSSBtZXRob2RzIG9yIHN0cnVjdHVyZXMgdG8gZXN0YWJsaXNoIHBvd2VyIHN0YXRlcyBvciBvdGhlciBmdW5jdGlvbmFsaXR5PyBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIHRoZSBjb2RlIGxvZ2ljIGFuZCBhbnkgYXNzdW1wdGlvbnMgd2l0aGluLCBzbyBJIGNhbiBwcmVkaWN0IGhvdyBpdCYjMzk7bGwgYmVoYXZlIGluIHJlYWwtd29ybGQgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMDpcdFx0aWYgKGNsLVx1MDAzZXZlcnNpb24gXHUwMDNlIDEgXHUwMDI2XHUwMDI2IGNsLVx1MDAzZWNsNWc5W3Jvd10gXHUwMDI2IEJJVChjb2x1bW4pKVxuIDQxMTpcdFx0XHRjb25maWcgfD0gKG1vZGVfNWc5IFx1MDAyNiAweDMpO1xuIDQxMjpcdFxuIDQxMzpcdFx0cmV0dXJuIGNvbmZpZztcbiA0MTQ6XHR9XG4gNDE1Olx0XG4gNDE2Olx0c3RhdGljIHUzMlxuIDQxNzpcdG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbiA0MTg6XHR7XG4gNDE5Olx0XHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbiA0MjA6XHRcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbF92MyAqY2wgPSBzYXItXHUwMDNlY291bnRyeWxpc3RfdjM7XG4gNDIxOlx0XHRpbnQgY29sLCByb3csIGk7XG4gNDIyOlx0XG4gNDIzOlx0XHRpZiAoc2FyLVx1MDAzZXZlciAhPSAzKVxuIDQyNDpcdFx0XHRnb3RvIG91dDtcbiA0MjU6XHRcbiA0MjY6XHRcdGlmICghY2wpXG4gNDI3Olx0XHRcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XG4gNDI4Olx0XG4gNDI5Olx0XHRpZiAoY2wtXHUwMDNlbW9kZV9iZSA9PSBNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVClcbiA0MzA6XHRcdFx0Z290byBvdXQ7XG4gNDMxOlx0XG4gNDMyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYmUpOyBpJiM0MzsmIzQzOykge1xuIDQzMzpcdFx0XHRjb2wgPSA3IC0gaSAlIDg7XG4gNDM0Olx0XHRcdHJvdyA9IGkgLyA4O1xuIDQzNTpcdFx0XHRpZiAoIW1lbWNtcChjY19saXN0X2JlW2ldLCBhbHBoYTIsIDIpKVxuIDQzNjpcdFx0XHRcdHJldHVybiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMocm93LCBjb2wsIGNsKTtcbiA0Mzc6XHRcdH1cbiA0Mzg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY2NfbGlzdF9ldSk7IGkmIzQzOyYjNDM7KSB7XG4gNDM5Olx0XHRcdGlmICghbWVtY21wKGNjX2xpc3RfZXVbaV0sIGFscGhhMiwgMikpXG4gNDQwOlx0XHRcdFx0cmV0dXJuIG10NzkyeF9hY3BpX2dldF9tdGNsX21hcF92MygzLCA3LCBjbCk7XG4gNDQxOlx0XHR9XG4gNDQyOlx0XG4gNDQzOlx0b3V0OlxuIDQ0NDpcdFx0LyogRGVwZW5kcyBvbiBkcml2ZXIgKi9cbiA0NDU6XHRcdHJldHVybiAweDIwO1xuIDQ0NjpcdH1cbiA0NDc6XHRcbiA0NDg6XHRzdGF0aWMgdTMyXG4gNDQ5Olx0bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90Ymwoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuIDQ1MDpcdHtcbiA0NTE6XHRcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cdTAwM2VhY3Bpc2FyO1xuIDQ1MjpcdFx0c3RydWN0IG10NzkyeF9hc2FyX2NsICpjbCA9IHNhci1cdTAwM2Vjb3VudHJ5bGlzdDtcbiA0NTM6XHRcdGludCBjb2wsIHJvdywgaTtcbiA0NTQ6XHRcbiA0NTU6XHRcdGlmICghY2wpXG4gNDU2Olx0XHRcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XG4gNDU3Olx0XG4gNDU4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYWxsKTsgaSYjNDM7JiM0MzspIHtcbiA0NTk6XHRcdFx0Y29sID0gNyAtIGkgJSA4O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTYwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBwaHktJmd0O2FjcGlzYXJgIFZhbHVlKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIHB1bGxpbmcgZGF0YSBmcm9tIGBwaHktJmd0O2FjcGlzYXJgLiBDbGFzc2ljLiBCdXQgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSB0aGUgaGVsbCBpcyBgYWNwaXNhcmAgZ2V0dGluZyBpdHMgdmFsdWU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSByYW5kb20gdmFyaWFibGU7IGl0JiMzOTtzIGxpa2VseSBjcnVjaWFsIGZvciBzb21lIGhhcmR3YXJlIGludGVyYWN0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYnVzIG9yIGRldmljZS4gSXMgaXQgYSByZWdpc3RlciByZWFkLCBzb21ldGhpbmcgZGVyaXZlZCBmcm9tIGEgbW9yZSBjb21wbGV4IGNhbGN1bGF0aW9uLCBvciBwZXJoYXBzIGEgdmFsdWUgcGFzc2VkIGluIGZyb20gc29tZXdoZXJlIGVsc2UgZHVyaW5nIGluaXRpYWxpemF0aW9uPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgYXNzaWdubWVudC4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBhc3NpZ25tZW50LCBidXQga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIHVzdWFsbHkgZ28sIEkmIzM5O20gcHJlcGFyZWQgZm9yIGEgcmFiYml0IGhvbGUuIExldCYjMzk7cyBzZWUuLi4gaXMgdGhlcmUgYSBjbGVhciBpbml0aWFsaXphdGlvbiBwYXRoPyBPciBhbSBJIGdvaW5nIHRvIGJlIGRpdmluZyBpbnRvIGludGVycnVwdCBoYW5kbGVycyBhbmQgQUNQSSB0YWJsZXM/IFRpbWUgdG8gc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWNwaXNhciA9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9MTkzPWludCBtdDc5MnhfaW5pdF9hY3BpX3NhcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjI2LVx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzoyMjc6XHRkZXYtXHUwMDNlcGh5LmFjcGlzYXIgPSBhc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMjgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zNDg9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM0OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjM1MDpcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFjcGlzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzUxLVx0c3RydWN0IG10NzkyeF9hc2FyX2ZnICpmZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBgbXQ3OTJ4X2luaXRfYWNwaV9zYXJgLi4uKioKClJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGF0IGBtdDc5MnhfaW5pdF9hY3BpX3NhcmAgZnVuY3Rpb24uIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBtb2R1bGUgaGFuZGxlcyBTcGVjaWZpYyBBYnNvcnB0aW9uIFJhdGUgKFNBUikgY29tcGxpYW5jZSB0aHJvdWdoIEFDUEkuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIE1UNzkyeCBzZXJpZXMsIHdoaWNoIG9mdGVuIGludGVncmF0ZXMgYm90aCBXaS1GaSBhbmQgQmx1ZXRvb3RoLCBTQVIgbWl0aWdhdGlvbiBiZWNvbWVzIGEgY29tcGxleCBqdWdnbGluZyBhY3Qgb2YgcG93ZXIgbGV2ZWxzIGFuZCByYWRpbyBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEFDUEkgdGFibGVzIGFyZSBwYXJzZWQgYW5kIGludGVycHJldGVkIHRvIGR5bmFtaWNhbGx5IGFkanVzdCB0aGUgdHJhbnNtaXQgcG93ZXIgdG8gc3RheSB3aXRoaW4gcmVndWxhdG9yeSBsaW1pdHMsIHBhcnRpY3VsYXJseSB3aGVuIHRoZSBkZXZpY2UgaXMgb3BlcmF0aW5nIG5lYXIgYSB1c2VyJiMzOTtzIGJvZHkuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgdHlwaWNhbCBBQ1BJIG1ldGhvZHMgaW52b2x2ZWQ6IGBfUFNWYCwgYF9TSU9gLCBwb3RlbnRpYWxseSBgX1BQRGAsIGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZCB0byByZWFkIFNBUi1zcGVjaWZpYyBkYXRhLCBkZWZpbmUgcG93ZXIgc3RhdGVzLCBvciB0cmlnZ2VyIHJhZGlvIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhleSB1c2luZyB0aGUgc3RhbmRhcmQgU0FSIGNvbnRyb2wgbWV0aG9kcz8gT3IgaXMgaXQgYSBjdXN0b20gYXBwcm9hY2g/IEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBmaXJtd2FyZSDigJMgaG93IGRhdGEgaXMgcGFzc2VkIGJldHdlZW4gdGhlIEFDUEkgbGF5ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBmb3IgYW55IHBvd2VyLXNhdmluZyBzdHJhdGVnaWVzIGltcGxlbWVudGVkIGFsb25nc2lkZSBTQVIgY29udHJvbCwgYXMgdGhlc2Ugb2Z0ZW4gZ28gaGFuZC1pbi1oYW5kLiBGb3IgZXhhbXBsZSwgYXJlIHRoZXkgdXNpbmcgYSBzZXBhcmF0ZSBwb3dlciBkb21haW4gZm9yIHRoZSByYWRpbz8gQW5kIEkgZGVmaW5pdGVseSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZXJyb3IgaGFuZGxpbmcgb3IgZmFsbGJhY2sgbWVjaGFuaXNtcyBpbiBjYXNlIHRoZSBBQ1BJIGRhdGEgaXMgbWFsZm9ybWVkIG9yIG1pc3NpbmcuIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgcm9idXN0IGFuZCB3ZWxsLWRlc2lnbmVkIGZvciByZWFsLXdvcmxkIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdHJldHVybiAwO1xuIDE5MTpcdH1cbiAxOTI6XHRcbiAxOTM6XHRpbnQgbXQ3OTJ4X2luaXRfYWNwaV9zYXIoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbiAxOTQ6XHR7XG4gMTk1Olx0XHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyO1xuIDE5NjpcdFx0aW50IHJldDtcbiAxOTc6XHRcbiAxOTg6XHRcdGFzYXIgPSBkZXZtX2t6YWxsb2MoZGV2LVx1MDAzZW10NzYuZGV2LCBzaXplb2YoKmFzYXIpLCBHRlBfS0VSTkVMKTtcbiAxOTk6XHRcdGlmICghYXNhcilcbiAyMDA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjAxOlx0XG4gMjAyOlx0XHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbChkZXYsICh1OCAqKilcdTAwMjZhc2FyLVx1MDAzZWNvdW50cnlsaXN0LCBcdTAwMjZhc2FyLVx1MDAzZXZlcik7XG4gMjAzOlx0XHRpZiAocmV0KSB7XG4gMjA0Olx0XHRcdGRldm1fa2ZyZWUoZGV2LVx1MDAzZW10NzYuZGV2LCBhc2FyLVx1MDAzZWNvdW50cnlsaXN0KTtcbiAyMDU6XHRcdFx0YXNhci1cdTAwM2Vjb3VudHJ5bGlzdCA9IE5VTEw7XG4gMjA2Olx0XHR9XG4gMjA3Olx0XG4gMjA4Olx0XHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRkcyhkZXYsICh1OCAqKilcdTAwMjZhc2FyLVx1MDAzZWR5biwgYXNhci1cdTAwM2V2ZXIpO1xuIDIwOTpcdFx0aWYgKHJldCkge1xuIDIxMDpcdFx0XHRkZXZtX2tmcmVlKGRldi1cdTAwM2VtdDc2LmRldiwgYXNhci1cdTAwM2VkeW4pO1xuIDIxMTpcdFx0XHRhc2FyLVx1MDAzZWR5biA9IE5VTEw7XG4gMjEyOlx0XHR9XG4gMjEzOlx0XG4gMjE0Olx0XHQvKiBNVEdTIGlzIG9wdGlvbmFsICovXG4gMjE1Olx0XHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRncyhkZXYsICh1OCAqKilcdTAwMjZhc2FyLVx1MDAzZWdlbywgYXNhci1cdTAwM2V2ZXIpO1xuIDIxNjpcdFx0aWYgKHJldCkge1xuIDIxNzpcdFx0XHRkZXZtX2tmcmVlKGRldi1cdTAwM2VtdDc2LmRldiwgYXNhci1cdTAwM2VnZW8pO1xuIDIxODpcdFx0XHRhc2FyLVx1MDAzZWdlbyA9IE5VTEw7XG4gMjE5Olx0XHR9XG4gMjIwOlx0XG4gMjIxOlx0XHQvKiBNVEZHIGlzIG9wdGlvbmFsICovXG4gMjIyOlx0XHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRmZyhkZXYsICh1OCAqKilcdTAwMjZhc2FyLVx1MDAzZWZnKTtcbiAyMjM6XHRcdGlmIChyZXQpIHtcbiAyMjQ6XHRcdFx0ZGV2bV9rZnJlZShkZXYtXHUwMDNlbXQ3Ni5kZXYsIGFzYXItXHUwMDNlZmcpO1xuIDIyNTpcdFx0XHRhc2FyLVx1MDAzZWZnID0gTlVMTDtcbiAyMjY6XHRcdH1cbiAyMjc6XHRcdGRldi1cdTAwM2VwaHkuYWNwaXNhciA9IGFzYXI7XG4gMjI4Olx0XG4gMjI5Olx0XHRyZXR1cm4gMDtcbiAyMzA6XHR9XG4gMjMxOlx0RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTJ4X2luaXRfYWNwaV9zYXIpO1xuIDIzMjpcdFxuIDIzMzpcdHN0YXRpYyBzOFxuIDIzNDpcdG10NzkyeF9hc2FyX2dldF9nZW9fcHdyKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksXG4gMjM1Olx0XHRcdFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZCwgczggZHluX3Bvd2VyKVxuIDIzNjpcdHtcbiAyMzc6XHRcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbiAyMzg6XHRcdHN0cnVjdCBtdDc5MnhfYXNhcl9nZW9fYmFuZCAqYmFuZF9wd3I7XG4gMjM5Olx0XHRzOCBnZW9fcG93ZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODQ3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBQ1BJIFRhYmxlIEV4YW1pbmF0aW9uIC0gRm9jdXNlZCBvbiBNVDc5MnggQVNBUiAmYW1wOyBNVENMKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gdGhlIGBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbGAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgdGFibGUgcmVhZGVyLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQmIzM5O3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIEFDUEkgKEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSkgc3lzdGVtLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgaW5mb3JtYXRpb24gdGhhdCBpcyByZWxldmFudCB0bywgYW5kIGhvcGVmdWxseSwgY29udGFpbnMgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBNVDc5MnggY2hpcHNldCYjMzk7cyBBU0FSIChBZHZhbmNlZCBTeXN0ZW0gQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyKSBvciB0aGUgTVRDTCAoTWVkaWFUZWsgQ29udHJvbCBMYW5ndWFnZSkgc3RydWN0dXJlcy4KCkkmIzM5O20gbWFraW5nIHRoZSBhc3N1bXB0aW9uIHRoYXQgQVNBUiBsaWtlbHkgcmVsYXRlcyB0byBtb3JlIGhhcmR3YXJlLWxldmVsIGNvbmZpZ3VyYXRpb24sIHBlcmhhcHMgY2xvY2sgc2V0dGluZ3MsIHBvd2VyIG1hbmFnZW1lbnQgc3BlY2lmaWNzLCBvciBldmVuIG1lbW9yeSBtYXBwaW5ncyB1bmlxdWUgdG8gdGhlIE1UNzkyeCBpbXBsZW1lbnRhdGlvbi4gV2hpbGUgTVRDTCBwcm9iYWJseSBjb25maWd1cmVzIGFzcGVjdHMgb2YgTWVkaWFUZWstc3BlY2lmaWMgZmlybXdhcmUuCgpUaGUgc3RydWN0dXJlIG9mIHRoZSBBQ1BJIHRhYmxlcyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGVzZSB0YWJsZXMgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgc3RydWN0dXJlZC4gVGhlIEJJT1MmIzM5O3MgQUNQSSBpbXBsZW1lbnRhdGlvbiBpcyBsaWtlbHkgZ29pbmcgdG8gZGVmaW5lIHRoZSBsYXlvdXQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGl0JiMzOTtzIHVzaW5nIHN0YW5kYXJkIEFDUEkgbWV0aG9kcywgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMsIG9yIGEgY29tYmluYXRpb24gb2YgYm90aC4gSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBmb3IgdGhvc2UgcXVpcmtzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgY29kZSB0byBzZWUgd2hhdCBBQ1BJIG1ldGhvZHMgaXQmIzM5O3MgdXNpbmcsIGhvdyB0aGUgdGFibGUgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQsIGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgZXh0cmFjdGVkLiBUaGUgZnVuY3Rpb24mIzM5O3Mgcm9sZSBpbiB0aGUgZHJpdmVyIG9yIGZpcm13YXJlIGNvbnRleHQgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBoZXJlLiBXaGF0IG90aGVyIHNlY3Rpb25zIG9mIHRoZSBjb2RlIGNhbGwgdGhpcyBmdW5jdGlvbj8gRG9lcyBpdCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyBncmFjZWZ1bGx5PyBJcyBpdCBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlPyBXaGF0IHNwZWNpZmljIHJlc291cmNlcyBhbmQvb3IgY29uZmlndXJhdGlvbnMgY2FuIGl0IGlkZW50aWZ5PyBUaG9zZSBhcmUgc29tZSBvZiB0aGUgcXVlc3Rpb25zIEkgYW0gYXNraW5nIG15c2VsZi4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgaXQgZXh0cmFjdHMgdGhlIEFTQVIgYW5kL29yIE1UQ0wtcmVsYXRlZCBkYXRhLCBhbmQgY3JpdGljYWxseSwgaG93IHRoYXQgZGF0YSBpcyB0aGVuIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdC8qIENvcHlyaWdodCAoQykgMjAyMyBNZWRpYVRlayBJbmMuICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXCYjMzQ7bXQ3OTJ4LmhcJiMzNDtcbiAgIDY6XHRcbiAgIDc6XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjX2xpc3RfYWxsW10gPSB7XG4gICA4Olx0XHRcJiMzNDswMFwmIzM0OywgXCYjMzQ7RVVcJiMzNDssIFwmIzM0O0FSXCYjMzQ7LCBcJiMzNDtBVVwmIzM0OywgXCYjMzQ7QVpcJiMzNDssIFwmIzM0O0JZXCYjMzQ7LCBcJiMzNDtCT1wmIzM0OywgXCYjMzQ7QlJcJiMzNDssXG4gICA5Olx0XHRcJiMzNDtDQVwmIzM0OywgXCYjMzQ7Q0xcJiMzNDssIFwmIzM0O0NOXCYjMzQ7LCBcJiMzNDtJRFwmIzM0OywgXCYjMzQ7SlBcJiMzNDssIFwmIzM0O01ZXCYjMzQ7LCBcJiMzNDtNWFwmIzM0OywgXCYjMzQ7TUVcJiMzNDssXG4gIDEwOlx0XHRcJiMzNDtNQVwmIzM0OywgXCYjMzQ7TlpcJiMzNDssIFwmIzM0O05HXCYjMzQ7LCBcJiMzNDtQSFwmIzM0OywgXCYjMzQ7UlVcJiMzNDssIFwmIzM0O1JTXCYjMzQ7LCBcJiMzNDtTR1wmIzM0OywgXCYjMzQ7S1JcJiMzNDssXG4gIDExOlx0XHRcJiMzNDtUV1wmIzM0OywgXCYjMzQ7VEhcJiMzNDssIFwmIzM0O1VBXCYjMzQ7LCBcJiMzNDtHQlwmIzM0OywgXCYjMzQ7VVNcJiMzNDssIFwmIzM0O1ZOXCYjMzQ7LCBcJiMzNDtLSFwmIzM0OywgXCYjMzQ7UFlcJiMzNDssXG4gIDEyOlx0fTtcbiAgMTM6XHRcbiAgMTQ6XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjX2xpc3RfZXVbXSA9IHtcbiAgMTU6XHRcdFwmIzM0O0FEXCYjMzQ7LCBcJiMzNDtBVFwmIzM0OywgXCYjMzQ7QkVcJiMzNDssIFwmIzM0O0JHXCYjMzQ7LCBcJiMzNDtDWVwmIzM0OywgXCYjMzQ7Q1pcJiMzNDssIFwmIzM0O0hSXCYjMzQ7LCBcJiMzNDtES1wmIzM0OyxcbiAgMTY6XHRcdFwmIzM0O0VFXCYjMzQ7LCBcJiMzNDtGSVwmIzM0OywgXCYjMzQ7RlJcJiMzNDssIFwmIzM0O0RFXCYjMzQ7LCBcJiMzNDtHUlwmIzM0OywgXCYjMzQ7SFVcJiMzNDssIFwmIzM0O0lTXCYjMzQ7LCBcJiMzNDtJRVwmIzM0OyxcbiAgMTc6XHRcdFwmIzM0O0lUXCYjMzQ7LCBcJiMzNDtMVlwmIzM0OywgXCYjMzQ7TElcJiMzNDssIFwmIzM0O0xUXCYjMzQ7LCBcJiMzNDtMVVwmIzM0OywgXCYjMzQ7TUNcJiMzNDssIFwmIzM0O01UXCYjMzQ7LCBcJiMzNDtOTFwmIzM0OyxcbiAgMTg6XHRcdFwmIzM0O05PXCYjMzQ7LCBcJiMzNDtQTFwmIzM0OywgXCYjMzQ7UFRcJiMzNDssIFwmIzM0O1JPXCYjMzQ7LCBcJiMzNDtTS1wmIzM0OywgXCYjMzQ7U0lcJiMzNDssIFwmIzM0O0VTXCYjMzQ7LCBcJiMzNDtTRVwmIzM0OyxcbiAgMTk6XHRcdFwmIzM0O0NIXCYjMzQ7LFxuICAyMDpcdH07XG4gIDIxOlx0XG4gIDIyOlx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY19saXN0X2JlW10gPSB7XG4gIDIzOlx0XHRcJiMzNDtBUlwmIzM0OywgXCYjMzQ7QlJcJiMzNDssIFwmIzM0O0JZXCYjMzQ7LCBcJiMzNDtDTFwmIzM0OywgXCYjMzQ7SVFcJiMzNDssIFwmIzM0O01YXCYjMzQ7LCBcJiMzNDtPTVwmIzM0OywgXCYjMzQ7UlVcJiMzNDssXG4gIDI0Olx0XHRcJiMzNDtSV1wmIzM0OywgXCYjMzQ7Vk5cJiMzNDssIFwmIzM0O0tSXCYjMzQ7LCBcJiMzNDtVQVwmIzM0OywgXCYjMzQ7XCYjMzQ7LCBcJiMzNDtcJiMzNDssIFwmIzM0O1wmIzM0OywgXCYjMzQ7XCYjMzQ7LFxuICAyNTpcdFx0XCYjMzQ7RVVcJiMzNDssIFwmIzM0O0FUXCYjMzQ7LCBcJiMzNDtDTlwmIzM0OywgXCYjMzQ7Q0FcJiMzNDssIFwmIzM0O1RXXCYjMzQ7LCBcJiMzNDtOWlwmIzM0OywgXCYjMzQ7UEhcJiMzNDssIFwmIzM0O1VLXCYjMzQ7LFxuICAyNjpcdFx0XCYjMzQ7VVNcJiMzNDssXG4gIDI3Olx0fTtcbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgaW50XG4gIDMwOlx0bXQ3OTJ4X2FjcGlfcmVhZChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqbWV0aG9kLCB1OCAqKnRibCwgdTMyICpsZW4pXG4gIDMxOlx0e1xuICAzMjpcdFx0c3RydWN0IGFjcGlfYnVmZmVyIGJ1ZiA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTtcbiAgMzM6XHRcdHN0cnVjdCBtdDc2X2RldiAqbWRldiA9IFx1MDAyNmRldi1cdTAwM2VtdDc2O1xuICAzNDpcdFx0dW5pb24gYWNwaV9vYmplY3QgKnNhcl9yb290O1xuICAzNTpcdFx0YWNwaV9oYW5kbGUgcm9vdCwgaGFuZGxlO1xuICAzNjpcdFx0YWNwaV9zdGF0dXMgc3RhdHVzO1xuICAzNzpcdFx0dTMyIGkgPSAwO1xuICAzODpcdFx0aW50IHJldDtcbiAgMzk6XHRcbiAgNDA6XHRcdHJvb3QgPSBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldik7XG4gIDQxOlx0XHRpZiAoIXJvb3QpXG4gIDQyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAgNDM6XHRcbiAgNDQ6XHRcdHN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShyb290LCBtZXRob2QsIFx1MDAyNmhhbmRsZSk7XG4gIDQ1Olx0XHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpXG4gIDQ2Olx0XHRcdHJldHVybiAtRUlPO1xuICA0NzpcdFxuICA0ODpcdFx0c3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBOVUxMLCBOVUxMLCBcdTAwMjZidWYpO1xuICA0OTpcdFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKVxuICA1MDpcdFx0XHRyZXR1cm4gLUVJTztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFDUEkgSGFuZGxlIFJldHJpZXZhbCBpbiBRRU1VIGFuZCBDb25zaWRlcmluZyBGdXp6aW5nIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgY2FsbGluZyBgYWNwaV9nZXRfaGFuZGxlKEFDUElfSEFORExFKG1kZXYtJmd0O2RldiksIG1ldGhvZCwgJmFtcDtoYW5kbGUpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIG1hbmlwdWxhdGUgdGhlIEFDUEkgdGFibGVzIHdpdGhpbiBRRU1VIHRvIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhpcyBVU0IgZGV2aWNlPyYjMzQ7IEluIHRoZW9yeSwgeWVzLCBidXQgc3l6a2FsbGVyIHR5cGljYWxseSBkb2VzbiYjMzk7dCBpbmplY3QgQUNQSSB0YWJsZXMgc3BlY2lmaWNhbGx5IGZvciBVU0IgZGV2aWNlcy4gV2UgKmNvdWxkKiB1c2UgYHN5el9tb3VudF9pbWFnZWAgb3Igc2ltaWxhciBnbG9iYWwgaW5qZWN0aW9uLCBidXQgdXN1YWxseSB0aGUgQUNQSSB0YWJsZXMgYXJlIHNldCB1bmxlc3Mgc3l6a2FsbGVyIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgQUNQSSBpbmplY3Rpb24uCgpIYW5nIG9uLi4uIGlzbiYjMzk7dCB0aGVyZSBzb21lIEFDUEkgZnV6emluZyBjYXBhYmlsaXR5IGluIHN5emthbGxlcj8gSXQmIzM5O3MgdXN1YWxseSBmb3IgcGxhdGZvcm0gZGV2aWNlcywgdGhvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGZvcmdldHRpbmcgc29tZXRoaW5nLiBBaCwgcmlnaHQuLi4gaWYgdGhlIHRhcmdldCBpcyBhY3R1YWxseSBhIFVTQiBkZXZpY2UsIGBBQ1BJX0hBTkRMRShtZGV2LSZndDtkZXYpYCB3aWxsICpsaWtlbHkqIGJlIE5VTEwsIHVubGVzcyB0aGUgRFNEVCBoYXJkY29kZXMgYW4gQUNQSSBoYW5kbGUgZm9yIHRoZSBVU0IgZGV2aWNlLCB3aGljaCBpcyB1bnVzdWFsLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gd2hhdCBpZiB0aGlzIGlzbiYjMzk7dCBVU0I/IENvdWxkIHRoaXMgYmUgUENJZT8gVGhlIGBtdDc5MjFlYCBkcml2ZXIuLi4gdGhhdCYjMzk7cyB0aGUgUENJZSBkcml2ZXIsIGlzbiYjMzk7dCBpdD8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBZZWFoLCBJIHRoaW5rIGl0IGlzLiBPa2F5LCBsZXQmIzM5O3MgY29uZmlybSBgbXQ3OTIxZWAgZXhpc3RzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyB0aGUgQUNQSSBoYW5kbGUgaXMgcmV0cmlldmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc5MjFlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX01UNzkyMV9DT01NT04pICYjNDM7PSBtdDc5MjEtY29tbW9uLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX01UNzkyMUUpICYjNDM7PSBtdDc5MjFlLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX01UNzkyMVMpICYjNDM7PSBtdDc5MjFzLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZT05PW10NzkyMS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgJiM0Mzs9IHRlc3Rtb2RlLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlOjEwOm10NzkyMWUteSA6PSBwY2kubyBwY2lfbWFjLm8gcGNpX21jdS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZS0xMS1tdDc5MjFzLXkgOj0gc2Rpby5vIHNkaW9fbWFjLm8gc2Rpb19tY3Uub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL210NzkyMS5oPTI3MT12b2lkIG10NzkyMV9tYWNfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg6MjcyOmludCBtdDc5MjFlX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgdm9pZCAqdHh3aV9wdHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaC0yNzMtXHRcdFx0ICAgZW51bSBtdDc2X3R4cV9pZCBxaWQsIHN0cnVjdCBtdDc2X3djaWQgKndjaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg9MzAzPWludCBtdDc5MjFfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaC0zMDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaDozMDY6aW50IG10NzkyMWVfZHJpdmVyX293bihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL210NzkyMS5oOjMwNzppbnQgbXQ3OTIxZV9tYWNfcmVzZXQoc3RydWN0IG10NzkyeF9kZXYgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaDozMDg6aW50IG10NzkyMWVfbWN1X2luaXQoc3RydWN0IG10NzkyeF9kZXYgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaC0zMDktaW50IG10NzkyMXNfd2ZzeXNfcmVzZXQoc3RydWN0IG10NzkyeF9kZXYgKmRldik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM9Mzc9TU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2FzcG0sIFwmIzM0O2Rpc2FibGUgUENJIEFTUE0gc3VwcG9ydFwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0zOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jOjM5OnN0YXRpYyBpbnQgbXQ3OTIxZV9pbml0X3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmMtNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzo0NDpzdGF0aWMgdm9pZCBtdDc5MjFlX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM9MjU5PXN0YXRpYyBpbnQgbXQ3OTIxX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0yNzAtXHRcdC50b2tlbl9zaXplID0gTVQ3OTIxX1RPS0VOX1NJWkUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzoyNzE6XHRcdC50eF9wcmVwYXJlX3NrYiA9IG10NzkyMWVfdHhfcHJlcGFyZV9za2IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0yNzItXHRcdC50eF9jb21wbGV0ZV9za2IgPSBtdDc2X2Nvbm5hY190eF9jb21wbGV0ZV9za2IsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmMtMjgyLVx0c3RhdGljIGNvbnN0IHN0cnVjdCBtdDc5MnhfaGlmX29wcyBtdDc5MjFfcGNpZV9vcHMgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzoyODM6XHRcdC5pbml0X3Jlc2V0ID0gbXQ3OTIxZV9pbml0X3Jlc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM6Mjg0Olx0XHQucmVzZXQgPSBtdDc5MjFlX21hY19yZXNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jOjI4NTpcdFx0Lm1jdV9pbml0ID0gbXQ3OTIxZV9tY3VfaW5pdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTI4Ni1cdFx0LmRydl9vd24gPSBtdDc5MnhlX21jdV9kcnZfcG1jdHJsLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jPTQ0Nz1zdGF0aWMgdm9pZCBtdDc5MjFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzo0NTU6XHRtdDc5MjFlX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NTYtXHRzZXRfYml0KE1UNzZfUkVNT1ZFRCwgXHUwMDI2bWRldi1cdTAwM2VwaHkuc3RhdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy03LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jOjg6aW50IG10NzkyMWVfdHhfcHJlcGFyZV9za2Ioc3RydWN0IG10NzZfZGV2ICptZGV2LCB2b2lkICp0eHdpX3B0cixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy05LVx0XHRcdCAgIGVudW0gbXQ3Nl90eHFfaWQgcWlkLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy01NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYzo1NjppbnQgbXQ3OTIxZV9tYWNfcmVzZXQoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy01Ny17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jLTEwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYzoxMDI6XHRlcnIgPSBtdDc5MjFlX2RyaXZlcl9vd24oZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy0xMDMtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYy02LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jOjc6aW50IG10NzkyMWVfZHJpdmVyX293bihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYz0yMj1tdDc5MjFfbWN1X3NlbmRfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jOjQxOmludCBtdDc5MjFlX21jdV9pbml0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmMtNDIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYy01MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYzo1MjpcdGVyciA9IG10NzkyMWVfZHJpdmVyX293bihkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTUzLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNDkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNVDc5MjEgUENJZSBEcml2ZXIgaW4gYSBTeXprYWxsZXIgQ29udGV4dCoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBhIFBDSWUgZHJpdmVyIGZvciB0aGUgTVQ3OTIxLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0LCBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgaW50byBhbiBBQ1BJIHJvYWRibG9jay4gVGhlIGNvZGUmIzM5O3MgdXNpbmcgYGFjcGlfZ2V0X2hhbmRsZWAgdG8gcGFyc2UgQUNQSSB0YWJsZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBoYW5kbGVzLiBOb3csIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgd2hhdCBTeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMsIFBDSWUgZGV2aWNlcyAqZG9uJiMzOTt0KiBoYXZlIEFDUEkgaGFuZGxlcyBieSBkZWZhdWx0LCB1bmxlc3MgdGhleSYjMzk7cmUgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSBEU0RULiBBbmQgU3l6a2FsbGVyLCBmcm9tIHdoYXQgSSYjMzk7dmUgc2VlbiwgZG9lc24mIzM5O3QgdXN1YWxseSBkZWZpbmUgTWVkaWF0ZWsgV2ktRmkgY2FyZHMgd2l0aGluIHRoYXQgRFNEVC4gU28sIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGNvZGUgcGF0aCBtaWdodCBiZSB1bnJlYWNoYWJsZSBpbiBhIFN5emthbGxlci1kcml2ZW4gUUVNVSBzZXR1cC4KCkxldCYjMzk7cyB0cmFjZSBpdC4gSWYgYEFDUElfSEFORExFKG1kZXYtJmd0O2RldilgIGlzIE5VTEwsIHRoZSBgbXQ3OTJ4X2FjcGlfcmVhZGAgZnVuY3Rpb24gcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0IGZhaWx1cmUgY2FzY2FkZXMgdG8gYG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGNsYCwgd2hpY2ggYWxzbyByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoZW4sIHdpdGhpbiBgbXQ3OTJ4X2luaXRfYWNwaV9zYXJgLCB3ZSBzZWUgdGhhdCBlcnJvciBpcyBoYW5kbGVkLCB0aGUgYGNvdW50cnlsaXN0YCBpcyBzZXQgdG8gTlVMTCBpZiB0aGUgcmVhZCBmYWlscy4gTGF0ZXIsIHdlIHNlZSBpbiBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIHRoYXQgaWYgYHNhci0mZ3Q7Y291bnRyeWxpc3RfdjNgIGlzIE5VTEwsIGl0IHJldHVybnMgYE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRGAuCgpUaGVyZWZvcmUsIHRoZSBjb2RlIHByb2NlZWRzLiBBbmQgdGhlIGtleSBpcywgaWYgYHNhci0mZ3Q7Y291bnRyeWxpc3RfdjNgICppcyogTlVMTCwgdGhlbiB0aGUgY2hlY2sgb24gYGNsLSZndDttb2RlX2JlYCB3aWxsIGJlIHNraXBwZWQsIHdoaWNoIGltcGxpZXMgdGhlIEFDUEkgcmVhZCBzdWNjZWVkZWQuIEZvciB0aGUgQUNQSSByZWFkIHRvIHN1Y2NlZWQsIGBBQ1BJX0hBTkRMRShtZGV2LSZndDtkZXYpYCBoYXMgdG8gYmUgbm9uLU5VTEwsIGFuZCBgYWNwaV9ldmFsdWF0ZV9vYmplY3RgIGhhcyB0byByZXR1cm4gYSB2YWxpZCBidWZmZXIuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIFN5emthbGxlciBzb21laG93IG1vY2sgdGhpcyBzaXR1YXRpb24/IENhbiBpdCBpbmplY3QgYSBmYWtlIEFDUEkgaGFuZGxlIG9yIHRhYmxlIHNwZWNpZmljYWxseSBmb3IgdGhpcyBQQ0llIGRldmljZT8gTXkgZ3V0IGZlZWxpbmcsIGJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UsIGlzIHByb2JhYmx5IG5vdC4gU3l6a2FsbGVyIGlzIGdvb2QgZm9yIGdlbmVyaWMgQUNQSSBtYW5pcHVsYXRpb24sIGJ1dCBpbmplY3RpbmcgQUNQSSB0YWJsZXMgZm9yICpzcGVjaWZpYyogUENJZSBkZXZpY2VzIGZlZWxzIGxpa2UgYSBsZXZlbCBvZiBzb3BoaXN0aWNhdGlvbiBJIGhhdmVuJiMzOTt0IG9ic2VydmVkIGl0IGRvaW5nLiBJJiMzOTt2ZSBzZWVuIGl0IHVzZSBgc3l6X21vdW50X2ltYWdlYCB0byBpbmplY3QgdGhpbmdzLCBidXQgbmV2ZXIgYSBQQ0llIGRldmljZSBBQ1BJLiBTbyBpdCBzZWVtcyB1bmxpa2VseS4gSSB2YWd1ZWx5IHJlY2FsbCB0aGVyZSBiZWluZyBhIGBzeXpfYWNwaV9pbmplY3RgIG9yIHNvbWV0aGluZyBidXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBleGlzdC4gSSBzaG91bGQgcHJvYmFibHkganVzdCBjaGVjayBpZiBhbnkgQUNQSSBpbmplY3Rpb24gb2NjdXJzIGluIFN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfYWNwaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTQ3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgQUNQSSBUYWJsZSBJbnRlcmFjdGlvbiBmb3IgTWVkaWF0ZWsgV2ktRmkgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIE1lZGlhdGVrIFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaXRzIEFDUEkgaW50ZXJhY3Rpb25zLCB3aXRoaW4gU3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZXJlJiMzOTtzIG5vIGRlZGljYXRlZCBgc3l6X2FjcGlgIGZlYXR1cmUsIHdoaWNoIGlzIHRoZSBmaXJzdCBjaGFsbGVuZ2UuIFRoZW4gSSBzdGFydCB0aGlua2luZywgYXJlIHRoZXJlIGFueSByZWxldmFudCBjb25maWcgb3B0aW9ucz8gQ291bGQgSSBsZXZlcmFnZSBgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFRgIG9yIGBDT05GSUdfQUNQSV9UQUJMRV9VUEdSQURFYD8gU3l6a2FsbGVyICpjYW4qIHVzZSBhbiBgaW5pdHJkYCB0byB1cGdyYWRlIEFDUEkgdGFibGVzLiBUaGUgcHJvYmxlbSBpcywgaXQgdXNlcyBhIGdlbmVyaWMgaW5pdHJkIGFuZCBkb2VzbiYjMzk7dCBkeW5hbWljYWxseSB0YWlsb3IgdGhlIEFDUEkgdGFibGVzIGZvciB0aGVzZSBNZWRpYXRlayBXaS1GaSBjYXJkcy4KCk5leHQsIEkgcmVtZW1iZXIgdGhlIGNvcmUgaXNzdWU6IHRoZSBNZWRpYXRlayBXaS1GaSBjYXJkIGlzbiYjMzk7dCBkaXJlY3RseSBlbXVsYXRlZCBpbiBRRU1VLiBXYWl0LCBJIHNob3VsZCBkb3VibGUgY2hlY2ssIGlzIHRoZSBNVDc5MjEgZW11bGF0ZWQgaW4gUUVNVT8gTm8sIGl0IGlzbiYjMzk7dC4gTmVpdGhlciBNVDc5MjEgbm9yIE1UNzkyNSBhcmUgZGlyZWN0bHkgZW11bGF0ZWQuCgpCdXQgdGhlbiwgSSByZWNhbGwgU3l6a2FsbGVyJiMzOTtzIGNhcGFiaWxpdGllcyB3aXRoIGBtYWM4MDIxMV9od3NpbWAgYW5kIGB2aGNpLWhjZGAuIEl0IGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzLiBJZiBJIGNvdWxkIGdldCBTeXprYWxsZXIgdG8gZW11bGF0ZSBhbiBNVDc5MjEgdmlhIFVTQiwgdXNpbmcgYHZoY2ktaGNkYCBvciBwZXJoYXBzIGV2ZW4gYGR1bW15X2hjZGAsIHRoZSBgbXQ3OTIxdWAgZHJpdmVyICpjb3VsZCogYmluZCB0byBpdC4KCkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIEkgY2FuIGV2ZW4gcmVhY2ggYG10NzkyMXVgIHZpYSBVU0IgZnV6emluZy4gWWVzLCBpZiBJIGNhbiBjcmVhdGUgYSBVU0IgZGV2aWNlIHRoYXQgaGFzIHRoZSBjb3JyZWN0IHZlbmRvci9wcm9kdWN0IElEIChgMHgwZThkYCwgYDB4NzkwMmApLCB0aGVuIGBtdDc5MjF1X3Byb2JlYCB3aWxsIGJlIGNhbGxlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgZXZlbiBpZiBJIGdldCBgbXQ3OTIxdV9wcm9iZWAgY2FsbGVkLCBkb2VzIHRoZSBVU0IgZGV2aWNlIGhhdmUgYW4gQUNQSSBoYW5kbGU/IEFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LiBJbiBMaW51eCwgVVNCIGRldmljZXMgKnR5cGljYWxseSogZG9uJiMzOTt0IGhhdmUgQUNQSSBoYW5kbGVzIHVubGVzcyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IGhhcmRjb2RlZCBpbiB0aGUgRFNEVCwgd2hpY2ggaXMgdXN1YWxseSBmb3Igc3BlY2lmaWMgb25ib2FyZCBkZXZpY2VzIGxpa2UgQmx1ZXRvb3RoIG9yIFdpLUZpIG9uIHNvbWUgbGFwdG9wcy4KCklmIEkmIzM5O20gY3JlYXRpbmcgYSBVU0IgZGV2aWNlIGR5bmFtaWNhbGx5IHVzaW5nIGBkdW1teV9oY2RgIG9yIGB2aGNpLWhjZGAsIGl0JiMzOTtzICpub3QqIGdvaW5nIHRvIGhhdmUgYW4gQUNQSSBoYW5kbGUuIFRoYXQgbWVhbnMgYEFDUElfQ09NUEFOSU9OKGRldilgIHdpbGwgYmUgTlVMTC4gQ29uc2VxdWVudGx5LCBgbXQ3OTJ4X2FjcGlfcmVhZGAgaXMgZ29pbmcgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoYXQgbWVhbnMgYGFzYXItJmd0O2NvdW50cnlsaXN0YCB3aWxsIGJlIE5VTEwsIGFuZCB0aGUgYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB3aWxsIHJldHVybiBlYXJseSwgZWZmZWN0aXZlbHkgc2hvcnQtY2lyY3VpdGluZyB0aGF0IHBhdGguCgpJbiBjb25jbHVzaW9uLCBJIHRoaW5rIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHVubGVzcyB0aGVyZSYjMzk7cyBhIGN1c3RvbSBEU0RUIGFuZCBhIG1hdGNoaW5nIGVtdWxhdGVkIG9yIHBoeXNpY2FsIGRldmljZS4gSSBuZWVkIHRvIG5vdyBkb3VibGUtY2hlY2ssIGlzIGl0IHBvc3NpYmxlIHRvIGNhbGwgYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB3aXRoIGEgbm9uLU5VTEwgYGNsYCBieSBhbnkgb3RoZXIgbWVhbnM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvdW50cnlsaXN0X3YzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDE3PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOS1cdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cdTAwM2VhY3Bpc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0MjA6XHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2xfdjMgKmNsID0gc2FyLVx1MDAzZWNvdW50cnlsaXN0X3YzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MjEtXHRpbnQgY29sLCByb3csIGk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaD0xMTM9c3RydWN0IG10NzkyeF9hY3BpX3NhciB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaC0xMjQtXHRcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY291bnRyeWxpc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oOjEyNTpcdFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjb3VudHJ5bGlzdF92MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmgtMTI2LVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNTgKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkludmVzdGlnYXRpbmcgYGNvdW50cnlsaXN0X3YzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIGFza2luZyBhYm91dCBgY291bnRyeWxpc3RfdjNgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp3aGVyZSogaXMgdGhpcyB2YXJpYWJsZSBiZWluZyBzZXQ/IEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBwb3B1bGF0ZWQuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIGZpbmQgdGhlIGNvZGUgdGhhdCBhY3R1YWxseSBhc3NpZ25zIGRhdGEgdG8gYGNvdW50cnlsaXN0X3YzYC4gSXMgaXQgaW5pdGlhbGl6ZWQgbG9jYWxseSB3aXRoaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24vbW9kdWxlPyBJcyBpdCBnbG9iYWxseSBkZWZpbmVkLCBwZXJoYXBzIGltcG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGU/IElzIHRoZXJlIGEgZGF0YWJhc2UgcXVlcnkgb3IgZXh0ZXJuYWwgQVBJIGNhbGwgcG9wdWxhdGluZyBpdD8gS25vd2luZyB0aGUgc291cmNlIG9mIHRoaXMgdmFyaWFibGUgaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB3aG9sZSBzeXN0ZW0gYW5kIGRlYnVnZ2luZyBhbnkgZG93bnN0cmVhbSBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIC0gbXkgSURFJiMzOTtzIHNlYXJjaCBvciBncmVwLCBpZiBJIG5lZWQgdG8gbG9vayBhY3Jvc3MgdGhlIHdob2xlIHByb2plY3QgLSBhbmQgc3RhcnQgaHVudGluZyBkb3duIGl0cyBkZWZpbml0aW9uLiBHb3R0YSB0cmFjayBkb3duIHRoZSBzb3VyY2UgYmVmb3JlIEkgY2FuIGNvbnRpbnVlIHRoaXMgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudHJ5bGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTE5Mz1pbnQgbXQ3OTJ4X2luaXRfYWNwaV9zYXIoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTIwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjAyOlx0cmV0ID0gbXQ3OTJ4X2FzYXJfYWNwaV9yZWFkX210Y2woZGV2LCAodTggKiopXHUwMDI2YXNhci1cdTAwM2Vjb3VudHJ5bGlzdCwgXHUwMDI2YXNhci1cdTAwM2V2ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMDMtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjIwNDpcdFx0ZGV2bV9rZnJlZShkZXYtXHUwMDNlbXQ3Ni5kZXYsIGFzYXItXHUwMDNlY291bnRyeWxpc3QpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzoyMDU6XHRcdGFzYXItXHUwMDNlY291bnRyeWxpc3QgPSBOVUxMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMDYtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTc9bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDE5LVx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqc2FyID0gcGh5LVx1MDAzZWFjcGlzYXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQyMDpcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbF92MyAqY2wgPSBzYXItXHUwMDNlY291bnRyeWxpc3RfdjM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQyMS1cdGludCBjb2wsIHJvdywgaTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQ0OT1tdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibChzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00NTEtXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDUyOlx0c3RydWN0IG10NzkyeF9hc2FyX2NsICpjbCA9IHNhci1cdTAwM2Vjb3VudHJ5bGlzdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDUzLVx0aW50IGNvbCwgcm93LCBpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmg9MTEzPXN0cnVjdCBtdDc5MnhfYWNwaV9zYXIge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmgtMTIzLVx0dW5pb24ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaDoxMjQ6XHRcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY291bnRyeWxpc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oOjEyNTpcdFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjb3VudHJ5bGlzdF92MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmgtMTI2LVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NjUKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBQ1BJIERhdGEgRmxvdyBpbiB0aGUgTVQ3OTJ4IERyaXZlciB3aXRoaW4gYSBRRU1VIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG10NzkyeGAgZHJpdmVyIGFuZCB0aGUgQUNQSSBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRoaXMgY291bnRyeSBsaXN0IChgYXNhci0mZ3Q7Y291bnRyeWxpc3RgKS4gSXQgbG9va3MgbGlrZSB0aGlzIGRhdGEgaXMgcG9wdWxhdGVkIGV4Y2x1c2l2ZWx5IHRocm91Z2ggYG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGNsYC4gVGhpcyBmdW5jdGlvbiwgaW4gdHVybiwgY2FsbHMgYG10NzkyeF9hY3BpX3JlYWRgLiBJIGhhdmUgdG8gdHJhY2Ugd2hlcmUgdGhhdCBnb2VzLiBBaCwgeWVzLCBgbXQ3OTJ4X2FjcGlfcmVhZGAgY2FsbHMgYEFDUElfSEFORExFKG1kZXYtJmd0O2RldilgLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIHdoYXQgZG9lcyBgbWRldi0mZ3Q7ZGV2YCByZXByZXNlbnQ/IElmIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgVVNCIGRldmljZSwgYG1kZXYtJmd0O2RldmAgaXMgZWl0aGVyIGAmYW1wO2ludGYtJmd0O2RldmAgb3IgYCZhbXA7dXNiX2Rldi0mZ3Q7ZGV2YC4gTm93LCBjYW4gYSBVU0IgZGV2aWNlICphY3R1YWxseSogaGF2ZSBhbiBBQ1BJIGhhbmRsZSB3aGVuIGVtdWxhdGVkIGluIFFFTVU/IEhtbSwgbm8sIHRoYXQmIzM5O3Mgbm90IGhvdyBRRU1VIHdvcmtzLiBJdCBkb2VzbiYjMzk7dCBnZW5lcmF0ZSBBQ1BJIHRhYmxlcyBmb3IgZHluYW1pY2FsbHkgcGx1Z2dlZCBVU0IgZGV2aWNlcy4KCkFscmlnaHQsIHdoYXQgYWJvdXQgUENJZT8gRG9lcyBRRU1VIGV2ZW4gZW11bGF0ZSBNVDc5MjEgUENJZSBkZXZpY2VzPyBObywgaXQgZG9lc24mIzM5O3QuIFNvLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGRyaXZlciBjYW4gKm9ubHkqIGJlIHRlc3RlZCBhbmQgcG90ZW50aWFsbHkgcHJvYmVkIHZpYSBVU0IgKHVzaW5nIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZykgb3IgU0RJTyAoaWYgYW55IHN5emthbGxlciBTRElPIGZ1enppbmcgZXhpc3RzKS4gVGhlIGNvbW1vbiBwb2ludCwgaG93ZXZlciwgaXMgdGhhdCBpbiAqbmVpdGhlciogY2FzZSB3aWxsIHRoZSBkZXZpY2UgaGF2ZSBhIHZhbGlkIEFDUEkgaGFuZGxlLgoKQ29uc2VxdWVudGx5LCBgbXQ3OTJ4X2FjcGlfcmVhZGAgd2lsbCByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyBgYXNhci0mZ3Q7Y291bnRyeWxpc3RgIHdpbGwgYmUgYE5VTExgLiBCaW5nbyEgVGhlbiwgYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBgTVQ3OTJYX0FDUElfTVRDTF9JTlZBTElEYC4KClRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgYmxvY2s6CgpgYGBjCglpZiAoY2wtJmd0O21vZGVfYmUgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpCgkJZ290byBvdXQ7CmBgYAoKd2lsbCAqbmV2ZXIqIGJlIHJlYWNoZWQgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGVhcmxpZXIgY2hlY2tzIHdpbGwgc2hvcnQtY2lyY3VpdCB0aGUgZXhlY3V0aW9uIHBhdGguCgpXYWl0IGEgbW9tZW50LCBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgbXQ3OTJ4X2FjcGlfcmVhZGAgbWlnaHQgc3VjY2VlZCBhbmQgcmV0dXJuIGEgbm9uLWVycm9yIGNvZGU/IExldCBtZSByZS1leGFtaW5lIGBtdDc5MnhfYWNwaV9yZWFkYCBhbmQgc2VlIGlmIEkgbWlzc2VkIHNvbWV0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyOTpcdHN0YXRpYyBpbnRcbiAgMzA6XHRtdDc5MnhfYWNwaV9yZWFkKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICptZXRob2QsIHU4ICoqdGJsLCB1MzIgKmxlbilcbiAgMzE6XHR7XG4gIDMyOlx0XHRzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9O1xuICAzMzpcdFx0c3RydWN0IG10NzZfZGV2ICptZGV2ID0gXHUwMDI2ZGV2LVx1MDAzZW10NzY7XG4gIDM0Olx0XHR1bmlvbiBhY3BpX29iamVjdCAqc2FyX3Jvb3Q7XG4gIDM1Olx0XHRhY3BpX2hhbmRsZSByb290LCBoYW5kbGU7XG4gIDM2Olx0XHRhY3BpX3N0YXR1cyBzdGF0dXM7XG4gIDM3Olx0XHR1MzIgaSA9IDA7XG4gIDM4Olx0XHRpbnQgcmV0O1xuICAzOTpcdFxuICA0MDpcdFx0cm9vdCA9IEFDUElfSEFORExFKG1kZXYtXHUwMDNlZGV2KTtcbiAgNDE6XHRcdGlmICghcm9vdClcbiAgNDI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuICA0MzpcdFxuICA0NDpcdFx0c3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKHJvb3QsIG1ldGhvZCwgXHUwMDI2aGFuZGxlKTtcbiAgNDU6XHRcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcbiAgNDY6XHRcdFx0cmV0dXJuIC1FSU87XG4gIDQ3Olx0XG4gIDQ4Olx0XHRzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE5VTEwsIE5VTEwsIFx1MDAyNmJ1Zik7XG4gIDQ5Olx0XHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpXG4gIDUwOlx0XHRcdHJldHVybiAtRUlPO1xuICA1MTpcdFxuICA1MjpcdFx0c2FyX3Jvb3QgPSBidWYucG9pbnRlcjtcbiAgNTM6XHRcdGlmIChzYXJfcm9vdC1cdTAwM2V0eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFIHx8XG4gIDU0Olx0XHQgICAgc2FyX3Jvb3QtXHUwMDNlcGFja2FnZS5jb3VudCBcdTAwM2MgNCB8fFxuICA1NTpcdFx0ICAgIHNhcl9yb290LVx1MDAzZXBhY2thZ2UuZWxlbWVudHNbMF0udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikge1xuICA1NjpcdFx0XHRkZXZfZXJyKG1kZXYtXHUwMDNlZGV2LCBcJiMzNDtzYXIgY250ID0gJWRcXG5cJiMzNDssXG4gIDU3Olx0XHRcdFx0c2FyX3Jvb3QtXHUwMDNlcGFja2FnZS5jb3VudCk7XG4gIDU4Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTQyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUNQSSBIYW5kbGUgaW4gdGhpcyBDb250ZXh0KioKCk9rYXksIHNvIEkgc2VlIHRoaXMgY2hlY2sgaGVyZTogYHJvb3QgPSBBQ1BJX0hBTkRMRShtZGV2LSZndDtkZXYpOyBpZiAoIXJvb3QpIHJldHVybiAtRU9QTk9UU1VQUDtgIE15IGZpcnN0IHRob3VnaHQgaXMsIHllcywgdGhhdCBtYWtlcyBzZW5zZSAqaW4gdGhlIGdlbmVyYWwgY2FzZSouIEl0JiMzOTtzIGxvb2tpbmcgZm9yIGFuIEFDUEkgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLiBIb3dldmVyLCBnaXZlbiB0aGF0IHN5emthbGxlciBnZW5lcmF0ZXMgdGhlc2UgVVNCIGRldmljZXMgZHluYW1pY2FsbHksIHNwZWNpZmljYWxseSB2aWEgYGR1bW15X2hjZGAgb3IgYHZoY2ktaGNkYCwgdGhlcmUmIzM5O3MgYSB2ZXJ5IGdvb2QgY2hhbmNlIHRoZXkgKndvbiYjMzk7dCogaGF2ZSBhbiBBQ1BJIGNvbXBhbmlvbiBkZXZpY2UuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLgoKVGhlcmVmb3JlLCBhcyBpdCBzdGFuZHMsIHRoZSBleHByZXNzaW9uIGBBQ1BJX0hBTkRMRShtZGV2LSZndDtkZXYpYCB3aWxsIG1vc3QgbGlrZWx5IGV2YWx1YXRlIHRvIE5VTEwuIFdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvbmRpdGlvbiBpcyBtZXQgYW5kIGl0IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBtb2RpZmllZCBzZWN0aW9uIG9mIHRoZSBjb2RlIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIHdoZW4gb3BlcmF0aW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBzaW5jZSB0aGF0JiMzOTtzIGhvdyB3ZSYjMzk7cmUgZ2VuZXJhdGluZyB0aGVzZSBVU0IgZGV2aWNlcy4KCkkgbmVlZCB0byBjb25maXJtLCB0aG91Z2guIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBwbGFjZXMgd2hlcmUgYGFjcGlzYXJgIGlzIHBvcHVsYXRlZC4gSSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGEgbnVhbmNlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjcGlzYXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD0xNTg9c3RydWN0IG10NzkyeF9waHkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4LmgtMTgyLSNpZmRlZiBDT05GSUdfQUNQSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaDoxODM6XHR2b2lkICphY3Bpc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaC0xODQtI2VuZGlmXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0xOTM9aW50IG10NzkyeF9pbml0X2FjcGlfc2FyKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMjYtXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjIyNzpcdGRldi1cdTAwM2VwaHkuYWNwaXNhciA9IGFzYXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTIyOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTIzND1tdDc5MnhfYXNhcl9nZXRfZ2VvX3B3cihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjM2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjM3Olx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqYXNhciA9IHBoeS1cdTAwM2VhY3Bpc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMzgtXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfZ2VvX2JhbmQgKmJhbmRfcHdyO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9Mjg5PW10NzkyeF9hc2FyX3JhbmdlX3B3cihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjkzLVx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX3Nhcl9jYXBhICpjYXBhID0gcGh5LVx1MDAzZW10NzYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlc2FyX2NhcGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjI5NDpcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjk1LVx0dTggKmxpbWl0LCBiYW5kLCBtYXg7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zMjE9aW50IG10NzkyeF9pbml0X2FjcGlfc2FyX3Bvd2VyKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGJvb2wgc2V0X2RlZmF1bHQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zMjUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjMyNjpcdGlmICghcGh5LVx1MDAzZWFjcGlzYXIgfHwgISgoc3RydWN0IG10NzkyeF9hY3BpX3NhciAqKXBoeS1cdTAwM2VhY3Bpc2FyKS1cdTAwM2VkeW4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTMyNy1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zNDg9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM0OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjM1MDpcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFjcGlzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzUxLVx0c3RydWN0IG10NzkyeF9hc2FyX2ZnICpmZztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM2MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MzYyOlx0aWYgKCFhY3Bpc2FyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNjMtXHRcdHJldHVybiAwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjM2NTpcdGZnID0gYWNwaXNhci1cdTAwM2VmZztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzY2LVx0aWYgKCFmZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQxNz1tdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQxOTpcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cdTAwM2VhY3Bpc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MjAtXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2xfdjMgKmNsID0gc2FyLVx1MDAzZWNvdW50cnlsaXN0X3YzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDQ5PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDUwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDUxOlx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqc2FyID0gcGh5LVx1MDAzZWFjcGlzYXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ1Mi1cdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY2wgPSBzYXItXHUwMDNlY291bnRyeWxpc3Q7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00NzI9dTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00NzMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0NzQ6XHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDc1LVx0dTMyIGNvbmZpZyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjQ3CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIEFDUEkgU0FSIFBhcnNpbmcgZm9yIE1lZGlhdGVrIFdpLUZpKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRyYWNlZCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGxvb2tpbmcgcHJldHR5IGNsZWFyLiBUaGUga2V5IGlzIHRoYXQgYGFzYXItJmd0O2NvdW50cnlsaXN0YCBnZXRzIHBvcHVsYXRlZCBvbmx5IHdpdGhpbiBgbXQ3OTJ4X2luaXRfYWNwaV9zYXJgLiAgVGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgaXMgY2FsbGVkIGZyb20gc29tZXRoaW5nIGxpa2UgYG10NzkyMV9tYWNfaW5pdGAuICBUaGUgY2F0Y2ggaGVyZSBpcyB0aGF0IGZvciBhIFVTQiBkZXZpY2UgaW4gUUVNVSwgYEFDUElfSEFORExFKG1kZXYtJmd0O2RldilgIGlzIGdvaW5nIHRvIGJlIE5VTEwuCgpUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCBpbW1lZGlhdGVseSBjaGVja3MgaWYgdGhlIGNvdW50cnkgbGlzdCAoYGNsYCkgaXMgbnVsbC4gSWYgaXQgaXMgKHdoaWNoIGl0IGlzIGluIG91ciBRRU1VIFVTQiBjYXNlKSwgaXQgcmV0dXJucyBlYXJseS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIFFFTVUgc2NlbmFyaW8uIFVTQiBkZXZpY2VzIGluIFFFTVUsIHdoZXRoZXIgdXNpbmcgYGR1bW15X2hjZGAgb3IgYHZoY2ktaGNkYCwgYXJlIHNvZnR3YXJlIGVtdWxhdGVkLiAgVGhleSBkb24mIzM5O3QgZ2V0IEFDUEkgbm9kZXMgaW4gdGhlIERTRFQuIFRoaXMgbWVhbnMgYEFDUElfQ09NUEFOSU9OKGRldilgIGlzIE5VTEwsIHdoaWNoIGluIHR1cm4gbWVhbnMgYEFDUElfSEFORExFKGRldilgIGlzIE5VTEwuIENvbnNlcXVlbnRseSwgYG10NzkyeF9hY3BpX3JlYWRgIHdpbGwgcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoYXQgY2F1c2VzIGBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbGAgdG8gZmFpbCBhbmQsIHlvdSBndWVzc2VkIGl0LCBgYXNhci0mZ3Q7Y291bnRyeWxpc3RgIHJlbWFpbnMgTlVMTC4gVGhlcmVmb3JlLCB0aGUgZWFybHkgcmV0dXJuIGluIGBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92M2AgaXMgcmVhY2hlZC4KClNvLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgQUNQSSBTQVIgcGFyc2luZyBmb3IgTWVkaWF0ZWsgV2ktRmkgY2FyZHMuIFRoZSBjb2RlIG5lZWRzIGEgdmFsaWQgQUNQSSBjb21wYW5pb24gZGV2aWNlLCB3aGljaCB2aXJ0dWFsaXplZCBVU0Igb3IgUENJZSBkZXZpY2VzIGluIFFFTVUgc2ltcGx5IGRvbiYjMzk7dCBoYXZlIGR1ZSB0byB0aGVpciBkeW5hbWljIGFuZCBlbXVsYXRlZCBuYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgcGFyc2luZyBsb2dpYyBmb3IgTWVkaWF0ZWsgTVQ3OTJ4IFdpLUZpIGNhcmRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHJldHJpZXZpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGRldmljZSB2aWEgQUNQSV9IQU5ETEUobWRldi1cdTAwM2VkZXYpIHRvIHJlYWQgdGhlIEFDUEkgdGFibGVzLiBJbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBkeW5hbWljYWxseSBjcmVhdGVkIFVTQiBvciBQQ0llIGRldmljZXMgZG8gbm90IGhhdmUgQUNQSSBub2RlcyBpbiB0aGUgRFNEVCwgc28gQUNQSV9IQU5ETEUgcmV0dXJucyBOVUxMLiBDb25zZXF1ZW50bHksIHRoZSBBQ1BJIHJlYWRpbmcgZmFpbHMsIHRoZSBjb3VudHJ5bGlzdCBpcyBuZXZlciBwb3B1bGF0ZWQsIGFuZCB0aGUgbW9kaWZpZWQgcGFyc2luZyBmdW5jdGlvbnMgcmV0dXJuIGVhcmx5LCBtYWtpbmcgdGhpcyBjb2RlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBBQ1BJIFNBUiAoU3BlY2lmaWMgQWJzb3JwdGlvbiBSYXRlKSBwYXJzaW5nIGxvZ2ljIGZvciBNZWRpYXRlayBNVDc5MnggV2ktRmkgY2FyZHMuIFRoaXMgY29kZSByZWxpZXMgb24gcmV0cmlldmluZyB0aGUgQUNQSSBjb21wYW5pb24gZGV2aWNlIHZpYSBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldikgdG8gcmVhZCB0aGUgQUNQSSB0YWJsZXMuIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGR5bmFtaWNhbGx5IGNyZWF0ZWQgVVNCIG9yIFBDSWUgZGV2aWNlcyBkbyBub3QgaGF2ZSBBQ1BJIG5vZGVzIGluIHRoZSBEU0RULCBzbyBBQ1BJX0hBTkRMRSByZXR1cm5zIE5VTEwuIENvbnNlcXVlbnRseSwgdGhlIEFDUEkgcmVhZGluZyBmYWlscywgdGhlIGNvdW50cnlsaXN0IGlzIG5ldmVyIHBvcHVsYXRlZCwgYW5kIHRoZSBtb2RpZmllZCBwYXJzaW5nIGZ1bmN0aW9ucyByZXR1cm4gZWFybHksIG1ha2luZyB0aGlzIGNvZGUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNjo0MC40MDEwNjExNzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTcwNDAzMjMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgcGFyc2luZyBsb2dpYyBmb3IgTWVkaWF0ZWsgTVQ3OTJ4IFdpLUZpIGNhcmRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHJldHJpZXZpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGRldmljZSB2aWEgQUNQSV9IQU5ETEUobWRldi1cXHUwMDNlZGV2KSB0byByZWFkIHRoZSBBQ1BJIHRhYmxlcy4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZHluYW1pY2FsbHkgY3JlYXRlZCBVU0Igb3IgUENJZSBkZXZpY2VzIGRvIG5vdCBoYXZlIEFDUEkgbm9kZXMgaW4gdGhlIERTRFQsIHNvIEFDUElfSEFORExFIHJldHVybnMgTlVMTC4gQ29uc2VxdWVudGx5LCB0aGUgQUNQSSByZWFkaW5nIGZhaWxzLCB0aGUgY291bnRyeWxpc3QgaXMgbmV2ZXIgcG9wdWxhdGVkLCBhbmQgdGhlIG1vZGlmaWVkIHBhcnNpbmcgZnVuY3Rpb25zIHJldHVybiBlYXJseSwgbWFraW5nIHRoaXMgY29kZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MzY6NDAuNDAxMDY5NDQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM1ODUyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMmEyNGFkNTA1NGVlMDViZTJlM2MyNDljOGE4NGNjN2Q5YThlMDRlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDEzOjM2OjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jXFxuaW5kZXggOTQ2ZGQ3OTU2ZTRhMGQuLjg2OGZlYWRiZmY2MTEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jXFxuQEAgLTM4OCw3ICszODgsNyBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjbClcXG4gXFx0dTMyIGNvbmZpZyA9IDA7XFxuIFxcdHU4IG1vZGVfYmUgPSAwO1xcbiBcXG4tXFx0bW9kZV9iZSA9IChjbC1cXHUwMDNlbW9kZV9iZSBcXHUwMDNlIDB4MDIpID8gMCA6IGNsLVxcdTAwM2Vtb2RlX2JlO1xcbitcXHRtb2RlX2JlID0gKGNsLVxcdTAwM2Vtb2RlX2JlIFxcdTAwM2UgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpID8gMCA6IGNsLVxcdTAwM2Vtb2RlX2JlO1xcbiBcXG4gXFx0aWYgKGNsLVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2UgMiBcXHUwMDI2XFx1MDAyNiBjbC1cXHUwMDNlY2xiZVtyb3ddIFxcdTAwMjYgQklUKGNvbHVtbikpXFxuIFxcdFxcdGNvbmZpZyB8PSAobW9kZV9iZSBcXHUwMDI2IDB4MykgXFx1MDAzY1xcdTAwM2MgNDtcXG5AQCAtNDAyLDEwICs0MDIsMTAgQEAgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfbWFwKGludCByb3csIGludCBjb2x1bW4sIHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY2wpXFxuIFxcdHUzMiBjb25maWcgPSAwO1xcbiBcXHR1OCBtb2RlXzZnLCBtb2RlXzVnOTtcXG4gXFxuLVxcdG1vZGVfNmcgPSAoY2wtXFx1MDAzZW1vZGVfNmcgXFx1MDAzZSAweDAyKSA/IDAgOiBjbC1cXHUwMDNlbW9kZV82ZztcXG4tXFx0bW9kZV81ZzkgPSAoY2wtXFx1MDAzZW1vZGVfNWc5IFxcdTAwM2UgMHgwMSkgPyAwIDogY2wtXFx1MDAzZW1vZGVfNWc5O1xcbitcXHRtb2RlXzZnID0gKGNsLVxcdTAwM2Vtb2RlXzZnIFxcdTAwM2UgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpID8gMCA6IGNsLVxcdTAwM2Vtb2RlXzZnO1xcbitcXHRtb2RlXzVnOSA9IChjbC1cXHUwMDNlbW9kZV81ZzkgXFx1MDAzZSBNVDc5MlhfQUNQSV9NVENMX01PREVfRU5BQkxFKSA/IDAgOiBjbC1cXHUwMDNlbW9kZV81Zzk7XFxuIFxcbi1cXHRpZiAoKGNsLVxcdTAwM2VjbDZnW3Jvd10gXFx1MDAyNiBCSVQoY29sdW1uKSkgfHwgY2wtXFx1MDAzZW1vZGVfNmcgPT0gMHgwMilcXG4rXFx0aWYgKChjbC1cXHUwMDNlY2w2Z1tyb3ddIFxcdTAwMjYgQklUKGNvbHVtbikpIHx8IGNsLVxcdTAwM2Vtb2RlXzZnID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKVxcbiBcXHRcXHRjb25maWcgfD0gKG1vZGVfNmcgXFx1MDAyNiAweDMpIFxcdTAwM2NcXHUwMDNjIDI7XFxuIFxcdGlmIChjbC1cXHUwMDNldmVyc2lvbiBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgY2wtXFx1MDAzZWNsNWc5W3Jvd10gXFx1MDAyNiBCSVQoY29sdW1uKSlcXG4gXFx0XFx0Y29uZmlnIHw9IChtb2RlXzVnOSBcXHUwMDI2IDB4Myk7XFxuQEAgLTQyNiw2ICs0MjYsOSBAQCBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuIFxcdGlmICghY2wpXFxuIFxcdFxcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XFxuIFxcbitcXHRpZiAoY2wtXFx1MDAzZW1vZGVfYmUgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoY2NfbGlzdF9iZSk7IGkrKykge1xcbiBcXHRcXHRjb2wgPSA3IC0gaSAlIDg7XFxuIFxcdFxcdHJvdyA9IGkgLyA4O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaFxcbmluZGV4IDQ3NDAzMzA3MzgzMTU4Li4xMTBmNjg0MzhkOTAwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaFxcbkBAIC0xNyw2ICsxNywxMyBAQFxcbiBcXG4gI2RlZmluZSBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSURcXHQweGZmZmZmZmZmXFxuIFxcbisvKiBNVENMIHBlci1iYW5kIGNvbnRyb2wgbW9kZSAobW9kZV82Zy9tb2RlXzVnOS9tb2RlX2JlKSAqL1xcbitlbnVtIHtcXG4rXFx0TVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RJU0FCTEVcXHQ9IDB4MDAsXFx0LyogZm9yY2UgZGlzYWJsZSAqL1xcbitcXHRNVDc5MlhfQUNQSV9NVENMX01PREVfRU5BQkxFXFx0PSAweDAxLFxcdC8qIGVuYWJsZSBpZiBkcml2ZXIgXFx1MDAyNiBCSU9TIHN1cHBvcnQgKi9cXG4rXFx0TVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFRcXHQ9IDB4MDIsXFx0Lyogc3VwcG9ydGluZyBkZXBlbmRzIG9uIGRyaXZlciBzZXR0aW5nICovXFxuK307XFxuK1xcbiBzdHJ1Y3QgbXQ3OTJ4X2FzYXJfZHluX2xpbWl0IHtcXG4gXFx0dTggaWR4O1xcbiBcXHR1OCBmcnBbNV07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjQwLjkzNTQzMDgwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk5MTY5NjU2NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBBQ1BJIFNBUiAoU3BlY2lmaWMgQWJzb3JwdGlvbiBSYXRlKSBwYXJzaW5nIGxvZ2ljIGZvciBNZWRpYXRlayBNVDc5MnggV2ktRmkgY2FyZHMuIFRoaXMgY29kZSByZWxpZXMgb24gcmV0cmlldmluZyB0aGUgQUNQSSBjb21wYW5pb24gZGV2aWNlIHZpYSBBQ1BJX0hBTkRMRShtZGV2LVxcdTAwM2VkZXYpIHRvIHJlYWQgdGhlIEFDUEkgdGFibGVzLiBJbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBkeW5hbWljYWxseSBjcmVhdGVkIFVTQiBvciBQQ0llIGRldmljZXMgZG8gbm90IGhhdmUgQUNQSSBub2RlcyBpbiB0aGUgRFNEVCwgc28gQUNQSV9IQU5ETEUgcmV0dXJucyBOVUxMLiBDb25zZXF1ZW50bHksIHRoZSBBQ1BJIHJlYWRpbmcgZmFpbHMsIHRoZSBjb3VudHJ5bGlzdCBpcyBuZXZlciBwb3B1bGF0ZWQsIGFuZCB0aGUgbW9kaWZpZWQgcGFyc2luZyBmdW5jdGlvbnMgcmV0dXJuIGVhcmx5LCBtYWtpbmcgdGhpcyBjb2RlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMmEyNGFkNTA1NGVlMDViZTJlM2MyNDljOGE4NGNjN2Q5YThlMDRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTM6MzY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuaW5kZXggOTQ2ZGQ3OTU2ZTRhMGQuLjg2OGZlYWRiZmY2MTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuQEAgLTM4OCw3ICszODgsNyBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjbClcbiBcdHUzMiBjb25maWcgPSAwO1xuIFx0dTggbW9kZV9iZSA9IDA7XG4gXG4tXHRtb2RlX2JlID0gKGNsLVx1MDAzZW1vZGVfYmUgXHUwMDNlIDB4MDIpID8gMCA6IGNsLVx1MDAzZW1vZGVfYmU7XG4rXHRtb2RlX2JlID0gKGNsLVx1MDAzZW1vZGVfYmUgXHUwMDNlIE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKSA/IDAgOiBjbC1cdTAwM2Vtb2RlX2JlO1xuIFxuIFx0aWYgKGNsLVx1MDAzZXZlcnNpb24gXHUwMDNlIDIgXHUwMDI2XHUwMDI2IGNsLVx1MDAzZWNsYmVbcm93XSBcdTAwMjYgQklUKGNvbHVtbikpXG4gXHRcdGNvbmZpZyB8PSAobW9kZV9iZSBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgNDtcbkBAIC00MDIsMTAgKzQwMiwxMCBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXAoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsICpjbClcbiBcdHUzMiBjb25maWcgPSAwO1xuIFx0dTggbW9kZV82ZywgbW9kZV81Zzk7XG4gXG4tXHRtb2RlXzZnID0gKGNsLVx1MDAzZW1vZGVfNmcgXHUwMDNlIDB4MDIpID8gMCA6IGNsLVx1MDAzZW1vZGVfNmc7XG4tXHRtb2RlXzVnOSA9IChjbC1cdTAwM2Vtb2RlXzVnOSBcdTAwM2UgMHgwMSkgPyAwIDogY2wtXHUwMDNlbW9kZV81Zzk7XG4rXHRtb2RlXzZnID0gKGNsLVx1MDAzZW1vZGVfNmcgXHUwMDNlIE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKSA/IDAgOiBjbC1cdTAwM2Vtb2RlXzZnO1xuK1x0bW9kZV81ZzkgPSAoY2wtXHUwMDNlbW9kZV81ZzkgXHUwMDNlIE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9FTkFCTEUpID8gMCA6IGNsLVx1MDAzZW1vZGVfNWc5O1xuIFxuLVx0aWYgKChjbC1cdTAwM2VjbDZnW3Jvd10gXHUwMDI2IEJJVChjb2x1bW4pKSB8fCBjbC1cdTAwM2Vtb2RlXzZnID09IDB4MDIpXG4rXHRpZiAoKGNsLVx1MDAzZWNsNmdbcm93XSBcdTAwMjYgQklUKGNvbHVtbikpIHx8IGNsLVx1MDAzZW1vZGVfNmcgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpXG4gXHRcdGNvbmZpZyB8PSAobW9kZV82ZyBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgMjtcbiBcdGlmIChjbC1cdTAwM2V2ZXJzaW9uIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBjbC1cdTAwM2VjbDVnOVtyb3ddIFx1MDAyNiBCSVQoY29sdW1uKSlcbiBcdFx0Y29uZmlnIHw9IChtb2RlXzVnOSBcdTAwMjYgMHgzKTtcbkBAIC00MjYsNiArNDI2LDkgQEAgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuIFx0aWYgKCFjbClcbiBcdFx0cmV0dXJuIE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRDtcbiBcbitcdGlmIChjbC1cdTAwM2Vtb2RlX2JlID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY2NfbGlzdF9iZSk7IGkrKykge1xuIFx0XHRjb2wgPSA3IC0gaSAlIDg7XG4gXHRcdHJvdyA9IGkgLyA4O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG5pbmRleCA0NzQwMzMwNzM4MzE1OC4uMTEwZjY4NDM4ZDkwMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG5AQCAtMTcsNiArMTcsMTMgQEBcbiBcbiAjZGVmaW5lIE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRFx0MHhmZmZmZmZmZlxuIFxuKy8qIE1UQ0wgcGVyLWJhbmQgY29udHJvbCBtb2RlIChtb2RlXzZnL21vZGVfNWc5L21vZGVfYmUpICovXG4rZW51bSB7XG4rXHRNVDc5MlhfQUNQSV9NVENMX01PREVfRElTQUJMRVx0PSAweDAwLFx0LyogZm9yY2UgZGlzYWJsZSAqL1xuK1x0TVQ3OTJYX0FDUElfTVRDTF9NT0RFX0VOQUJMRVx0PSAweDAxLFx0LyogZW5hYmxlIGlmIGRyaXZlciBcdTAwMjYgQklPUyBzdXBwb3J0ICovXG4rXHRNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVFx0PSAweDAyLFx0Lyogc3VwcG9ydGluZyBkZXBlbmRzIG9uIGRyaXZlciBzZXR0aW5nICovXG4rfTtcbitcbiBzdHJ1Y3QgbXQ3OTJ4X2FzYXJfZHluX2xpbWl0IHtcbiBcdHU4IGlkeDtcbiBcdHU4IGZycFs1XTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjQwLjkzNTQzMjEzN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzA2MjgzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgV2lGaSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY2AuIEl0IHNlZW1zIGxpa2UgdGhleSdyZSBjbGVhbmluZyB1cCBzb21lIG1hZ2ljIG51bWJlcnMgcmVsYXRlZCB0byBBQ1BJIFNBUiBwYXJzaW5nIGZvciB0aGUgTVQ3OTJ4IHdpcmVsZXNzIGNhcmRzLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgcmVwbGFjaW5nIHRob3NlIG51bWJlcnMgd2l0aCBlbnVtIHZhbHVlczogYE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUYCBhbmQgYE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9FTkFCTEVgLiAgVGhleSd2ZSBhbHNvIGFkZGVkIGEgY2hlY2sgaW4gYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB0byBzaG9ydC1jaXJjdWl0IGlmIGBjbC1cdTAwM2Vtb2RlX2JlYCBpcyBgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFRgLiAgVGhpcyBpcyBzdGFuZGFyZCBzdHVmZiBmb3IgdGhpcyBraW5kIG9mIGNsZWFudXAsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGFuZCBwb3RlbnRpYWxseSBsZXNzIGVycm9yLXByb25lLlxuXG5UaGUgY29yZSBvZiB0aGlzIGlzIEFDUEkgU0FSIHBhcnNpbmcuIFRoZXNlIHRhYmxlcyBhcmUgZ2VuZXJhbGx5IHByb3ZpZGVkIGJ5IHRoZSBCSU9TIG9yIGZpcm13YXJlIGFuZCBhcmUgcGFyc2VkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gb3IgaW4gcmVzcG9uc2UgdG8gQUNQSSBldmVudHMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhpcyBjb2RlIHBhdGggZXZlbiBhY2Nlc3NpYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gU3l6a2FsbGVyIGNhbiBzb21ldGltZXMgaW5qZWN0IEFDUEkgdGFibGVzLCBidXQgdXN1YWxseSwgdGhhdCdzIHRhaWxvcmVkIHRvIHRoZSBoYXJkd2FyZS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIE1lZGlhdGVrIE1UNzkyeCwgYSBQQ0llL1NESU8vVVNCIFdpLUZpIGNhcmQsIGl0J3MgcHJvYmFibHkgZmVhc2libGUgdG8gZXhlcmNpc2UgdGhpcyBjb2RlIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgQUNQSSBkYXRhLlxuXG5Ob3csIGhvdyBjYW4gSSBmdXp6IHRoaXM/ICBMZXQncyBzZWXigKYgVGhlIGtleSBmdW5jdGlvbiBtb2RpZmllZCBpcyBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSSdsbCBzZWFyY2ggZm9yIHJlZmVyZW5jZXMgdG8gYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB0byBzZWUgd2hhdCB0cmlnZ2VycyBpdCBhbmQgdGhlbiBleHBsb3JlIHRoZSBwb3RlbnRpYWwgb2YgZnV6emluZyB0aGF0IGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MzY6NDYuODA2MDYzNzc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzMzMDQ0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTY9c3RhdGljIHUzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDE3Om10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQ3Mj11MzIgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQ4MDpcXHRjb25maWcgPSBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhwaHksIGFscGhhMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00ODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjQ4Ljc3OTM3NjA4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODg0Mzk5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlRyYWNpbmcgdGhlIENvbmZpZ3VyYXRpb24gQWNxdWlzaXRpb24qKlxuXG5SaWdodCwgYG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmZgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgKndoeSogYW5kICp3aGVuKiB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gU28sIG15IG1lbnRhbCBtYXAgbm93IG5lZWRzIHRvIGV4cGFuZCB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250cm9sIGZsb3csIHNvIEknbGwgc3RhcnQgYnkgbG9va2luZyBmb3IgaXRzIGludm9jYXRpb25zLiBLbm93aW5nIHdoZXJlIGl0J3MgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgc3lzdGVtIGNvbnRleHQgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBkYXRhIGlzIGFjY2Vzc2VkLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MzY6NTEuNzY3ODI0MThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2OTQzMjI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTEzMDY9aW50IF9fbXQ3OTIxX21jdV9zZXRfY2xjKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICphbHBoYTIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMzMyLVxcdFxcdC5hY3BpX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfZmxhZ3MoXFx1MDAyNmRldi1cXHUwMDNlcGh5KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYzoxMzMzOlxcdFxcdC5tdGNsX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKFxcdTAwMjZkZXYtXFx1MDAzZXBoeSwgYWxwaGEyKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMzM0LVxcdH07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM9MjE9dm9pZCBtdDc5MjVfcmVnZF9iZV9jdHJsKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICphbHBoYTIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtMjYtXFx0Ym9vbCBvbGQgPSBkZXYtXFx1MDAzZWhhc19laHQsIG5ldyA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jOjI3OlxcdHUzMiBtdGNsX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKFxcdTAwMjZkZXYtXFx1MDAzZXBoeSwgYWxwaGEyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtMjgtXFx0dTggKnBvcztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYz02Nz1tdDc5MjVfcmVnZF9jaGFubmVsX3VwZGF0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTc1LVxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jOjc2OlxcdHUzMiBtdGNsX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKFxcdTAwMjZkZXYtXFx1MDAzZXBoeSwgbWRldi1cXHUwMDNlYWxwaGEyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtNzctXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeC5oPTU1Mj11OCBtdDc5MnhfYWNwaV9nZXRfZmxhZ3Moc3RydWN0IG10NzkyeF9waHkgKnBoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaDo1NTM6dTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeC5oLTU1NC0jZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD01NjY9c3RhdGljIGlubGluZSB1OCBtdDc5MnhfYWNwaV9nZXRfZmxhZ3Moc3RydWN0IG10NzkyeF9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4LmgtNTcwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4Lmg6NTcxOnN0YXRpYyBpbmxpbmUgdTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4LmgtNTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDQ5PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDcyOnUzMiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3My17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ4OC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0ODk6RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjUzLjczNzI2MTc4MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODYyMTA2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgTVQ3OTIxL01UNzkyNSBXaS1GaSBDYXJkIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIE1UNzkyMSBhbmQgTVQ3OTI1IFdpLUZpIGNhcmRzIGZyb20gTWVkaWF0ZWsuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGVtdWxhdGUgdGhlc2U/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBhdHRhY2sgc3VyZmFjZS4gVGhlIE1UNzkyMSBhcHBlYXJzIHRvIGJlIGEgUENJZS9VU0IvU0RJTyBkZXZpY2UsIHdoaWNoIGltbWVkaWF0ZWx5IGdpdmVzIHVzIGEgZmV3IHBvaW50cyBvZiBlbnRyeSB0byBleHBsb3JlLiBUaGVuIEkgcmVtZW1iZXJlZCBzeXprYWxsZXIgaGFzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSW50ZXJlc3RpbmcuLi4gZG9lcyB0aGUgTVQ3OTIxIGV2ZW4gKmhhdmUqIGEgVVNCIGRyaXZlcj8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIEkgbmVlZCB0byBjb25maXJtLiBLbm93aW5nIHRoYXQgd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCB0aGUgdmlhYmlsaXR5IG9mIHVzaW5nIFVTQiBmdXp6aW5nIGFzIGFuIGVtdWxhdGlvbiB2ZWN0b3IuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZHJpdmVyIGxhbmRzY2FwZSBmb3IgdGhhdCBjYXJkIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY2MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjU3LjEyMzQ3NDUzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM5ODI4MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzkyMXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTVQ3OTIxUykgKz0gbXQ3OTIxcy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTVQ3OTIxVSkgKz0gbXQ3OTIxdS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlPTExPW10NzkyMXMteSA6PSBzZGlvLm8gc2Rpb19tYWMubyBzZGlvX21jdS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGU6MTI6bXQ3OTIxdS15IDo9IHVzYi5vXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoxNTpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbXQ3OTIxdV9kZXZpY2VfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNi1cXHR7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGU4ZCwgMHg3OTAyLCAweGZmLCAweGZmLCAweGZmKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jPTM1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNjptdDc5MjF1X21jdV9zZW5kX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM3LVxcdFxcdFxcdCBpbnQgY21kLCBpbnQgKnNlcSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjY1OnN0YXRpYyBpbnQgbXQ3OTIxdV9tY3VfaW5pdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTcwLVxcdFxcdC50YWlscm9vbSA9IE1UX1VTQl9UQUlMX1NJWkUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6NzE6XFx0XFx0Lm1jdV9za2Jfc2VuZF9tc2cgPSBtdDc5MjF1X21jdV9zZW5kX21lc3NhZ2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtNzItXFx0XFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzkyMV9tY3VfcGFyc2VfcmVzcG9uc2UsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy04OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzo4OTpzdGF0aWMgaW50IG10NzkyMXVfbWFjX3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMTQ5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjE1MDpzdGF0aWMgaW50IG10NzkyMXVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTE1MS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMTcxLVxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3OTJ4X2hpZl9vcHMgaGlmX29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoxNzI6XFx0XFx0Lm1jdV9pbml0ID0gbXQ3OTIxdV9tY3VfaW5pdCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNzMtXFx0XFx0LmluaXRfcmVzZXQgPSBtdDc5Mnh1X2luaXRfcmVzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MTc0OlxcdFxcdC5yZXNldCA9IG10NzkyMXVfbWFjX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTE3NS1cXHR9O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMjYzLSNpZmRlZiBDT05GSUdfUE1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoyNjQ6c3RhdGljIGludCBtdDc5MjF1X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0yNjUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMjkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjI5MTpzdGF0aWMgaW50IG10NzkyMXVfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTI5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zMzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzM0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBtdDc5MjF1X2RldmljZV90YWJsZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzM1LU1PRFVMRV9GSVJNV0FSRShNVDc5MjFfRklSTVdBUkVfV00pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jPTMzNj1NT0RVTEVfRklSTVdBUkUoTVQ3OTIxX1JPTV9QQVRDSCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjMzODpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbXQ3OTIxdV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzM5LVxcdC5uYW1lXFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNDA6XFx0LmlkX3RhYmxlXFx0PSBtdDc5MjF1X2RldmljZV90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNDE6XFx0LnByb2JlXFx0XFx0PSBtdDc5MjF1X3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM0Mi1cXHQuZGlzY29ubmVjdFxcdD0gbXQ3OTJ4dV9kaXNjb25uZWN0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM0My0jaWZkZWYgQ09ORklHX1BNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzQ0OlxcdC5zdXNwZW5kXFx0PSBtdDc5MjF1X3N1c3BlbmQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzQ1OlxcdC5yZXN1bWVcXHRcXHQ9IG10NzkyMXVfcmVzdW1lLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjM0NjpcXHQucmVzZXRfcmVzdW1lXFx0PSBtdDc5MjF1X3Jlc3VtZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zNDctI2VuZGlmIC8qIENPTkZJR19QTSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzUwLX07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzUxOm1vZHVsZV91c2JfZHJpdmVyKG10NzkyMXVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjU4Ljg2MzMwODMzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDQwMzgxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBhIFVTQiBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBhIFVTQiBkcml2ZXIgZm9yIHRoZSBNVDc5MjEsIGdvb2QsIHRoYXQncyB3aGF0IEknbSBsb29raW5nIGZvci4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCBpdHNlbGYgaXMgaW4gYG10NzkyeF9hY3BpX3Nhci5jYD8gVGhhdCdzIGEgYml0IG9kZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgaXMgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBwb3dlciBtYW5hZ2VtZW50IGFuZCB0aGVybWFsIHJlZ3VsYXRpb24sIG9mdGVuIGxpbmtlZCB0byBiYXR0ZXJ5LXBvd2VyZWQgZGV2aWNlcyBvciB0aG9zZSB3aXRoIHBvdGVudGlhbCBmb3Igc2lnbmlmaWNhbnQgaGVhdCBnZW5lcmF0aW9uLiBJIHdvdWxkbid0IGluc3RpbmN0aXZlbHkgY29ubmVjdCBBQ1BJIFNBUiBkaXJlY3RseSB0byBhIFVTQiBkZXZpY2UsIHRob3VnaCB0aGVyZSBtaWdodCBiZSBhIHJlYXNvbiBmb3IgdGhpcyBJJ20gbm90IGltbWVkaWF0ZWx5IHNlZWluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmZgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIEFDUEkgdGFibGUgZGF0YSwgc2luY2UgdGhpcyBpcyB3aGVyZSB0aGUgbGluayBiZXR3ZWVuIEFDUEkgYW5kIHRoZSBVU0IgZGV2aWNlIHdvdWxkIGJlIGVzdGFibGlzaGVkIGlmIGl0IGV4aXN0cy4gS25vd2luZyB0aGUgcmV0cmlldmFsIG1ldGhvZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIElzIHRoaXMgdGFibGUgdXNlZCB0byBjb25maWd1cmUgZGV2aWNlIHBvd2VyIHN0YXRlcyBvbiBVU0IgZGV2aWNlcywgb3IgaXMgaXQgZ2V0dGluZyBjYWxsZWQgaW4gZXJyb3I/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzowMi41NjczNDkwNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzA1ODkxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTY9c3RhdGljIHUzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDE3Om10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQ3Mj11MzIgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQ4MDpcXHRjb25maWcgPSBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhwaHksIGFscGhhMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00ODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjA0LjQzNzk0NjIwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4ODYwMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gdGhlIE1UNzkyeCBBQ1BJIFRhYmxlIFBhcnNpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92M2AgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIHJvdXRpbmUuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHRoZSBBQ1BJIHRhYmxlLiBJcyBpdCBhIHdlbGwtZGVmaW5lZCBzdHJ1Y3R1cmUgb3Igc29tZXRoaW5nIG1vcmUgYWQtaG9jPyBHaXZlbiB0aGUgdmVyc2lvbiBudW1iZXIgKHYzKSwgdGhlcmUncyBsaWtlbHkgZXZvbHV0aW9uIGluIHRoZSB0YWJsZSBmb3JtYXQgdG8gY29uc2lkZXIsIGFuZCB0aGVyZWZvcmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKG9yIHRoZSBsYWNrIHRoZXJlb2YpIHdpbGwgYmUgaW1wb3J0YW50IHRvIGdyYXNwLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBkYXRhIGlzIGJlaW5nIGV4dHJhY3RlZDogaXMgdGhpcyBwcmltYXJpbHkgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBhcmUgdGhlIGtleSBmaWVsZHMgdGhlIGRyaXZlciByZWxpZXMgdXBvbj8gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyDigJMgdGhpbmdzIGxpa2UgYXNzdW1pbmcgc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb24gbGV2ZWxzLCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucywgb3IgYnl0ZS1vcmRlciBpc3N1ZXMg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3ItaGFuZGxpbmcgYW5kIGhvdyBncmFjZWZ1bGx5IGl0IHJlc3BvbmRzIHRvIGNvcnJ1cHRlZCBvciBtaXNzaW5nIGRhdGEgd2l0aGluIHRoZSB0YWJsZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB2YWxpZGF0aW9uIGNoZWNrcyBhcmUgdGhvcm91Z2gsIGFuZCBob3cgdGhleSByZXBvcnQvaGFuZGxlIGVycm9ycy4gRmluYWxseSwgd2hhdCdzIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgQUNQSSBtZXRob2RzIG9yIHN0cnVjdHVyZXMgdG8gZXN0YWJsaXNoIHBvd2VyIHN0YXRlcyBvciBvdGhlciBmdW5jdGlvbmFsaXR5PyBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIHRoZSBjb2RlIGxvZ2ljIGFuZCBhbnkgYXNzdW1wdGlvbnMgd2l0aGluLCBzbyBJIGNhbiBwcmVkaWN0IGhvdyBpdCdsbCBiZWhhdmUgaW4gcmVhbC13b3JsZCBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDgsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzowOC42ODY4MDkxNTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTA6XFx0XFx0aWYgKGNsLVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBjbC1cXHUwMDNlY2w1Zzlbcm93XSBcXHUwMDI2IEJJVChjb2x1bW4pKVxcbiA0MTE6XFx0XFx0XFx0Y29uZmlnIHw9IChtb2RlXzVnOSBcXHUwMDI2IDB4Myk7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdHJldHVybiBjb25maWc7XFxuIDQxNDpcXHR9XFxuIDQxNTpcXHRcXG4gNDE2OlxcdHN0YXRpYyB1MzJcXG4gNDE3OlxcdG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG4gNDE4OlxcdHtcXG4gNDE5OlxcdFxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cXHUwMDNlYWNwaXNhcjtcXG4gNDIwOlxcdFxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbF92MyAqY2wgPSBzYXItXFx1MDAzZWNvdW50cnlsaXN0X3YzO1xcbiA0MjE6XFx0XFx0aW50IGNvbCwgcm93LCBpO1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRpZiAoc2FyLVxcdTAwM2V2ZXIgIT0gMylcXG4gNDI0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0MjU6XFx0XFxuIDQyNjpcXHRcXHRpZiAoIWNsKVxcbiA0Mjc6XFx0XFx0XFx0cmV0dXJuIE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRDtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0XFx0aWYgKGNsLVxcdTAwM2Vtb2RlX2JlID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKVxcbiA0MzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYmUpOyBpKyspIHtcXG4gNDMzOlxcdFxcdFxcdGNvbCA9IDcgLSBpICUgODtcXG4gNDM0OlxcdFxcdFxcdHJvdyA9IGkgLyA4O1xcbiA0MzU6XFx0XFx0XFx0aWYgKCFtZW1jbXAoY2NfbGlzdF9iZVtpXSwgYWxwaGEyLCAyKSlcXG4gNDM2OlxcdFxcdFxcdFxcdHJldHVybiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMocm93LCBjb2wsIGNsKTtcXG4gNDM3OlxcdFxcdH1cXG4gNDM4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfZXUpOyBpKyspIHtcXG4gNDM5OlxcdFxcdFxcdGlmICghbWVtY21wKGNjX2xpc3RfZXVbaV0sIGFscGhhMiwgMikpXFxuIDQ0MDpcXHRcXHRcXHRcXHRyZXR1cm4gbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfbWFwX3YzKDMsIDcsIGNsKTtcXG4gNDQxOlxcdFxcdH1cXG4gNDQyOlxcdFxcbiA0NDM6XFx0b3V0OlxcbiA0NDQ6XFx0XFx0LyogRGVwZW5kcyBvbiBkcml2ZXIgKi9cXG4gNDQ1OlxcdFxcdHJldHVybiAweDIwO1xcbiA0NDY6XFx0fVxcbiA0NDc6XFx0XFxuIDQ0ODpcXHRzdGF0aWMgdTMyXFxuIDQ0OTpcXHRtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibChzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuIDQ1MDpcXHR7XFxuIDQ1MTpcXHRcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuIDQ1MjpcXHRcXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2wgKmNsID0gc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdDtcXG4gNDUzOlxcdFxcdGludCBjb2wsIHJvdywgaTtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0aWYgKCFjbClcXG4gNDU2OlxcdFxcdFxcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYWxsKTsgaSsrKSB7XFxuIDQ1OTpcXHRcXHRcXHRjb2wgPSA3IC0gaSAlIDg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjA4LjY4NjkwNTM2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg2ODEyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcGh5LVx1MDAzZWFjcGlzYXJgIFZhbHVlKipcblxuQWxyaWdodCwgdGhlIGNvZGUncyBwdWxsaW5nIGRhdGEgZnJvbSBgcGh5LVx1MDAzZWFjcGlzYXJgLiBDbGFzc2ljLiBCdXQgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSB0aGUgaGVsbCBpcyBgYWNwaXNhcmAgZ2V0dGluZyBpdHMgdmFsdWU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIFRoaXMgaXNuJ3QganVzdCBhIHJhbmRvbSB2YXJpYWJsZTsgaXQncyBsaWtlbHkgY3J1Y2lhbCBmb3Igc29tZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGJ1cyBvciBkZXZpY2UuIElzIGl0IGEgcmVnaXN0ZXIgcmVhZCwgc29tZXRoaW5nIGRlcml2ZWQgZnJvbSBhIG1vcmUgY29tcGxleCBjYWxjdWxhdGlvbiwgb3IgcGVyaGFwcyBhIHZhbHVlIHBhc3NlZCBpbiBmcm9tIHNvbWV3aGVyZSBlbHNlIGR1cmluZyBpbml0aWFsaXphdGlvbj8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgYXNzaWdubWVudC4gSSdtIGhvcGluZyBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYXNzaWdubWVudCwgYnV0IGtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyB1c3VhbGx5IGdvLCBJJ20gcHJlcGFyZWQgZm9yIGEgcmFiYml0IGhvbGUuIExldCdzIHNlZS4uLiBpcyB0aGVyZSBhIGNsZWFyIGluaXRpYWxpemF0aW9uIHBhdGg/IE9yIGFtIEkgZ29pbmcgdG8gYmUgZGl2aW5nIGludG8gaW50ZXJydXB0IGhhbmRsZXJzIGFuZCBBQ1BJIHRhYmxlcz8gVGltZSB0byBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTYwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzoxMi4zNzM3MjAyNzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTIzNTU0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWNwaXNhciA9XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9MTkzPWludCBtdDc5MnhfaW5pdF9hY3BpX3NhcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMjYtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjI3OlxcdGRldi1cXHUwMDNlcGh5LmFjcGlzYXIgPSBhc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zNDg9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MzUwOlxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFjcGlzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNTEtXFx0c3RydWN0IG10NzkyeF9hc2FyX2ZnICpmZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzc6MTQuMjY2MDg0MDg1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTM2NTU2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIGBtdDc5MnhfaW5pdF9hY3BpX3NhcmAuLi4qKlxuXG5SaWdodCwgbGV0J3MgcHVsbCB1cCB0aGF0IGBtdDc5MnhfaW5pdF9hY3BpX3NhcmAgZnVuY3Rpb24uIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIG1vZHVsZSBoYW5kbGVzIFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSAoU0FSKSBjb21wbGlhbmNlIHRocm91Z2ggQUNQSS4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgTVQ3OTJ4IHNlcmllcywgd2hpY2ggb2Z0ZW4gaW50ZWdyYXRlcyBib3RoIFdpLUZpIGFuZCBCbHVldG9vdGgsIFNBUiBtaXRpZ2F0aW9uIGJlY29tZXMgYSBjb21wbGV4IGp1Z2dsaW5nIGFjdCBvZiBwb3dlciBsZXZlbHMgYW5kIHJhZGlvIGNvbnRyb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQUNQSSB0YWJsZXMgYXJlIHBhcnNlZCBhbmQgaW50ZXJwcmV0ZWQgdG8gZHluYW1pY2FsbHkgYWRqdXN0IHRoZSB0cmFuc21pdCBwb3dlciB0byBzdGF5IHdpdGhpbiByZWd1bGF0b3J5IGxpbWl0cywgcGFydGljdWxhcmx5IHdoZW4gdGhlIGRldmljZSBpcyBvcGVyYXRpbmcgbmVhciBhIHVzZXIncyBib2R5LlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSB0eXBpY2FsIEFDUEkgbWV0aG9kcyBpbnZvbHZlZDogYF9QU1ZgLCBgX1NJT2AsIHBvdGVudGlhbGx5IGBfUFBEYCwgYW5kIGhvdyB0aGV5J3JlIHVzZWQgdG8gcmVhZCBTQVItc3BlY2lmaWMgZGF0YSwgZGVmaW5lIHBvd2VyIHN0YXRlcywgb3IgdHJpZ2dlciByYWRpbyBjb25maWd1cmF0aW9ucy4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIFNBUiBjb250cm9sIG1ldGhvZHM/IE9yIGlzIGl0IGEgY3VzdG9tIGFwcHJvYWNoPyBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBmaXJtd2FyZSDigJMgaG93IGRhdGEgaXMgcGFzc2VkIGJldHdlZW4gdGhlIEFDUEkgbGF5ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uLiBJJ2xsIGFsc28gd2FudCB0byBsb29rIGZvciBhbnkgcG93ZXItc2F2aW5nIHN0cmF0ZWdpZXMgaW1wbGVtZW50ZWQgYWxvbmdzaWRlIFNBUiBjb250cm9sLCBhcyB0aGVzZSBvZnRlbiBnbyBoYW5kLWluLWhhbmQuIEZvciBleGFtcGxlLCBhcmUgdGhleSB1c2luZyBhIHNlcGFyYXRlIHBvd2VyIGRvbWFpbiBmb3IgdGhlIHJhZGlvPyBBbmQgSSBkZWZpbml0ZWx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBlcnJvciBoYW5kbGluZyBvciBmYWxsYmFjayBtZWNoYW5pc21zIGluIGNhc2UgdGhlIEFDUEkgZGF0YSBpcyBtYWxmb3JtZWQgb3IgbWlzc2luZy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyByb2J1c3QgYW5kIHdlbGwtZGVzaWduZWQgZm9yIHJlYWwtd29ybGQgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3OCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjE5LjIxOTc0MzMzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRyZXR1cm4gMDtcXG4gMTkxOlxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0aW50IG10NzkyeF9pbml0X2FjcGlfc2FyKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuIDE5NDpcXHR7XFxuIDE5NTpcXHRcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyO1xcbiAxOTY6XFx0XFx0aW50IHJldDtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0YXNhciA9IGRldm1fa3phbGxvYyhkZXYtXFx1MDAzZW10NzYuZGV2LCBzaXplb2YoKmFzYXIpLCBHRlBfS0VSTkVMKTtcXG4gMTk5OlxcdFxcdGlmICghYXNhcilcXG4gMjAwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbChkZXYsICh1OCAqKilcXHUwMDI2YXNhci1cXHUwMDNlY291bnRyeWxpc3QsIFxcdTAwMjZhc2FyLVxcdTAwM2V2ZXIpO1xcbiAyMDM6XFx0XFx0aWYgKHJldCkge1xcbiAyMDQ6XFx0XFx0XFx0ZGV2bV9rZnJlZShkZXYtXFx1MDAzZW10NzYuZGV2LCBhc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdCk7XFxuIDIwNTpcXHRcXHRcXHRhc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdCA9IE5VTEw7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdHJldCA9IG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGRzKGRldiwgKHU4ICoqKVxcdTAwMjZhc2FyLVxcdTAwM2VkeW4sIGFzYXItXFx1MDAzZXZlcik7XFxuIDIwOTpcXHRcXHRpZiAocmV0KSB7XFxuIDIxMDpcXHRcXHRcXHRkZXZtX2tmcmVlKGRldi1cXHUwMDNlbXQ3Ni5kZXYsIGFzYXItXFx1MDAzZWR5bik7XFxuIDIxMTpcXHRcXHRcXHRhc2FyLVxcdTAwM2VkeW4gPSBOVUxMO1xcbiAyMTI6XFx0XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHRcXHQvKiBNVEdTIGlzIG9wdGlvbmFsICovXFxuIDIxNTpcXHRcXHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRncyhkZXYsICh1OCAqKilcXHUwMDI2YXNhci1cXHUwMDNlZ2VvLCBhc2FyLVxcdTAwM2V2ZXIpO1xcbiAyMTY6XFx0XFx0aWYgKHJldCkge1xcbiAyMTc6XFx0XFx0XFx0ZGV2bV9rZnJlZShkZXYtXFx1MDAzZW10NzYuZGV2LCBhc2FyLVxcdTAwM2VnZW8pO1xcbiAyMTg6XFx0XFx0XFx0YXNhci1cXHUwMDNlZ2VvID0gTlVMTDtcXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0LyogTVRGRyBpcyBvcHRpb25hbCAqL1xcbiAyMjI6XFx0XFx0cmV0ID0gbXQ3OTJ4X2FzYXJfYWNwaV9yZWFkX210ZmcoZGV2LCAodTggKiopXFx1MDAyNmFzYXItXFx1MDAzZWZnKTtcXG4gMjIzOlxcdFxcdGlmIChyZXQpIHtcXG4gMjI0OlxcdFxcdFxcdGRldm1fa2ZyZWUoZGV2LVxcdTAwM2VtdDc2LmRldiwgYXNhci1cXHUwMDNlZmcpO1xcbiAyMjU6XFx0XFx0XFx0YXNhci1cXHUwMDNlZmcgPSBOVUxMO1xcbiAyMjY6XFx0XFx0fVxcbiAyMjc6XFx0XFx0ZGV2LVxcdTAwM2VwaHkuYWNwaXNhciA9IGFzYXI7XFxuIDIyODpcXHRcXG4gMjI5OlxcdFxcdHJldHVybiAwO1xcbiAyMzA6XFx0fVxcbiAyMzE6XFx0RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTJ4X2luaXRfYWNwaV9zYXIpO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRzdGF0aWMgczhcXG4gMjM0OlxcdG10NzkyeF9hc2FyX2dldF9nZW9fcHdyKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksXFxuIDIzNTpcXHRcXHRcXHRcXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kLCBzOCBkeW5fcG93ZXIpXFxuIDIzNjpcXHR7XFxuIDIzNzpcXHRcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbiAyMzg6XFx0XFx0c3RydWN0IG10NzkyeF9hc2FyX2dlb19iYW5kICpiYW5kX3B3cjtcXG4gMjM5OlxcdFxcdHM4IGdlb19wb3dlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzc6MTkuMjE5ODQyODIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTcxMjE0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQUNQSSBUYWJsZSBFeGFtaW5hdGlvbiAtIEZvY3VzZWQgb24gTVQ3OTJ4IEFTQVIgXHUwMDI2IE1UQ0wqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbGAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgdGFibGUgcmVhZGVyLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgQUNQSSAoQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlKSBzeXN0ZW0sIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlbGV2YW50IHRvLCBhbmQgaG9wZWZ1bGx5LCBjb250YWlucyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1UNzkyeCBjaGlwc2V0J3MgQVNBUiAoQWR2YW5jZWQgU3lzdGVtIEFyY2hpdGVjdHVyZSBSZWdpc3Rlcikgb3IgdGhlIE1UQ0wgKE1lZGlhVGVrIENvbnRyb2wgTGFuZ3VhZ2UpIHN0cnVjdHVyZXMuXG5cbkknbSBtYWtpbmcgdGhlIGFzc3VtcHRpb24gdGhhdCBBU0FSIGxpa2VseSByZWxhdGVzIHRvIG1vcmUgaGFyZHdhcmUtbGV2ZWwgY29uZmlndXJhdGlvbiwgcGVyaGFwcyBjbG9jayBzZXR0aW5ncywgcG93ZXIgbWFuYWdlbWVudCBzcGVjaWZpY3MsIG9yIGV2ZW4gbWVtb3J5IG1hcHBpbmdzIHVuaXF1ZSB0byB0aGUgTVQ3OTJ4IGltcGxlbWVudGF0aW9uLiBXaGlsZSBNVENMIHByb2JhYmx5IGNvbmZpZ3VyZXMgYXNwZWN0cyBvZiBNZWRpYVRlay1zcGVjaWZpYyBmaXJtd2FyZS5cblxuVGhlIHN0cnVjdHVyZSBvZiB0aGUgQUNQSSB0YWJsZXMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBoZXJlLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGVzZSB0YWJsZXMgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgc3RydWN0dXJlZC4gVGhlIEJJT1MncyBBQ1BJIGltcGxlbWVudGF0aW9uIGlzIGxpa2VseSBnb2luZyB0byBkZWZpbmUgdGhlIGxheW91dC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCdzIHVzaW5nIHN0YW5kYXJkIEFDUEkgbWV0aG9kcywgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMsIG9yIGEgY29tYmluYXRpb24gb2YgYm90aC4gSSdsbCBuZWVkIHRvIHdhdGNoIGZvciB0aG9zZSBxdWlya3MuXG5cbkknbGwgYmUgbG9va2luZyBhdCB0aGUgY29kZSB0byBzZWUgd2hhdCBBQ1BJIG1ldGhvZHMgaXQncyB1c2luZywgaG93IHRoZSB0YWJsZSBpcyBwYXJzZWQgYW5kIHZhbGlkYXRlZCwgYW5kIHdoYXQgZGF0YSBpcyBiZWluZyBleHRyYWN0ZWQuIFRoZSBmdW5jdGlvbidzIHJvbGUgaW4gdGhlIGRyaXZlciBvciBmaXJtd2FyZSBjb250ZXh0IGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4gV2hhdCBvdGhlciBzZWN0aW9ucyBvZiB0aGUgY29kZSBjYWxsIHRoaXMgZnVuY3Rpb24/IERvZXMgaXQgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgZ3JhY2VmdWxseT8gSXMgaXQgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZT8gV2hhdCBzcGVjaWZpYyByZXNvdXJjZXMgYW5kL29yIGNvbmZpZ3VyYXRpb25zIGNhbiBpdCBpZGVudGlmeT8gVGhvc2UgYXJlIHNvbWUgb2YgdGhlIHF1ZXN0aW9ucyBJIGFtIGFza2luZyBteXNlbGYuIEknbGwgYmUgZm9jdXNlZCBvbiBob3cgaXQgZXh0cmFjdHMgdGhlIEFTQVIgYW5kL29yIE1UQ0wtcmVsYXRlZCBkYXRhLCBhbmQgY3JpdGljYWxseSwgaG93IHRoYXQgZGF0YSBpcyB0aGVuIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NDcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjIzLjUzNjk2Nzc5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChDKSAyMDIzIE1lZGlhVGVrIEluYy4gKi9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcXCJtdDc5MnguaFxcXCJcXG4gICA2OlxcdFxcbiAgIDc6XFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY19saXN0X2FsbFtdID0ge1xcbiAgIDg6XFx0XFx0XFxcIjAwXFxcIiwgXFxcIkVVXFxcIiwgXFxcIkFSXFxcIiwgXFxcIkFVXFxcIiwgXFxcIkFaXFxcIiwgXFxcIkJZXFxcIiwgXFxcIkJPXFxcIiwgXFxcIkJSXFxcIixcXG4gICA5OlxcdFxcdFxcXCJDQVxcXCIsIFxcXCJDTFxcXCIsIFxcXCJDTlxcXCIsIFxcXCJJRFxcXCIsIFxcXCJKUFxcXCIsIFxcXCJNWVxcXCIsIFxcXCJNWFxcXCIsIFxcXCJNRVxcXCIsXFxuICAxMDpcXHRcXHRcXFwiTUFcXFwiLCBcXFwiTlpcXFwiLCBcXFwiTkdcXFwiLCBcXFwiUEhcXFwiLCBcXFwiUlVcXFwiLCBcXFwiUlNcXFwiLCBcXFwiU0dcXFwiLCBcXFwiS1JcXFwiLFxcbiAgMTE6XFx0XFx0XFxcIlRXXFxcIiwgXFxcIlRIXFxcIiwgXFxcIlVBXFxcIiwgXFxcIkdCXFxcIiwgXFxcIlVTXFxcIiwgXFxcIlZOXFxcIiwgXFxcIktIXFxcIiwgXFxcIlBZXFxcIixcXG4gIDEyOlxcdH07XFxuICAxMzpcXHRcXG4gIDE0OlxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2NfbGlzdF9ldVtdID0ge1xcbiAgMTU6XFx0XFx0XFxcIkFEXFxcIiwgXFxcIkFUXFxcIiwgXFxcIkJFXFxcIiwgXFxcIkJHXFxcIiwgXFxcIkNZXFxcIiwgXFxcIkNaXFxcIiwgXFxcIkhSXFxcIiwgXFxcIkRLXFxcIixcXG4gIDE2OlxcdFxcdFxcXCJFRVxcXCIsIFxcXCJGSVxcXCIsIFxcXCJGUlxcXCIsIFxcXCJERVxcXCIsIFxcXCJHUlxcXCIsIFxcXCJIVVxcXCIsIFxcXCJJU1xcXCIsIFxcXCJJRVxcXCIsXFxuICAxNzpcXHRcXHRcXFwiSVRcXFwiLCBcXFwiTFZcXFwiLCBcXFwiTElcXFwiLCBcXFwiTFRcXFwiLCBcXFwiTFVcXFwiLCBcXFwiTUNcXFwiLCBcXFwiTVRcXFwiLCBcXFwiTkxcXFwiLFxcbiAgMTg6XFx0XFx0XFxcIk5PXFxcIiwgXFxcIlBMXFxcIiwgXFxcIlBUXFxcIiwgXFxcIlJPXFxcIiwgXFxcIlNLXFxcIiwgXFxcIlNJXFxcIiwgXFxcIkVTXFxcIiwgXFxcIlNFXFxcIixcXG4gIDE5OlxcdFxcdFxcXCJDSFxcXCIsXFxuICAyMDpcXHR9O1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjX2xpc3RfYmVbXSA9IHtcXG4gIDIzOlxcdFxcdFxcXCJBUlxcXCIsIFxcXCJCUlxcXCIsIFxcXCJCWVxcXCIsIFxcXCJDTFxcXCIsIFxcXCJJUVxcXCIsIFxcXCJNWFxcXCIsIFxcXCJPTVxcXCIsIFxcXCJSVVxcXCIsXFxuICAyNDpcXHRcXHRcXFwiUldcXFwiLCBcXFwiVk5cXFwiLCBcXFwiS1JcXFwiLCBcXFwiVUFcXFwiLCBcXFwiXFxcIiwgXFxcIlxcXCIsIFxcXCJcXFwiLCBcXFwiXFxcIixcXG4gIDI1OlxcdFxcdFxcXCJFVVxcXCIsIFxcXCJBVFxcXCIsIFxcXCJDTlxcXCIsIFxcXCJDQVxcXCIsIFxcXCJUV1xcXCIsIFxcXCJOWlxcXCIsIFxcXCJQSFxcXCIsIFxcXCJVS1xcXCIsXFxuICAyNjpcXHRcXHRcXFwiVVNcXFwiLFxcbiAgMjc6XFx0fTtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0c3RhdGljIGludFxcbiAgMzA6XFx0bXQ3OTJ4X2FjcGlfcmVhZChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqbWV0aG9kLCB1OCAqKnRibCwgdTMyICpsZW4pXFxuICAzMTpcXHR7XFxuICAzMjpcXHRcXHRzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9O1xcbiAgMzM6XFx0XFx0c3RydWN0IG10NzZfZGV2ICptZGV2ID0gXFx1MDAyNmRldi1cXHUwMDNlbXQ3NjtcXG4gIDM0OlxcdFxcdHVuaW9uIGFjcGlfb2JqZWN0ICpzYXJfcm9vdDtcXG4gIDM1OlxcdFxcdGFjcGlfaGFuZGxlIHJvb3QsIGhhbmRsZTtcXG4gIDM2OlxcdFxcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4gIDM3OlxcdFxcdHUzMiBpID0gMDtcXG4gIDM4OlxcdFxcdGludCByZXQ7XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdHJvb3QgPSBBQ1BJX0hBTkRMRShtZGV2LVxcdTAwM2VkZXYpO1xcbiAgNDE6XFx0XFx0aWYgKCFyb290KVxcbiAgNDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUocm9vdCwgbWV0aG9kLCBcXHUwMDI2aGFuZGxlKTtcXG4gIDQ1OlxcdFxcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcXG4gIDQ2OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE5VTEwsIE5VTEwsIFxcdTAwMjZidWYpO1xcbiAgNDk6XFx0XFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKVxcbiAgNTA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjIzLjUzNzA1NzQzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI3ODg2MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBQ1BJIEhhbmRsZSBSZXRyaWV2YWwgaW4gUUVNVSBhbmQgQ29uc2lkZXJpbmcgRnV6emluZyBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGNhbGxpbmcgYGFjcGlfZ2V0X2hhbmRsZShBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldiksIG1ldGhvZCwgXHUwMDI2aGFuZGxlKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB3ZSBtYW5pcHVsYXRlIHRoZSBBQ1BJIHRhYmxlcyB3aXRoaW4gUUVNVSB0byBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgVVNCIGRldmljZT9cIiBJbiB0aGVvcnksIHllcywgYnV0IHN5emthbGxlciB0eXBpY2FsbHkgZG9lc24ndCBpbmplY3QgQUNQSSB0YWJsZXMgc3BlY2lmaWNhbGx5IGZvciBVU0IgZGV2aWNlcy4gV2UgKmNvdWxkKiB1c2UgYHN5el9tb3VudF9pbWFnZWAgb3Igc2ltaWxhciBnbG9iYWwgaW5qZWN0aW9uLCBidXQgdXN1YWxseSB0aGUgQUNQSSB0YWJsZXMgYXJlIHNldCB1bmxlc3Mgc3l6a2FsbGVyIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgQUNQSSBpbmplY3Rpb24uXG5cbkhhbmcgb24uLi4gaXNuJ3QgdGhlcmUgc29tZSBBQ1BJIGZ1enppbmcgY2FwYWJpbGl0eSBpbiBzeXprYWxsZXI/IEl0J3MgdXN1YWxseSBmb3IgcGxhdGZvcm0gZGV2aWNlcywgdGhvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgZm9yZ2V0dGluZyBzb21ldGhpbmcuIEFoLCByaWdodC4uLiBpZiB0aGUgdGFyZ2V0IGlzIGFjdHVhbGx5IGEgVVNCIGRldmljZSwgYEFDUElfSEFORExFKG1kZXYtXHUwMDNlZGV2KWAgd2lsbCAqbGlrZWx5KiBiZSBOVUxMLCB1bmxlc3MgdGhlIERTRFQgaGFyZGNvZGVzIGFuIEFDUEkgaGFuZGxlIGZvciB0aGUgVVNCIGRldmljZSwgd2hpY2ggaXMgdW51c3VhbC5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gd2hhdCBpZiB0aGlzIGlzbid0IFVTQj8gQ291bGQgdGhpcyBiZSBQQ0llPyBUaGUgYG10NzkyMWVgIGRyaXZlci4uLiB0aGF0J3MgdGhlIFBDSWUgZHJpdmVyLCBpc24ndCBpdD8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBZZWFoLCBJIHRoaW5rIGl0IGlzLiBPa2F5LCBsZXQncyBjb25maXJtIGBtdDc5MjFlYCBleGlzdHMuIFRoYXQncyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCBob3cgdGhlIEFDUEkgaGFuZGxlIGlzIHJldHJpZXZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzoyOC42NjQ5NDcxOTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODI4ODE3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3OTIxZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19NVDc5MjFfQ09NTU9OKSArPSBtdDc5MjEtY29tbW9uLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19NVDc5MjFFKSArPSBtdDc5MjFlLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19NVDc5MjFTKSArPSBtdDc5MjFzLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlPTk9bXQ3OTIxLWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGU6MTA6bXQ3OTIxZS15IDo9IHBjaS5vIHBjaV9tYWMubyBwY2lfbWN1Lm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZS0xMS1tdDc5MjFzLXkgOj0gc2Rpby5vIHNkaW9fbWFjLm8gc2Rpb19tY3Uub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg9MjcxPXZvaWQgbXQ3OTIxX21hY19yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg6MjcyOmludCBtdDc5MjFlX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgdm9pZCAqdHh3aV9wdHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmgtMjczLVxcdFxcdFxcdCAgIGVudW0gbXQ3Nl90eHFfaWQgcWlkLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg9MzAzPWludCBtdDc5MjFfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL210NzkyMS5oLTMwNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaDozMDY6aW50IG10NzkyMWVfZHJpdmVyX293bihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaDozMDc6aW50IG10NzkyMWVfbWFjX3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL210NzkyMS5oOjMwODppbnQgbXQ3OTIxZV9tY3VfaW5pdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaC0zMDktaW50IG10NzkyMXNfd2ZzeXNfcmVzZXQoc3RydWN0IG10NzkyeF9kZXYgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYz0zNz1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfYXNwbSwgXFxcImRpc2FibGUgUENJIEFTUE0gc3VwcG9ydFxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jOjM5OnN0YXRpYyBpbnQgbXQ3OTIxZV9pbml0X3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmMtNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmMtNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM6NDQ6c3RhdGljIHZvaWQgbXQ3OTIxZV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTQ1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jPTI1OT1zdGF0aWMgaW50IG10NzkyMV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0yNzAtXFx0XFx0LnRva2VuX3NpemUgPSBNVDc5MjFfVE9LRU5fU0laRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzoyNzE6XFx0XFx0LnR4X3ByZXBhcmVfc2tiID0gbXQ3OTIxZV90eF9wcmVwYXJlX3NrYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0yNzItXFx0XFx0LnR4X2NvbXBsZXRlX3NrYiA9IG10NzZfY29ubmFjX3R4X2NvbXBsZXRlX3NrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTI4Mi1cXHRzdGF0aWMgY29uc3Qgc3RydWN0IG10NzkyeF9oaWZfb3BzIG10NzkyMV9wY2llX29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzoyODM6XFx0XFx0LmluaXRfcmVzZXQgPSBtdDc5MjFlX2luaXRfcmVzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM6Mjg0OlxcdFxcdC5yZXNldCA9IG10NzkyMWVfbWFjX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jOjI4NTpcXHRcXHQubWN1X2luaXQgPSBtdDc5MjFlX21jdV9pbml0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTI4Ni1cXHRcXHQuZHJ2X293biA9IG10NzkyeGVfbWN1X2Rydl9wbWN0cmwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYz00NDc9c3RhdGljIHZvaWQgbXQ3OTIxX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM6NDU1OlxcdG10NzkyMWVfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NTYtXFx0c2V0X2JpdChNVDc2X1JFTU9WRUQsIFxcdTAwMjZtZGV2LVxcdTAwM2VwaHkuc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jLTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jOjg6aW50IG10NzkyMWVfdHhfcHJlcGFyZV9za2Ioc3RydWN0IG10NzZfZGV2ICptZGV2LCB2b2lkICp0eHdpX3B0cixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWFjLmMtOS1cXHRcXHRcXHQgICBlbnVtIG10NzZfdHhxX2lkIHFpZCwgc3RydWN0IG10NzZfd2NpZCAqd2NpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy01NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWFjLmM6NTY6aW50IG10NzkyMWVfbWFjX3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jLTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy0xMDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jOjEwMjpcXHRlcnIgPSBtdDc5MjFlX2RyaXZlcl9vd24oZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWFjLmMtMTAzLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmMtNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmM6NzppbnQgbXQ3OTIxZV9kcml2ZXJfb3duKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jPTIyPW10NzkyMV9tY3Vfc2VuZF9tZXNzYWdlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYy00MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmM6NDE6aW50IG10NzkyMWVfbWN1X2luaXQoc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmMtNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYzo1MjpcXHRlcnIgPSBtdDc5MjFlX2RyaXZlcl9vd24oZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmMtNTMtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzc6MzAuNTQ3ODM0NTYyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MTU5NTQzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNVDc5MjEgUENJZSBEcml2ZXIgaW4gYSBTeXprYWxsZXIgQ29udGV4dCoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBQQ0llIGRyaXZlciBmb3IgdGhlIE1UNzkyMSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCwgSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgaW50byBhbiBBQ1BJIHJvYWRibG9jay4gVGhlIGNvZGUncyB1c2luZyBgYWNwaV9nZXRfaGFuZGxlYCB0byBwYXJzZSBBQ1BJIHRhYmxlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGhhbmRsZXMuIE5vdywgaW4gYSBRRU1VIGVudmlyb25tZW50LCB3aGljaCBpcyB3aGF0IFN5emthbGxlciB0eXBpY2FsbHkgdXNlcywgUENJZSBkZXZpY2VzICpkb24ndCogaGF2ZSBBQ1BJIGhhbmRsZXMgYnkgZGVmYXVsdCwgdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSBEU0RULiBBbmQgU3l6a2FsbGVyLCBmcm9tIHdoYXQgSSd2ZSBzZWVuLCBkb2Vzbid0IHVzdWFsbHkgZGVmaW5lIE1lZGlhdGVrIFdpLUZpIGNhcmRzIHdpdGhpbiB0aGF0IERTRFQuIFNvLCB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIHBhdGggbWlnaHQgYmUgdW5yZWFjaGFibGUgaW4gYSBTeXprYWxsZXItZHJpdmVuIFFFTVUgc2V0dXAuXG5cbkxldCdzIHRyYWNlIGl0LiBJZiBgQUNQSV9IQU5ETEUobWRldi1cdTAwM2VkZXYpYCBpcyBOVUxMLCB0aGUgYG10NzkyeF9hY3BpX3JlYWRgIGZ1bmN0aW9uIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhhdCBmYWlsdXJlIGNhc2NhZGVzIHRvIGBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbGAsIHdoaWNoIGFsc28gcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGVuLCB3aXRoaW4gYG10NzkyeF9pbml0X2FjcGlfc2FyYCwgd2Ugc2VlIHRoYXQgZXJyb3IgaXMgaGFuZGxlZCwgdGhlIGBjb3VudHJ5bGlzdGAgaXMgc2V0IHRvIE5VTEwgaWYgdGhlIHJlYWQgZmFpbHMuIExhdGVyLCB3ZSBzZWUgaW4gYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB0aGF0IGlmIGBzYXItXHUwMDNlY291bnRyeWxpc3RfdjNgIGlzIE5VTEwsIGl0IHJldHVybnMgYE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRGAuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgcHJvY2VlZHMuIEFuZCB0aGUga2V5IGlzLCBpZiBgc2FyLVx1MDAzZWNvdW50cnlsaXN0X3YzYCAqaXMqIE5VTEwsIHRoZW4gdGhlIGNoZWNrIG9uIGBjbC1cdTAwM2Vtb2RlX2JlYCB3aWxsIGJlIHNraXBwZWQsIHdoaWNoIGltcGxpZXMgdGhlIEFDUEkgcmVhZCBzdWNjZWVkZWQuIEZvciB0aGUgQUNQSSByZWFkIHRvIHN1Y2NlZWQsIGBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldilgIGhhcyB0byBiZSBub24tTlVMTCwgYW5kIGBhY3BpX2V2YWx1YXRlX29iamVjdGAgaGFzIHRvIHJldHVybiBhIHZhbGlkIGJ1ZmZlci5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBTeXprYWxsZXIgc29tZWhvdyBtb2NrIHRoaXMgc2l0dWF0aW9uPyBDYW4gaXQgaW5qZWN0IGEgZmFrZSBBQ1BJIGhhbmRsZSBvciB0YWJsZSBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgUENJZSBkZXZpY2U/IE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCBpcyBwcm9iYWJseSBub3QuIFN5emthbGxlciBpcyBnb29kIGZvciBnZW5lcmljIEFDUEkgbWFuaXB1bGF0aW9uLCBidXQgaW5qZWN0aW5nIEFDUEkgdGFibGVzIGZvciAqc3BlY2lmaWMqIFBDSWUgZGV2aWNlcyBmZWVscyBsaWtlIGEgbGV2ZWwgb2Ygc29waGlzdGljYXRpb24gSSBoYXZlbid0IG9ic2VydmVkIGl0IGRvaW5nLiBJJ3ZlIHNlZW4gaXQgdXNlIGBzeXpfbW91bnRfaW1hZ2VgIHRvIGluamVjdCB0aGluZ3MsIGJ1dCBuZXZlciBhIFBDSWUgZGV2aWNlIEFDUEkuIFNvIGl0IHNlZW1zIHVubGlrZWx5LiBJIHZhZ3VlbHkgcmVjYWxsIHRoZXJlIGJlaW5nIGEgYHN5el9hY3BpX2luamVjdGAgb3Igc29tZXRoaW5nIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gZXhpc3QuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3QgY2hlY2sgaWYgYW55IEFDUEkgaW5qZWN0aW9uIG9jY3VycyBpbiBTeXprYWxsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQ5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjM5LjQ2Mzc5MjI5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMTQ1MjM5MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X2FjcGlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjQxLjY3NTI1MzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MzU0NDU3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBBQ1BJIFRhYmxlIEludGVyYWN0aW9uIGZvciBNZWRpYXRlayBXaS1GaSBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIE1lZGlhdGVrIFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaXRzIEFDUEkgaW50ZXJhY3Rpb25zLCB3aXRoaW4gU3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZXJlJ3Mgbm8gZGVkaWNhdGVkIGBzeXpfYWNwaWAgZmVhdHVyZSwgd2hpY2ggaXMgdGhlIGZpcnN0IGNoYWxsZW5nZS4gVGhlbiBJIHN0YXJ0IHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zPyBDb3VsZCBJIGxldmVyYWdlIGBDT05GSUdfQUNQSV9DVVNUT01fRFNEVGAgb3IgYENPTkZJR19BQ1BJX1RBQkxFX1VQR1JBREVgPyBTeXprYWxsZXIgKmNhbiogdXNlIGFuIGBpbml0cmRgIHRvIHVwZ3JhZGUgQUNQSSB0YWJsZXMuIFRoZSBwcm9ibGVtIGlzLCBpdCB1c2VzIGEgZ2VuZXJpYyBpbml0cmQgYW5kIGRvZXNuJ3QgZHluYW1pY2FsbHkgdGFpbG9yIHRoZSBBQ1BJIHRhYmxlcyBmb3IgdGhlc2UgTWVkaWF0ZWsgV2ktRmkgY2FyZHMuXG5cbk5leHQsIEkgcmVtZW1iZXIgdGhlIGNvcmUgaXNzdWU6IHRoZSBNZWRpYXRlayBXaS1GaSBjYXJkIGlzbid0IGRpcmVjdGx5IGVtdWxhdGVkIGluIFFFTVUuIFdhaXQsIEkgc2hvdWxkIGRvdWJsZSBjaGVjaywgaXMgdGhlIE1UNzkyMSBlbXVsYXRlZCBpbiBRRU1VPyBObywgaXQgaXNuJ3QuIE5laXRoZXIgTVQ3OTIxIG5vciBNVDc5MjUgYXJlIGRpcmVjdGx5IGVtdWxhdGVkLlxuXG5CdXQgdGhlbiwgSSByZWNhbGwgU3l6a2FsbGVyJ3MgY2FwYWJpbGl0aWVzIHdpdGggYG1hYzgwMjExX2h3c2ltYCBhbmQgYHZoY2ktaGNkYC4gSXQgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMuIElmIEkgY291bGQgZ2V0IFN5emthbGxlciB0byBlbXVsYXRlIGFuIE1UNzkyMSB2aWEgVVNCLCB1c2luZyBgdmhjaS1oY2RgIG9yIHBlcmhhcHMgZXZlbiBgZHVtbXlfaGNkYCwgdGhlIGBtdDc5MjF1YCBkcml2ZXIgKmNvdWxkKiBiaW5kIHRvIGl0LlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBJIGNhbiBldmVuIHJlYWNoIGBtdDc5MjF1YCB2aWEgVVNCIGZ1enppbmcuIFllcywgaWYgSSBjYW4gY3JlYXRlIGEgVVNCIGRldmljZSB0aGF0IGhhcyB0aGUgY29ycmVjdCB2ZW5kb3IvcHJvZHVjdCBJRCAoYDB4MGU4ZGAsIGAweDc5MDJgKSwgdGhlbiBgbXQ3OTIxdV9wcm9iZWAgd2lsbCBiZSBjYWxsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBldmVuIGlmIEkgZ2V0IGBtdDc5MjF1X3Byb2JlYCBjYWxsZWQsIGRvZXMgdGhlIFVTQiBkZXZpY2UgaGF2ZSBhbiBBQ1BJIGhhbmRsZT8gQW5kIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreS4gSW4gTGludXgsIFVTQiBkZXZpY2VzICp0eXBpY2FsbHkqIGRvbid0IGhhdmUgQUNQSSBoYW5kbGVzIHVubGVzcyB0aGV5J3JlIGV4cGxpY2l0bHkgaGFyZGNvZGVkIGluIHRoZSBEU0RULCB3aGljaCBpcyB1c3VhbGx5IGZvciBzcGVjaWZpYyBvbmJvYXJkIGRldmljZXMgbGlrZSBCbHVldG9vdGggb3IgV2ktRmkgb24gc29tZSBsYXB0b3BzLlxuXG5JZiBJJ20gY3JlYXRpbmcgYSBVU0IgZGV2aWNlIGR5bmFtaWNhbGx5IHVzaW5nIGBkdW1teV9oY2RgIG9yIGB2aGNpLWhjZGAsIGl0J3MgKm5vdCogZ29pbmcgdG8gaGF2ZSBhbiBBQ1BJIGhhbmRsZS4gVGhhdCBtZWFucyBgQUNQSV9DT01QQU5JT04oZGV2KWAgd2lsbCBiZSBOVUxMLiBDb25zZXF1ZW50bHksIGBtdDc5MnhfYWNwaV9yZWFkYCBpcyBnb2luZyB0byByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyBgYXNhci1cdTAwM2Vjb3VudHJ5bGlzdGAgd2lsbCBiZSBOVUxMLCBhbmQgdGhlIGBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92M2Agd2lsbCByZXR1cm4gZWFybHksIGVmZmVjdGl2ZWx5IHNob3J0LWNpcmN1aXRpbmcgdGhhdCBwYXRoLlxuXG5JbiBjb25jbHVzaW9uLCBJIHRoaW5rIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHVubGVzcyB0aGVyZSdzIGEgY3VzdG9tIERTRFQgYW5kIGEgbWF0Y2hpbmcgZW11bGF0ZWQgb3IgcGh5c2ljYWwgZGV2aWNlLiBJIG5lZWQgdG8gbm93IGRvdWJsZS1jaGVjaywgaXMgaXQgcG9zc2libGUgdG8gY2FsbCBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIHdpdGggYSBub24tTlVMTCBgY2xgIGJ5IGFueSBvdGhlciBtZWFucz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzc6NTIuNjEwNzAyNDk0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMxODE2NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvdW50cnlsaXN0X3YzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDE3PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDE5LVxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cXHUwMDNlYWNwaXNhcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQyMDpcXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2xfdjMgKmNsID0gc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdF92MztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQyMS1cXHRpbnQgY29sLCByb3csIGk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oPTExMz1zdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmgtMTI0LVxcdFxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY291bnRyeWxpc3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaDoxMjU6XFx0XFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjb3VudHJ5bGlzdF92MztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oLTEyNi1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzo1NC41NDI1MjQ1NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NzQwMTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgZGVzY3JpYmVkOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvdW50cnlsaXN0X3YzYCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgY29kZSdzIGFza2luZyBhYm91dCBgY291bnRyeWxpc3RfdjNgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp3aGVyZSogaXMgdGhpcyB2YXJpYWJsZSBiZWluZyBzZXQ/IEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIHBvcHVsYXRlZC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSBjYW4gZmluZCB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IGFzc2lnbnMgZGF0YSB0byBgY291bnRyeWxpc3RfdjNgLiBJcyBpdCBpbml0aWFsaXplZCBsb2NhbGx5IHdpdGhpbiB0aGUgY3VycmVudCBmdW5jdGlvbi9tb2R1bGU/IElzIGl0IGdsb2JhbGx5IGRlZmluZWQsIHBlcmhhcHMgaW1wb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZT8gSXMgdGhlcmUgYSBkYXRhYmFzZSBxdWVyeSBvciBleHRlcm5hbCBBUEkgY2FsbCBwb3B1bGF0aW5nIGl0PyBLbm93aW5nIHRoZSBzb3VyY2Ugb2YgdGhpcyB2YXJpYWJsZSBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIHN5c3RlbSBhbmQgZGVidWdnaW5nIGFueSBkb3duc3RyZWFtIGlzc3Vlcy4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyAtIG15IElERSdzIHNlYXJjaCBvciBncmVwLCBpZiBJIG5lZWQgdG8gbG9vayBhY3Jvc3MgdGhlIHdob2xlIHByb2plY3QgLSBhbmQgc3RhcnQgaHVudGluZyBkb3duIGl0cyBkZWZpbml0aW9uLiBHb3R0YSB0cmFjayBkb3duIHRoZSBzb3VyY2UgYmVmb3JlIEkgY2FuIGNvbnRpbnVlIHRoaXMgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1OCwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjU3LjYyOTkyOTQzNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwODc0Nzg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3VudHJ5bGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTE5Mz1pbnQgbXQ3OTJ4X2luaXRfYWNwaV9zYXIoc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjAxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjAyOlxcdHJldCA9IG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGNsKGRldiwgKHU4ICoqKVxcdTAwMjZhc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdCwgXFx1MDAyNmFzYXItXFx1MDAzZXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMDMtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjA0OlxcdFxcdGRldm1fa2ZyZWUoZGV2LVxcdTAwM2VtdDc2LmRldiwgYXNhci1cXHUwMDNlY291bnRyeWxpc3QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjA1OlxcdFxcdGFzYXItXFx1MDAzZWNvdW50cnlsaXN0ID0gTlVMTDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTIwNi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQxNz1tdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOS1cXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0MjA6XFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjbCA9IHNhci1cXHUwMDNlY291bnRyeWxpc3RfdjM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MjEtXFx0aW50IGNvbCwgcm93LCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00NDk9bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90Ymwoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00NTEtXFx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDUyOlxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY2wgPSBzYXItXFx1MDAzZWNvdW50cnlsaXN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDUzLVxcdGludCBjb2wsIHJvdywgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmg9MTEzPXN0cnVjdCBtdDc5MnhfYWNwaV9zYXIge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaC0xMjMtXFx0dW5pb24ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmg6MTI0OlxcdFxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY291bnRyeWxpc3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaDoxMjU6XFx0XFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjb3VudHJ5bGlzdF92MztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oLTEyNi1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzo1OS41Mzg2ODM1MzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3OTY4MjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFDUEkgRGF0YSBGbG93IGluIHRoZSBNVDc5MnggRHJpdmVyIHdpdGhpbiBhIFFFTVUgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG10NzkyeGAgZHJpdmVyIGFuZCB0aGUgQUNQSSBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRoaXMgY291bnRyeSBsaXN0IChgYXNhci1cdTAwM2Vjb3VudHJ5bGlzdGApLiBJdCBsb29rcyBsaWtlIHRoaXMgZGF0YSBpcyBwb3B1bGF0ZWQgZXhjbHVzaXZlbHkgdGhyb3VnaCBgbXQ3OTJ4X2FzYXJfYWNwaV9yZWFkX210Y2xgLiBUaGlzIGZ1bmN0aW9uLCBpbiB0dXJuLCBjYWxscyBgbXQ3OTJ4X2FjcGlfcmVhZGAuIEkgaGF2ZSB0byB0cmFjZSB3aGVyZSB0aGF0IGdvZXMuIEFoLCB5ZXMsIGBtdDc5MnhfYWNwaV9yZWFkYCBjYWxscyBgQUNQSV9IQU5ETEUobWRldi1cdTAwM2VkZXYpYC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIHdoYXQgZG9lcyBgbWRldi1cdTAwM2VkZXZgIHJlcHJlc2VudD8gSWYgd2UncmUgdGFsa2luZyBhYm91dCBhIFVTQiBkZXZpY2UsIGBtZGV2LVx1MDAzZWRldmAgaXMgZWl0aGVyIGBcdTAwMjZpbnRmLVx1MDAzZWRldmAgb3IgYFx1MDAyNnVzYl9kZXYtXHUwMDNlZGV2YC4gTm93LCBjYW4gYSBVU0IgZGV2aWNlICphY3R1YWxseSogaGF2ZSBhbiBBQ1BJIGhhbmRsZSB3aGVuIGVtdWxhdGVkIGluIFFFTVU/IEhtbSwgbm8sIHRoYXQncyBub3QgaG93IFFFTVUgd29ya3MuIEl0IGRvZXNuJ3QgZ2VuZXJhdGUgQUNQSSB0YWJsZXMgZm9yIGR5bmFtaWNhbGx5IHBsdWdnZWQgVVNCIGRldmljZXMuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgUENJZT8gRG9lcyBRRU1VIGV2ZW4gZW11bGF0ZSBNVDc5MjEgUENJZSBkZXZpY2VzPyBObywgaXQgZG9lc24ndC4gU28sIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGUgZHJpdmVyIGNhbiAqb25seSogYmUgdGVzdGVkIGFuZCBwb3RlbnRpYWxseSBwcm9iZWQgdmlhIFVTQiAodXNpbmcgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcpIG9yIFNESU8gKGlmIGFueSBzeXprYWxsZXIgU0RJTyBmdXp6aW5nIGV4aXN0cykuIFRoZSBjb21tb24gcG9pbnQsIGhvd2V2ZXIsIGlzIHRoYXQgaW4gKm5laXRoZXIqIGNhc2Ugd2lsbCB0aGUgZGV2aWNlIGhhdmUgYSB2YWxpZCBBQ1BJIGhhbmRsZS5cblxuQ29uc2VxdWVudGx5LCBgbXQ3OTJ4X2FjcGlfcmVhZGAgd2lsbCByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyBgYXNhci1cdTAwM2Vjb3VudHJ5bGlzdGAgd2lsbCBiZSBgTlVMTGAuIEJpbmdvISBUaGVuLCBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSURgLlxuXG5UaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGJsb2NrOlxuXG5gYGBjXG5cdGlmIChjbC1cdTAwM2Vtb2RlX2JlID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKVxuXHRcdGdvdG8gb3V0O1xuYGBgXG5cbndpbGwgKm5ldmVyKiBiZSByZWFjaGVkIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBlYXJsaWVyIGNoZWNrcyB3aWxsIHNob3J0LWNpcmN1aXQgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5XYWl0IGEgbW9tZW50LCBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgbXQ3OTJ4X2FjcGlfcmVhZGAgbWlnaHQgc3VjY2VlZCBhbmQgcmV0dXJuIGEgbm9uLWVycm9yIGNvZGU/IExldCBtZSByZS1leGFtaW5lIGBtdDc5MnhfYWNwaV9yZWFkYCBhbmQgc2VlIGlmIEkgbWlzc2VkIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NjUsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzg6MDYuNjE4MzY4Njc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjk6XFx0c3RhdGljIGludFxcbiAgMzA6XFx0bXQ3OTJ4X2FjcGlfcmVhZChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqbWV0aG9kLCB1OCAqKnRibCwgdTMyICpsZW4pXFxuICAzMTpcXHR7XFxuICAzMjpcXHRcXHRzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9O1xcbiAgMzM6XFx0XFx0c3RydWN0IG10NzZfZGV2ICptZGV2ID0gXFx1MDAyNmRldi1cXHUwMDNlbXQ3NjtcXG4gIDM0OlxcdFxcdHVuaW9uIGFjcGlfb2JqZWN0ICpzYXJfcm9vdDtcXG4gIDM1OlxcdFxcdGFjcGlfaGFuZGxlIHJvb3QsIGhhbmRsZTtcXG4gIDM2OlxcdFxcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4gIDM3OlxcdFxcdHUzMiBpID0gMDtcXG4gIDM4OlxcdFxcdGludCByZXQ7XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdHJvb3QgPSBBQ1BJX0hBTkRMRShtZGV2LVxcdTAwM2VkZXYpO1xcbiAgNDE6XFx0XFx0aWYgKCFyb290KVxcbiAgNDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUocm9vdCwgbWV0aG9kLCBcXHUwMDI2aGFuZGxlKTtcXG4gIDQ1OlxcdFxcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcXG4gIDQ2OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE5VTEwsIE5VTEwsIFxcdTAwMjZidWYpO1xcbiAgNDk6XFx0XFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKVxcbiAgNTA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdHNhcl9yb290ID0gYnVmLnBvaW50ZXI7XFxuICA1MzpcXHRcXHRpZiAoc2FyX3Jvb3QtXFx1MDAzZXR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UgfHxcXG4gIDU0OlxcdFxcdCAgICBzYXJfcm9vdC1cXHUwMDNlcGFja2FnZS5jb3VudCBcXHUwMDNjIDQgfHxcXG4gIDU1OlxcdFxcdCAgICBzYXJfcm9vdC1cXHUwMDNlcGFja2FnZS5lbGVtZW50c1swXS50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7XFxuICA1NjpcXHRcXHRcXHRkZXZfZXJyKG1kZXYtXFx1MDAzZWRldiwgXFxcInNhciBjbnQgPSAlZFxcXFxuXFxcIixcXG4gIDU3OlxcdFxcdFxcdFxcdHNhcl9yb290LVxcdTAwM2VwYWNrYWdlLmNvdW50KTtcXG4gIDU4OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM4OjA2LjYxODQ1NDU5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI5MjQ5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUNQSSBIYW5kbGUgaW4gdGhpcyBDb250ZXh0KipcblxuT2theSwgc28gSSBzZWUgdGhpcyBjaGVjayBoZXJlOiBgcm9vdCA9IEFDUElfSEFORExFKG1kZXYtXHUwMDNlZGV2KTsgaWYgKCFyb290KSByZXR1cm4gLUVPUE5PVFNVUFA7YCBNeSBmaXJzdCB0aG91Z2h0IGlzLCB5ZXMsIHRoYXQgbWFrZXMgc2Vuc2UgKmluIHRoZSBnZW5lcmFsIGNhc2UqLiBJdCdzIGxvb2tpbmcgZm9yIGFuIEFDUEkgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLiBIb3dldmVyLCBnaXZlbiB0aGF0IHN5emthbGxlciBnZW5lcmF0ZXMgdGhlc2UgVVNCIGRldmljZXMgZHluYW1pY2FsbHksIHNwZWNpZmljYWxseSB2aWEgYGR1bW15X2hjZGAgb3IgYHZoY2ktaGNkYCwgdGhlcmUncyBhIHZlcnkgZ29vZCBjaGFuY2UgdGhleSAqd29uJ3QqIGhhdmUgYW4gQUNQSSBjb21wYW5pb24gZGV2aWNlLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS5cblxuVGhlcmVmb3JlLCBhcyBpdCBzdGFuZHMsIHRoZSBleHByZXNzaW9uIGBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldilgIHdpbGwgbW9zdCBsaWtlbHkgZXZhbHVhdGUgdG8gTlVMTC4gV2hpY2ggbWVhbnMgdGhhdCB0aGUgY29uZGl0aW9uIGlzIG1ldCBhbmQgaXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGlzIG1vZGlmaWVkIHNlY3Rpb24gb2YgdGhlIGNvZGUgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgd2hlbiBvcGVyYXRpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHNpbmNlIHRoYXQncyBob3cgd2UncmUgZ2VuZXJhdGluZyB0aGVzZSBVU0IgZGV2aWNlcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0sIHRob3VnaC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIHBsYWNlcyB3aGVyZSBgYWNwaXNhcmAgaXMgcG9wdWxhdGVkLiBJIGRvbid0IHdhbnQgdG8gbWlzcyBhIG51YW5jZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk0MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM4OjEwLjY0NzcwODEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE5MjQ2NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjcGlzYXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD0xNTg9c3RydWN0IG10NzkyeF9waHkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaC0xODItI2lmZGVmIENPTkZJR19BQ1BJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaDoxODM6XFx0dm9pZCAqYWNwaXNhcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeC5oLTE4NC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9MTkzPWludCBtdDc5MnhfaW5pdF9hY3BpX3NhcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMjYtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjI3OlxcdGRldi1cXHUwMDNlcGh5LmFjcGlzYXIgPSBhc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0yMzQ9bXQ3OTJ4X2FzYXJfZ2V0X2dlb19wd3Ioc3RydWN0IG10NzkyeF9waHkgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjM2LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjIzNzpcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjM4LVxcdHN0cnVjdCBtdDc5MnhfYXNhcl9nZW9fYmFuZCAqYmFuZF9wd3I7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTI4OT1tdDc5MnhfYXNhcl9yYW5nZV9wd3Ioc3RydWN0IG10NzkyeF9waHkgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjkzLVxcdGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9zYXJfY2FwYSAqY2FwYSA9IHBoeS1cXHUwMDNlbXQ3Ni1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2VzYXJfY2FwYTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjI5NDpcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjk1LVxcdHU4ICpsaW1pdCwgYmFuZCwgbWF4O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zMjE9aW50IG10NzkyeF9pbml0X2FjcGlfc2FyX3Bvd2VyKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGJvb2wgc2V0X2RlZmF1bHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTMyNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjMyNjpcXHRpZiAoIXBoeS1cXHUwMDNlYWNwaXNhciB8fCAhKChzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICopcGh5LVxcdTAwM2VhY3Bpc2FyKS1cXHUwMDNlZHluKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzI3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zNDg9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MzUwOlxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFjcGlzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNTEtXFx0c3RydWN0IG10NzkyeF9hc2FyX2ZnICpmZztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzYxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MzYyOlxcdGlmICghYWNwaXNhcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM2My1cXHRcXHRyZXR1cm4gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM2NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjM2NTpcXHRmZyA9IGFjcGlzYXItXFx1MDAzZWZnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzY2LVxcdGlmICghZmcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQxNz1tdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MTgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDE5OlxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cXHUwMDNlYWNwaXNhcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQyMC1cXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2xfdjMgKmNsID0gc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdF92MztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDQ5PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ1MC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0NTE6XFx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDUyLVxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY2wgPSBzYXItXFx1MDAzZWNvdW50cnlsaXN0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00NzI9dTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDczLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQ3NDpcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00NzUtXFx0dTMyIGNvbmZpZyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM4OjEyLjU2Njk1OTM5NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM4MDk5MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gQUNQSSBTQVIgUGFyc2luZyBmb3IgTWVkaWF0ZWsgV2ktRmkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRyYWNlZCB0aGlzIGNvZGUgYW5kIGl0J3MgbG9va2luZyBwcmV0dHkgY2xlYXIuIFRoZSBrZXkgaXMgdGhhdCBgYXNhci1cdTAwM2Vjb3VudHJ5bGlzdGAgZ2V0cyBwb3B1bGF0ZWQgb25seSB3aXRoaW4gYG10NzkyeF9pbml0X2FjcGlfc2FyYC4gIFRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGlzIGNhbGxlZCBmcm9tIHNvbWV0aGluZyBsaWtlIGBtdDc5MjFfbWFjX2luaXRgLiAgVGhlIGNhdGNoIGhlcmUgaXMgdGhhdCBmb3IgYSBVU0IgZGV2aWNlIGluIFFFTVUsIGBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldilgIGlzIGdvaW5nIHRvIGJlIE5VTEwuXG5cblRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIGltbWVkaWF0ZWx5IGNoZWNrcyBpZiB0aGUgY291bnRyeSBsaXN0IChgY2xgKSBpcyBudWxsLiBJZiBpdCBpcyAod2hpY2ggaXQgaXMgaW4gb3VyIFFFTVUgVVNCIGNhc2UpLCBpdCByZXR1cm5zIGVhcmx5LlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGNvbmZpcm0gdGhlIFFFTVUgc2NlbmFyaW8uIFVTQiBkZXZpY2VzIGluIFFFTVUsIHdoZXRoZXIgdXNpbmcgYGR1bW15X2hjZGAgb3IgYHZoY2ktaGNkYCwgYXJlIHNvZnR3YXJlIGVtdWxhdGVkLiAgVGhleSBkb24ndCBnZXQgQUNQSSBub2RlcyBpbiB0aGUgRFNEVC4gVGhpcyBtZWFucyBgQUNQSV9DT01QQU5JT04oZGV2KWAgaXMgTlVMTCwgd2hpY2ggaW4gdHVybiBtZWFucyBgQUNQSV9IQU5ETEUoZGV2KWAgaXMgTlVMTC4gQ29uc2VxdWVudGx5LCBgbXQ3OTJ4X2FjcGlfcmVhZGAgd2lsbCByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBjYXVzZXMgYG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGNsYCB0byBmYWlsIGFuZCwgeW91IGd1ZXNzZWQgaXQsIGBhc2FyLVx1MDAzZWNvdW50cnlsaXN0YCByZW1haW5zIE5VTEwuIFRoZXJlZm9yZSwgdGhlIGVhcmx5IHJldHVybiBpbiBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIGlzIHJlYWNoZWQuXG5cblNvLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSBBQ1BJIFNBUiBwYXJzaW5nIGZvciBNZWRpYXRlayBXaS1GaSBjYXJkcy4gVGhlIGNvZGUgbmVlZHMgYSB2YWxpZCBBQ1BJIGNvbXBhbmlvbiBkZXZpY2UsIHdoaWNoIHZpcnR1YWxpemVkIFVTQiBvciBQQ0llIGRldmljZXMgaW4gUUVNVSBzaW1wbHkgZG9uJ3QgaGF2ZSBkdWUgdG8gdGhlaXIgZHluYW1pYyBhbmQgZW11bGF0ZWQgbmF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI0NywiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzg6MjAuMTA1MDYxNTAxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgcGFyc2luZyBsb2dpYyBmb3IgTWVkaWF0ZWsgTVQ3OTJ4IFdpLUZpIGNhcmRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHJldHJpZXZpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGRldmljZSB2aWEgQUNQSV9IQU5ETEUobWRldi1cXHUwMDNlZGV2KSB0byByZWFkIHRoZSBBQ1BJIHRhYmxlcy4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZHluYW1pY2FsbHkgY3JlYXRlZCBVU0Igb3IgUENJZSBkZXZpY2VzIGRvIG5vdCBoYXZlIEFDUEkgbm9kZXMgaW4gdGhlIERTRFQsIHNvIEFDUElfSEFORExFIHJldHVybnMgTlVMTC4gQ29uc2VxdWVudGx5LCB0aGUgQUNQSSByZWFkaW5nIGZhaWxzLCB0aGUgY291bnRyeWxpc3QgaXMgbmV2ZXIgcG9wdWxhdGVkLCBhbmQgdGhlIG1vZGlmaWVkIHBhcnNpbmcgZnVuY3Rpb25zIHJldHVybiBlYXJseSwgbWFraW5nIHRoaXMgY29kZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgcGFyc2luZyBsb2dpYyBmb3IgTWVkaWF0ZWsgTVQ3OTJ4IFdpLUZpIGNhcmRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHJldHJpZXZpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGRldmljZSB2aWEgQUNQSV9IQU5ETEUobWRldi1cXHUwMDNlZGV2KSB0byByZWFkIHRoZSBBQ1BJIHRhYmxlcy4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZHluYW1pY2FsbHkgY3JlYXRlZCBVU0Igb3IgUENJZSBkZXZpY2VzIGRvIG5vdCBoYXZlIEFDUEkgbm9kZXMgaW4gdGhlIERTRFQsIHNvIEFDUElfSEFORExFIHJldHVybnMgTlVMTC4gQ29uc2VxdWVudGx5LCB0aGUgQUNQSSByZWFkaW5nIGZhaWxzLCB0aGUgY291bnRyeWxpc3QgaXMgbmV2ZXIgcG9wdWxhdGVkLCBhbmQgdGhlIG1vZGlmaWVkIHBhcnNpbmcgZnVuY3Rpb25zIHJldHVybiBlYXJseSwgbWFraW5nIHRoaXMgY29kZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflownk8h7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 12:47:42 +0000 UTC FinishedAt: 2026-07-25 13:38:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEFDUEkgU0FSIChTcGVjaWZpYyBBYnNvcnB0aW9uIFJhdGUpIHBhcnNpbmcgbG9naWMgZm9yIE1lZGlhdGVrIE1UNzkyeCBXaS1GaSBjYXJkcy4gVGhpcyBjb2RlIHJlbGllcyBvbiByZXRyaWV2aW5nIHRoZSBBQ1BJIGNvbXBhbmlvbiBkZXZpY2UgdmlhIEFDUElfSEFORExFKG1kZXYtXHUwMDNlZGV2KSB0byByZWFkIHRoZSBBQ1BJIHRhYmxlcy4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZHluYW1pY2FsbHkgY3JlYXRlZCBVU0Igb3IgUENJZSBkZXZpY2VzIGRvIG5vdCBoYXZlIEFDUEkgbm9kZXMgaW4gdGhlIERTRFQsIHNvIEFDUElfSEFORExFIHJldHVybnMgTlVMTC4gQ29uc2VxdWVudGx5LCB0aGUgQUNQSSByZWFkaW5nIGZhaWxzLCB0aGUgY291bnRyeWxpc3QgaXMgbmV2ZXIgcG9wdWxhdGVkLCBhbmQgdGhlIG1vZGlmaWVkIHBhcnNpbmcgZnVuY3Rpb25zIHJldHVybiBlYXJseSwgbWFraW5nIHRoaXMgY29kZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGYyYTI0YWQ1MDU0ZWUwNWJlMmUzYzI0OWM4YTg0Y2M3ZDlhOGUwNGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMzozNjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuaW5kZXggOTQ2ZGQ3OTU2ZTRhMGQuLjg2OGZlYWRiZmY2MTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuQEAgLTM4OCw3ICYjNDM7Mzg4LDcgQEAgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfbWFwX3YzKGludCByb3csIGludCBjb2x1bW4sIHN0cnVjdCBtdDc5MnhfYXNhcl9jbF92MyAqY2wpXG4gXHR1MzIgY29uZmlnID0gMDtcbiBcdHU4IG1vZGVfYmUgPSAwO1xuIFxuLVx0bW9kZV9iZSA9IChjbC1cdTAwM2Vtb2RlX2JlIFx1MDAzZSAweDAyKSA/IDAgOiBjbC1cdTAwM2Vtb2RlX2JlO1xuJiM0MztcdG1vZGVfYmUgPSAoY2wtXHUwMDNlbW9kZV9iZSBcdTAwM2UgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpID8gMCA6IGNsLVx1MDAzZW1vZGVfYmU7XG4gXG4gXHRpZiAoY2wtXHUwMDNldmVyc2lvbiBcdTAwM2UgMiBcdTAwMjZcdTAwMjYgY2wtXHUwMDNlY2xiZVtyb3ddIFx1MDAyNiBCSVQoY29sdW1uKSlcbiBcdFx0Y29uZmlnIHw9IChtb2RlX2JlIFx1MDAyNiAweDMpIFx1MDAzY1x1MDAzYyA0O1xuQEAgLTQwMiwxMCAmIzQzOzQwMiwxMCBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXAoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsICpjbClcbiBcdHUzMiBjb25maWcgPSAwO1xuIFx0dTggbW9kZV82ZywgbW9kZV81Zzk7XG4gXG4tXHRtb2RlXzZnID0gKGNsLVx1MDAzZW1vZGVfNmcgXHUwMDNlIDB4MDIpID8gMCA6IGNsLVx1MDAzZW1vZGVfNmc7XG4tXHRtb2RlXzVnOSA9IChjbC1cdTAwM2Vtb2RlXzVnOSBcdTAwM2UgMHgwMSkgPyAwIDogY2wtXHUwMDNlbW9kZV81Zzk7XG4mIzQzO1x0bW9kZV82ZyA9IChjbC1cdTAwM2Vtb2RlXzZnIFx1MDAzZSBNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVCkgPyAwIDogY2wtXHUwMDNlbW9kZV82ZztcbiYjNDM7XHRtb2RlXzVnOSA9IChjbC1cdTAwM2Vtb2RlXzVnOSBcdTAwM2UgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0VOQUJMRSkgPyAwIDogY2wtXHUwMDNlbW9kZV81Zzk7XG4gXG4tXHRpZiAoKGNsLVx1MDAzZWNsNmdbcm93XSBcdTAwMjYgQklUKGNvbHVtbikpIHx8IGNsLVx1MDAzZW1vZGVfNmcgPT0gMHgwMilcbiYjNDM7XHRpZiAoKGNsLVx1MDAzZWNsNmdbcm93XSBcdTAwMjYgQklUKGNvbHVtbikpIHx8IGNsLVx1MDAzZW1vZGVfNmcgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpXG4gXHRcdGNvbmZpZyB8PSAobW9kZV82ZyBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgMjtcbiBcdGlmIChjbC1cdTAwM2V2ZXJzaW9uIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBjbC1cdTAwM2VjbDVnOVtyb3ddIFx1MDAyNiBCSVQoY29sdW1uKSlcbiBcdFx0Y29uZmlnIHw9IChtb2RlXzVnOSBcdTAwMjYgMHgzKTtcbkBAIC00MjYsNiAmIzQzOzQyNiw5IEBAIG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbiBcdGlmICghY2wpXG4gXHRcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XG4gXG4mIzQzO1x0aWYgKGNsLVx1MDAzZW1vZGVfYmUgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYmUpOyBpJiM0MzsmIzQzOykge1xuIFx0XHRjb2wgPSA3IC0gaSAlIDg7XG4gXHRcdHJvdyA9IGkgLyA4O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG5pbmRleCA0NzQwMzMwNzM4MzE1OC4uMTEwZjY4NDM4ZDkwMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG5AQCAtMTcsNiAmIzQzOzE3LDEzIEBAXG4gXG4gI2RlZmluZSBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSURcdDB4ZmZmZmZmZmZcbiBcbiYjNDM7LyogTVRDTCBwZXItYmFuZCBjb250cm9sIG1vZGUgKG1vZGVfNmcvbW9kZV81ZzkvbW9kZV9iZSkgKi9cbiYjNDM7ZW51bSB7XG4mIzQzO1x0TVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RJU0FCTEVcdD0gMHgwMCxcdC8qIGZvcmNlIGRpc2FibGUgKi9cbiYjNDM7XHRNVDc5MlhfQUNQSV9NVENMX01PREVfRU5BQkxFXHQ9IDB4MDEsXHQvKiBlbmFibGUgaWYgZHJpdmVyIFx1MDAyNiBCSU9TIHN1cHBvcnQgKi9cbiYjNDM7XHRNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVFx0PSAweDAyLFx0Lyogc3VwcG9ydGluZyBkZXBlbmRzIG9uIGRyaXZlciBzZXR0aW5nICovXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBtdDc5MnhfYXNhcl9keW5fbGltaXQge1xuIFx0dTggaWR4O1xuIFx0dTggZnJwWzVdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBBQ1BJIFNBUiAoU3BlY2lmaWMgQWJzb3JwdGlvbiBSYXRlKSBwYXJzaW5nIGxvZ2ljIGZvciBNZWRpYXRlayBNVDc5MnggV2ktRmkgY2FyZHMuIFRoaXMgY29kZSByZWxpZXMgb24gcmV0cmlldmluZyB0aGUgQUNQSSBjb21wYW5pb24gZGV2aWNlIHZpYSBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldikgdG8gcmVhZCB0aGUgQUNQSSB0YWJsZXMuIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGR5bmFtaWNhbGx5IGNyZWF0ZWQgVVNCIG9yIFBDSWUgZGV2aWNlcyBkbyBub3QgaGF2ZSBBQ1BJIG5vZGVzIGluIHRoZSBEU0RULCBzbyBBQ1BJX0hBTkRMRSByZXR1cm5zIE5VTEwuIENvbnNlcXVlbnRseSwgdGhlIEFDUEkgcmVhZGluZyBmYWlscywgdGhlIGNvdW50cnlsaXN0IGlzIG5ldmVyIHBvcHVsYXRlZCwgYW5kIHRoZSBtb2RpZmllZCBwYXJzaW5nIGZ1bmN0aW9ucyByZXR1cm4gZWFybHksIG1ha2luZyB0aGlzIGNvZGUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMmEyNGFkNTA1NGVlMDViZTJlM2MyNDljOGE4NGNjN2Q5YThlMDRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMTM6MzY6MzggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYwppbmRleCA5NDZkZDc5NTZlNGEwZC4uODY4ZmVhZGJmZjYxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYwpAQCAtMzg4LDcgJiM0MzszODgsNyBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjbCkKIAl1MzIgY29uZmlnID0gMDsKIAl1OCBtb2RlX2JlID0gMDsKIAotCW1vZGVfYmUgPSAoY2wtJmd0O21vZGVfYmUgJmd0OyAweDAyKSA/IDAgOiBjbC0mZ3Q7bW9kZV9iZTsKJiM0MzsJbW9kZV9iZSA9IChjbC0mZ3Q7bW9kZV9iZSAmZ3Q7IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKSA/IDAgOiBjbC0mZ3Q7bW9kZV9iZTsKIAogCWlmIChjbC0mZ3Q7dmVyc2lvbiAmZ3Q7IDIgJmFtcDsmYW1wOyBjbC0mZ3Q7Y2xiZVtyb3ddICZhbXA7IEJJVChjb2x1bW4pKQogCQljb25maWcgfD0gKG1vZGVfYmUgJmFtcDsgMHgzKSAmbHQ7Jmx0OyA0OwpAQCAtNDAyLDEwICYjNDM7NDAyLDEwIEBAIG10NzkyeF9hY3BpX2dldF9tdGNsX21hcChpbnQgcm93LCBpbnQgY29sdW1uLCBzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2wgKmNsKQogCXUzMiBjb25maWcgPSAwOwogCXU4IG1vZGVfNmcsIG1vZGVfNWc5OwogCi0JbW9kZV82ZyA9IChjbC0mZ3Q7bW9kZV82ZyAmZ3Q7IDB4MDIpID8gMCA6IGNsLSZndDttb2RlXzZnOwotCW1vZGVfNWc5ID0gKGNsLSZndDttb2RlXzVnOSAmZ3Q7IDB4MDEpID8gMCA6IGNsLSZndDttb2RlXzVnOTsKJiM0MzsJbW9kZV82ZyA9IChjbC0mZ3Q7bW9kZV82ZyAmZ3Q7IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKSA/IDAgOiBjbC0mZ3Q7bW9kZV82ZzsKJiM0MzsJbW9kZV81ZzkgPSAoY2wtJmd0O21vZGVfNWc5ICZndDsgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0VOQUJMRSkgPyAwIDogY2wtJmd0O21vZGVfNWc5OwogCi0JaWYgKChjbC0mZ3Q7Y2w2Z1tyb3ddICZhbXA7IEJJVChjb2x1bW4pKSB8fCBjbC0mZ3Q7bW9kZV82ZyA9PSAweDAyKQomIzQzOwlpZiAoKGNsLSZndDtjbDZnW3Jvd10gJmFtcDsgQklUKGNvbHVtbikpIHx8IGNsLSZndDttb2RlXzZnID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKQogCQljb25maWcgfD0gKG1vZGVfNmcgJmFtcDsgMHgzKSAmbHQ7Jmx0OyAyOwogCWlmIChjbC0mZ3Q7dmVyc2lvbiAmZ3Q7IDEgJmFtcDsmYW1wOyBjbC0mZ3Q7Y2w1Zzlbcm93XSAmYW1wOyBCSVQoY29sdW1uKSkKIAkJY29uZmlnIHw9IChtb2RlXzVnOSAmYW1wOyAweDMpOwpAQCAtNDI2LDYgJiM0Mzs0MjYsOSBAQCBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpCiAJaWYgKCFjbCkKIAkJcmV0dXJuIE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRDsKIAomIzQzOwlpZiAoY2wtJmd0O21vZGVfYmUgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShjY19saXN0X2JlKTsgaSYjNDM7JiM0MzspIHsKIAkJY29sID0gNyAtIGkgJSA4OwogCQlyb3cgPSBpIC8gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oCmluZGV4IDQ3NDAzMzA3MzgzMTU4Li4xMTBmNjg0MzhkOTAwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oCkBAIC0xNyw2ICYjNDM7MTcsMTMgQEAKIAogI2RlZmluZSBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQJMHhmZmZmZmZmZgogCiYjNDM7LyogTVRDTCBwZXItYmFuZCBjb250cm9sIG1vZGUgKG1vZGVfNmcvbW9kZV81ZzkvbW9kZV9iZSkgKi8KJiM0MztlbnVtIHsKJiM0MzsJTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RJU0FCTEUJPSAweDAwLAkvKiBmb3JjZSBkaXNhYmxlICovCiYjNDM7CU1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9FTkFCTEUJPSAweDAxLAkvKiBlbmFibGUgaWYgZHJpdmVyICZhbXA7IEJJT1Mgc3VwcG9ydCAqLwomIzQzOwlNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVAk9IDB4MDIsCS8qIHN1cHBvcnRpbmcgZGVwZW5kcyBvbiBkcml2ZXIgc2V0dGluZyAqLwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgbXQ3OTJ4X2FzYXJfZHluX2xpbWl0IHsKIAl1OCBpZHg7CiAJdTggZnJwWzVdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDgzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdpRmkgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY2AuIEl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgY2xlYW5pbmcgdXAgc29tZSBtYWdpYyBudW1iZXJzIHJlbGF0ZWQgdG8gQUNQSSBTQVIgcGFyc2luZyBmb3IgdGhlIE1UNzkyeCB3aXJlbGVzcyBjYXJkcy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSByZXBsYWNpbmcgdGhvc2UgbnVtYmVycyB3aXRoIGVudW0gdmFsdWVzOiBgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFRgIGFuZCBgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0VOQUJMRWAuICBUaGV5JiMzOTt2ZSBhbHNvIGFkZGVkIGEgY2hlY2sgaW4gYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB0byBzaG9ydC1jaXJjdWl0IGlmIGBjbC0mZ3Q7bW9kZV9iZWAgaXMgYE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUYC4gIFRoaXMgaXMgc3RhbmRhcmQgc3R1ZmYgZm9yIHRoaXMga2luZCBvZiBjbGVhbnVwLCBtYWtpbmcgdGhlIGNvZGUgbW9yZSByZWFkYWJsZSBhbmQgcG90ZW50aWFsbHkgbGVzcyBlcnJvci1wcm9uZS4KClRoZSBjb3JlIG9mIHRoaXMgaXMgQUNQSSBTQVIgcGFyc2luZy4gVGhlc2UgdGFibGVzIGFyZSBnZW5lcmFsbHkgcHJvdmlkZWQgYnkgdGhlIEJJT1Mgb3IgZmlybXdhcmUgYW5kIGFyZSBwYXJzZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiBvciBpbiByZXNwb25zZSB0byBBQ1BJIGV2ZW50cy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBJcyB0aGlzIGNvZGUgcGF0aCBldmVuIGFjY2Vzc2libGUgaW4gYSBRRU1VIGVudmlyb25tZW50PyBTeXprYWxsZXIgY2FuIHNvbWV0aW1lcyBpbmplY3QgQUNQSSB0YWJsZXMsIGJ1dCB1c3VhbGx5LCB0aGF0JiMzOTtzIHRhaWxvcmVkIHRvIHRoZSBoYXJkd2FyZS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIE1lZGlhdGVrIE1UNzkyeCwgYSBQQ0llL1NESU8vVVNCIFdpLUZpIGNhcmQsIGl0JiMzOTtzIHByb2JhYmx5IGZlYXNpYmxlIHRvIGV4ZXJjaXNlIHRoaXMgY29kZSB3aXRoIGNhcmVmdWxseSBjcmFmdGVkIEFDUEkgZGF0YS4KCk5vdywgaG93IGNhbiBJIGZ1enogdGhpcz8gIExldCYjMzk7cyBzZWXigKYgVGhlIGtleSBmdW5jdGlvbiBtb2RpZmllZCBpcyBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIHRvIHNlZSB3aGF0IHRyaWdnZXJzIGl0IGFuZCB0aGVuIGV4cGxvcmUgdGhlIHBvdGVudGlhbCBvZiBmdXp6aW5nIHRoYXQgZW50cnkgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTY9c3RhdGljIHUzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0MTc6bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MTgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDcyPXUzMiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDgwOlx0Y29uZmlnID0gbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMocGh5LCBhbHBoYTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00ODEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipUcmFjaW5nIHRoZSBDb25maWd1cmF0aW9uIEFjcXVpc2l0aW9uKioKClJpZ2h0LCBgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZmAgaXMgdGhlIGZ1bmN0aW9uIG9mIGludGVyZXN0LiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCAqd2h5KiBhbmQgKndoZW4qIHRoaXMgZnVuY3Rpb24gZ2V0cyBpbnZva2VkLiBTbywgbXkgbWVudGFsIG1hcCBub3cgbmVlZHMgdG8gZXhwYW5kIHRvIGlkZW50aWZ5IHRoZSBjYWxsZXJzIG9mIGBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRyb2wgZmxvdywgc28gSSYjMzk7bGwgc3RhcnQgYnkgbG9va2luZyBmb3IgaXRzIGludm9jYXRpb25zLiBLbm93aW5nIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGFyZ2VyIHN5c3RlbSBjb250ZXh0IGFuZCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBhY2Nlc3NlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsIGdyYXBoIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYz0xMzA2PWludCBfX210NzkyMV9tY3Vfc2V0X2NsYyhzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqYWxwaGEyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jLTEzMzItXHRcdC5hY3BpX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfZmxhZ3MoXHUwMDI2ZGV2LVx1MDAzZXBoeSksXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYzoxMzMzOlx0XHQubXRjbF9jb25mID0gbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZihcdTAwMjZkZXYtXHUwMDNlcGh5LCBhbHBoYTIpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbWN1LmMtMTMzNC1cdH07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jPTIxPXZvaWQgbXQ3OTI1X3JlZ2RfYmVfY3RybChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqYWxwaGEyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYy0yNi1cdGJvb2wgb2xkID0gZGV2LVx1MDAzZWhhc19laHQsIG5ldyA9IHRydWU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM6Mjc6XHR1MzIgbXRjbF9jb25mID0gbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZihcdTAwMjZkZXYtXHUwMDNlcGh5LCBhbHBoYTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTI4LVx0dTggKnBvcztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM9Njc9bXQ3OTI1X3JlZ2RfY2hhbm5lbF91cGRhdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG10NzkyeF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtNzUtXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jOjc2Olx0dTMyIG10Y2xfY29uZiA9IG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoXHUwMDI2ZGV2LVx1MDAzZXBoeSwgbWRldi1cdTAwM2VhbHBoYTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTc3LVx0aW50IGk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD01NTI9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaDo1NTM6dTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4LmgtNTU0LSNlbHNlXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD01NjY9c3RhdGljIGlubGluZSB1OCBtdDc5MnhfYWNwaV9nZXRfZmxhZ3Moc3RydWN0IG10NzkyeF9waHkgKnBoeSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeC5oLTU3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4Lmg6NTcxOnN0YXRpYyBpbmxpbmUgdTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaC01NzIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDQ5PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDcyOnUzMiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDczLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ4OC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQ4OTpFWFBPUlRfU1lNQk9MX0dQTChtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjYxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uc2lkZXJpbmcgTVQ3OTIxL01UNzkyNSBXaS1GaSBDYXJkIEVtdWxhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgTVQ3OTIxIGFuZCBNVDc5MjUgV2ktRmkgY2FyZHMgZnJvbSBNZWRpYXRlay4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgZW11bGF0ZSB0aGVzZT8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGUgTVQ3OTIxIGFwcGVhcnMgdG8gYmUgYSBQQ0llL1VTQi9TRElPIGRldmljZSwgd2hpY2ggaW1tZWRpYXRlbHkgZ2l2ZXMgdXMgYSBmZXcgcG9pbnRzIG9mIGVudHJ5IHRvIGV4cGxvcmUuIFRoZW4gSSByZW1lbWJlcmVkIHN5emthbGxlciBoYXMgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLiBJbnRlcmVzdGluZy4uLiBkb2VzIHRoZSBNVDc5MjEgZXZlbiAqaGF2ZSogYSBVU0IgZHJpdmVyPyBUaGF0JiMzOTtzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIEkgbmVlZCB0byBjb25maXJtLiBLbm93aW5nIHRoYXQgd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCB0aGUgdmlhYmlsaXR5IG9mIHVzaW5nIFVTQiBmdXp6aW5nIGFzIGFuIGVtdWxhdGlvbiB2ZWN0b3IuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRyaXZlciBsYW5kc2NhcGUgZm9yIHRoYXQgY2FyZCBzcGVjaWZpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTIxdSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZT01PW9iai0kKENPTkZJR19NVDc5MjFTKSAmIzQzOz0gbXQ3OTIxcy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19NVDc5MjFVKSAmIzQzOz0gbXQ3OTIxdS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZS03LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlPTExPW10NzkyMXMteSA6PSBzZGlvLm8gc2Rpb19tYWMubyBzZGlvX21jdS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZToxMjptdDc5MjF1LXkgOj0gdXNiLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjE1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdDc5MjF1X2RldmljZV90YWJsZVtdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMTYtXHR7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGU4ZCwgMHg3OTAyLCAweGZmLCAweGZmLCAweGZmKSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYz0zNT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNjptdDc5MjF1X21jdV9zZW5kX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzctXHRcdFx0IGludCBjbWQsIGludCAqc2VxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTY0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6NjU6c3RhdGljIGludCBtdDc5MjF1X21jdV9pbml0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy02Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtNzAtXHRcdC50YWlscm9vbSA9IE1UX1VTQl9UQUlMX1NJWkUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzo3MTpcdFx0Lm1jdV9za2Jfc2VuZF9tc2cgPSBtdDc5MjF1X21jdV9zZW5kX21lc3NhZ2UsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy03Mi1cdFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzkyMV9tY3VfcGFyc2VfcmVzcG9uc2UsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzo4OTpzdGF0aWMgaW50IG10NzkyMXVfbWFjX3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy05MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMTQ5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MTUwOnN0YXRpYyBpbnQgbXQ3OTIxdV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNTEtXHRcdFx0IGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNzEtXHRzdGF0aWMgY29uc3Qgc3RydWN0IG10NzkyeF9oaWZfb3BzIGhpZl9vcHMgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoxNzI6XHRcdC5tY3VfaW5pdCA9IG10NzkyMXVfbWN1X2luaXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNzMtXHRcdC5pbml0X3Jlc2V0ID0gbXQ3OTJ4dV9pbml0X3Jlc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MTc0Olx0XHQucmVzZXQgPSBtdDc5MjF1X21hY19yZXNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTE3NS1cdH07XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMjYzLSNpZmRlZiBDT05GSUdfUE1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjI2NDpzdGF0aWMgaW50IG10NzkyMXVfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IHN0YXRlKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMjY1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0yOTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoyOTE6c3RhdGljIGludCBtdDc5MjF1X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTI5Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzMzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzM0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBtdDc5MjF1X2RldmljZV90YWJsZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zMzUtTU9EVUxFX0ZJUk1XQVJFKE1UNzkyMV9GSVJNV0FSRV9XTSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYz0zMzY9TU9EVUxFX0ZJUk1XQVJFKE1UNzkyMV9ST01fUEFUQ0gpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzM4OnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtdDc5MjF1X2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTMzOS1cdC5uYW1lXHRcdD0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNDA6XHQuaWRfdGFibGVcdD0gbXQ3OTIxdV9kZXZpY2VfdGFibGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNDE6XHQucHJvYmVcdFx0PSBtdDc5MjF1X3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzQyLVx0LmRpc2Nvbm5lY3RcdD0gbXQ3OTJ4dV9kaXNjb25uZWN0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzQzLSNpZmRlZiBDT05GSUdfUE1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjM0NDpcdC5zdXNwZW5kXHQ9IG10NzkyMXVfc3VzcGVuZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjM0NTpcdC5yZXN1bWVcdFx0PSBtdDc5MjF1X3Jlc3VtZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjM0NjpcdC5yZXNldF9yZXN1bWVcdD0gbXQ3OTIxdV9yZXN1bWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zNDctI2VuZGlmIC8qIENPTkZJR19QTSAqL1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM1MC19O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzUxOm1vZHVsZV91c2JfZHJpdmVyKG10NzkyMXVfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM1Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgYSBVU0IgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIHNvIEkgc2VlIGEgVVNCIGRyaXZlciBmb3IgdGhlIE1UNzkyMSwgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIEJ1dCBob2xkIG9uLCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGluIGBtdDc5MnhfYWNwaV9zYXIuY2A/IFRoYXQmIzM5O3MgYSBiaXQgb2RkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBBQ1BJIFNBUiAoU3BlY2lmaWMgQWJzb3JwdGlvbiBSYXRlKSBpcyB0eXBpY2FsbHkgYXNzb2NpYXRlZCB3aXRoIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHRoZXJtYWwgcmVndWxhdGlvbiwgb2Z0ZW4gbGlua2VkIHRvIGJhdHRlcnktcG93ZXJlZCBkZXZpY2VzIG9yIHRob3NlIHdpdGggcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBoZWF0IGdlbmVyYXRpb24uIEkgd291bGRuJiMzOTt0IGluc3RpbmN0aXZlbHkgY29ubmVjdCBBQ1BJIFNBUiBkaXJlY3RseSB0byBhIFVTQiBkZXZpY2UsIHRob3VnaCB0aGVyZSBtaWdodCBiZSBhIHJlYXNvbiBmb3IgdGhpcyBJJiMzOTttIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgQUNQSSB0YWJsZSBkYXRhLCBzaW5jZSB0aGlzIGlzIHdoZXJlIHRoZSBsaW5rIGJldHdlZW4gQUNQSSBhbmQgdGhlIFVTQiBkZXZpY2Ugd291bGQgYmUgZXN0YWJsaXNoZWQgaWYgaXQgZXhpc3RzLiBLbm93aW5nIHRoZSByZXRyaWV2YWwgbWV0aG9kIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gSXMgdGhpcyB0YWJsZSB1c2VkIHRvIGNvbmZpZ3VyZSBkZXZpY2UgcG93ZXIgc3RhdGVzIG9uIFVTQiBkZXZpY2VzLCBvciBpcyBpdCBnZXR0aW5nIGNhbGxlZCBpbiBlcnJvcj8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTY9c3RhdGljIHUzMlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0MTc6bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MTgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDcyPXUzMiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDgwOlx0Y29uZmlnID0gbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMocGh5LCBhbHBoYTIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00ODEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MDgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIE1UNzkyeCBBQ1BJIFRhYmxlIFBhcnNpbmcqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byB1bmRlcnN0YW5kIHRoZSBzdHJ1Y3R1cmUgb2YgdGhpcyByb3V0aW5lLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIEFDUEkgdGFibGUuIElzIGl0IGEgd2VsbC1kZWZpbmVkIHN0cnVjdHVyZSBvciBzb21ldGhpbmcgbW9yZSBhZC1ob2M/IEdpdmVuIHRoZSB2ZXJzaW9uIG51bWJlciAodjMpLCB0aGVyZSYjMzk7cyBsaWtlbHkgZXZvbHV0aW9uIGluIHRoZSB0YWJsZSBmb3JtYXQgdG8gY29uc2lkZXIsIGFuZCB0aGVyZWZvcmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKG9yIHRoZSBsYWNrIHRoZXJlb2YpIHdpbGwgYmUgaW1wb3J0YW50IHRvIGdyYXNwLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBkYXRhIGlzIGJlaW5nIGV4dHJhY3RlZDogaXMgdGhpcyBwcmltYXJpbHkgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBhcmUgdGhlIGtleSBmaWVsZHMgdGhlIGRyaXZlciByZWxpZXMgdXBvbj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMg4oCTIHRoaW5ncyBsaWtlIGFzc3VtaW5nIHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9uIGxldmVscywgaW5jb3JyZWN0IGxlbmd0aCBjYWxjdWxhdGlvbnMsIG9yIGJ5dGUtb3JkZXIgaXNzdWVzIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgd2lsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVycm9yLWhhbmRsaW5nIGFuZCBob3cgZ3JhY2VmdWxseSBpdCByZXNwb25kcyB0byBjb3JydXB0ZWQgb3IgbWlzc2luZyBkYXRhIHdpdGhpbiB0aGUgdGFibGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHZhbGlkYXRpb24gY2hlY2tzIGFyZSB0aG9yb3VnaCwgYW5kIGhvdyB0aGV5IHJlcG9ydC9oYW5kbGUgZXJyb3JzLiBGaW5hbGx5LCB3aGF0JiMzOTtzIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgQUNQSSBtZXRob2RzIG9yIHN0cnVjdHVyZXMgdG8gZXN0YWJsaXNoIHBvd2VyIHN0YXRlcyBvciBvdGhlciBmdW5jdGlvbmFsaXR5PyBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIHRoZSBjb2RlIGxvZ2ljIGFuZCBhbnkgYXNzdW1wdGlvbnMgd2l0aGluLCBzbyBJIGNhbiBwcmVkaWN0IGhvdyBpdCYjMzk7bGwgYmVoYXZlIGluIHJlYWwtd29ybGQgc2NlbmFyaW9zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxMDpcdFx0aWYgKGNsLVx1MDAzZXZlcnNpb24gXHUwMDNlIDEgXHUwMDI2XHUwMDI2IGNsLVx1MDAzZWNsNWc5W3Jvd10gXHUwMDI2IEJJVChjb2x1bW4pKVxuIDQxMTpcdFx0XHRjb25maWcgfD0gKG1vZGVfNWc5IFx1MDAyNiAweDMpO1xuIDQxMjpcdFxuIDQxMzpcdFx0cmV0dXJuIGNvbmZpZztcbiA0MTQ6XHR9XG4gNDE1Olx0XG4gNDE2Olx0c3RhdGljIHUzMlxuIDQxNzpcdG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbiA0MTg6XHR7XG4gNDE5Olx0XHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbiA0MjA6XHRcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbF92MyAqY2wgPSBzYXItXHUwMDNlY291bnRyeWxpc3RfdjM7XG4gNDIxOlx0XHRpbnQgY29sLCByb3csIGk7XG4gNDIyOlx0XG4gNDIzOlx0XHRpZiAoc2FyLVx1MDAzZXZlciAhPSAzKVxuIDQyNDpcdFx0XHRnb3RvIG91dDtcbiA0MjU6XHRcbiA0MjY6XHRcdGlmICghY2wpXG4gNDI3Olx0XHRcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XG4gNDI4Olx0XG4gNDI5Olx0XHRpZiAoY2wtXHUwMDNlbW9kZV9iZSA9PSBNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVClcbiA0MzA6XHRcdFx0Z290byBvdXQ7XG4gNDMxOlx0XG4gNDMyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYmUpOyBpJiM0MzsmIzQzOykge1xuIDQzMzpcdFx0XHRjb2wgPSA3IC0gaSAlIDg7XG4gNDM0Olx0XHRcdHJvdyA9IGkgLyA4O1xuIDQzNTpcdFx0XHRpZiAoIW1lbWNtcChjY19saXN0X2JlW2ldLCBhbHBoYTIsIDIpKVxuIDQzNjpcdFx0XHRcdHJldHVybiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMocm93LCBjb2wsIGNsKTtcbiA0Mzc6XHRcdH1cbiA0Mzg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY2NfbGlzdF9ldSk7IGkmIzQzOyYjNDM7KSB7XG4gNDM5Olx0XHRcdGlmICghbWVtY21wKGNjX2xpc3RfZXVbaV0sIGFscGhhMiwgMikpXG4gNDQwOlx0XHRcdFx0cmV0dXJuIG10NzkyeF9hY3BpX2dldF9tdGNsX21hcF92MygzLCA3LCBjbCk7XG4gNDQxOlx0XHR9XG4gNDQyOlx0XG4gNDQzOlx0b3V0OlxuIDQ0NDpcdFx0LyogRGVwZW5kcyBvbiBkcml2ZXIgKi9cbiA0NDU6XHRcdHJldHVybiAweDIwO1xuIDQ0NjpcdH1cbiA0NDc6XHRcbiA0NDg6XHRzdGF0aWMgdTMyXG4gNDQ5Olx0bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90Ymwoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuIDQ1MDpcdHtcbiA0NTE6XHRcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cdTAwM2VhY3Bpc2FyO1xuIDQ1MjpcdFx0c3RydWN0IG10NzkyeF9hc2FyX2NsICpjbCA9IHNhci1cdTAwM2Vjb3VudHJ5bGlzdDtcbiA0NTM6XHRcdGludCBjb2wsIHJvdywgaTtcbiA0NTQ6XHRcbiA0NTU6XHRcdGlmICghY2wpXG4gNDU2Olx0XHRcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XG4gNDU3Olx0XG4gNDU4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYWxsKTsgaSYjNDM7JiM0MzspIHtcbiA0NTk6XHRcdFx0Y29sID0gNyAtIGkgJSA4O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTYwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBwaHktJmd0O2FjcGlzYXJgIFZhbHVlKioKCkFscmlnaHQsIHRoZSBjb2RlJiMzOTtzIHB1bGxpbmcgZGF0YSBmcm9tIGBwaHktJmd0O2FjcGlzYXJgLiBDbGFzc2ljLiBCdXQgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSB0aGUgaGVsbCBpcyBgYWNwaXNhcmAgZ2V0dGluZyBpdHMgdmFsdWU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSByYW5kb20gdmFyaWFibGU7IGl0JiMzOTtzIGxpa2VseSBjcnVjaWFsIGZvciBzb21lIGhhcmR3YXJlIGludGVyYWN0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgYnVzIG9yIGRldmljZS4gSXMgaXQgYSByZWdpc3RlciByZWFkLCBzb21ldGhpbmcgZGVyaXZlZCBmcm9tIGEgbW9yZSBjb21wbGV4IGNhbGN1bGF0aW9uLCBvciBwZXJoYXBzIGEgdmFsdWUgcGFzc2VkIGluIGZyb20gc29tZXdoZXJlIGVsc2UgZHVyaW5nIGluaXRpYWxpemF0aW9uPyBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgYXNzaWdubWVudC4gSSYjMzk7bSBob3BpbmcgaXQmIzM5O3MgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBhc3NpZ25tZW50LCBidXQga25vd2luZyBob3cgdGhlc2UgdGhpbmdzIHVzdWFsbHkgZ28sIEkmIzM5O20gcHJlcGFyZWQgZm9yIGEgcmFiYml0IGhvbGUuIExldCYjMzk7cyBzZWUuLi4gaXMgdGhlcmUgYSBjbGVhciBpbml0aWFsaXphdGlvbiBwYXRoPyBPciBhbSBJIGdvaW5nIHRvIGJlIGRpdmluZyBpbnRvIGludGVycnVwdCBoYW5kbGVycyBhbmQgQUNQSSB0YWJsZXM/IFRpbWUgdG8gc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWNwaXNhciA9JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9MTkzPWludCBtdDc5MnhfaW5pdF9hY3BpX3NhcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjI2LVx0fVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzoyMjc6XHRkZXYtXHUwMDNlcGh5LmFjcGlzYXIgPSBhc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMjgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zNDg9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM0OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjM1MDpcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFjcGlzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzUxLVx0c3RydWN0IG10NzkyeF9hc2FyX2ZnICpmZztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NzgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBgbXQ3OTJ4X2luaXRfYWNwaV9zYXJgLi4uKioKClJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCB0aGF0IGBtdDc5MnhfaW5pdF9hY3BpX3NhcmAgZnVuY3Rpb24uIEkmIzM5O20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBtb2R1bGUgaGFuZGxlcyBTcGVjaWZpYyBBYnNvcnB0aW9uIFJhdGUgKFNBUikgY29tcGxpYW5jZSB0aHJvdWdoIEFDUEkuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIE1UNzkyeCBzZXJpZXMsIHdoaWNoIG9mdGVuIGludGVncmF0ZXMgYm90aCBXaS1GaSBhbmQgQmx1ZXRvb3RoLCBTQVIgbWl0aWdhdGlvbiBiZWNvbWVzIGEgY29tcGxleCBqdWdnbGluZyBhY3Qgb2YgcG93ZXIgbGV2ZWxzIGFuZCByYWRpbyBjb250cm9sLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEFDUEkgdGFibGVzIGFyZSBwYXJzZWQgYW5kIGludGVycHJldGVkIHRvIGR5bmFtaWNhbGx5IGFkanVzdCB0aGUgdHJhbnNtaXQgcG93ZXIgdG8gc3RheSB3aXRoaW4gcmVndWxhdG9yeSBsaW1pdHMsIHBhcnRpY3VsYXJseSB3aGVuIHRoZSBkZXZpY2UgaXMgb3BlcmF0aW5nIG5lYXIgYSB1c2VyJiMzOTtzIGJvZHkuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGUgdHlwaWNhbCBBQ1BJIG1ldGhvZHMgaW52b2x2ZWQ6IGBfUFNWYCwgYF9TSU9gLCBwb3RlbnRpYWxseSBgX1BQRGAsIGFuZCBob3cgdGhleSYjMzk7cmUgdXNlZCB0byByZWFkIFNBUi1zcGVjaWZpYyBkYXRhLCBkZWZpbmUgcG93ZXIgc3RhdGVzLCBvciB0cmlnZ2VyIHJhZGlvIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhleSB1c2luZyB0aGUgc3RhbmRhcmQgU0FSIGNvbnRyb2wgbWV0aG9kcz8gT3IgaXMgaXQgYSBjdXN0b20gYXBwcm9hY2g/IEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBmaXJtd2FyZSDigJMgaG93IGRhdGEgaXMgcGFzc2VkIGJldHdlZW4gdGhlIEFDUEkgbGF5ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBmb3IgYW55IHBvd2VyLXNhdmluZyBzdHJhdGVnaWVzIGltcGxlbWVudGVkIGFsb25nc2lkZSBTQVIgY29udHJvbCwgYXMgdGhlc2Ugb2Z0ZW4gZ28gaGFuZC1pbi1oYW5kLiBGb3IgZXhhbXBsZSwgYXJlIHRoZXkgdXNpbmcgYSBzZXBhcmF0ZSBwb3dlciBkb21haW4gZm9yIHRoZSByYWRpbz8gQW5kIEkgZGVmaW5pdGVseSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgZXJyb3IgaGFuZGxpbmcgb3IgZmFsbGJhY2sgbWVjaGFuaXNtcyBpbiBjYXNlIHRoZSBBQ1BJIGRhdGEgaXMgbWFsZm9ybWVkIG9yIG1pc3NpbmcuIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBpZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgcm9idXN0IGFuZCB3ZWxsLWRlc2lnbmVkIGZvciByZWFsLXdvcmxkIHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdHJldHVybiAwO1xuIDE5MTpcdH1cbiAxOTI6XHRcbiAxOTM6XHRpbnQgbXQ3OTJ4X2luaXRfYWNwaV9zYXIoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbiAxOTQ6XHR7XG4gMTk1Olx0XHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyO1xuIDE5NjpcdFx0aW50IHJldDtcbiAxOTc6XHRcbiAxOTg6XHRcdGFzYXIgPSBkZXZtX2t6YWxsb2MoZGV2LVx1MDAzZW10NzYuZGV2LCBzaXplb2YoKmFzYXIpLCBHRlBfS0VSTkVMKTtcbiAxOTk6XHRcdGlmICghYXNhcilcbiAyMDA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjAxOlx0XG4gMjAyOlx0XHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbChkZXYsICh1OCAqKilcdTAwMjZhc2FyLVx1MDAzZWNvdW50cnlsaXN0LCBcdTAwMjZhc2FyLVx1MDAzZXZlcik7XG4gMjAzOlx0XHRpZiAocmV0KSB7XG4gMjA0Olx0XHRcdGRldm1fa2ZyZWUoZGV2LVx1MDAzZW10NzYuZGV2LCBhc2FyLVx1MDAzZWNvdW50cnlsaXN0KTtcbiAyMDU6XHRcdFx0YXNhci1cdTAwM2Vjb3VudHJ5bGlzdCA9IE5VTEw7XG4gMjA2Olx0XHR9XG4gMjA3Olx0XG4gMjA4Olx0XHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRkcyhkZXYsICh1OCAqKilcdTAwMjZhc2FyLVx1MDAzZWR5biwgYXNhci1cdTAwM2V2ZXIpO1xuIDIwOTpcdFx0aWYgKHJldCkge1xuIDIxMDpcdFx0XHRkZXZtX2tmcmVlKGRldi1cdTAwM2VtdDc2LmRldiwgYXNhci1cdTAwM2VkeW4pO1xuIDIxMTpcdFx0XHRhc2FyLVx1MDAzZWR5biA9IE5VTEw7XG4gMjEyOlx0XHR9XG4gMjEzOlx0XG4gMjE0Olx0XHQvKiBNVEdTIGlzIG9wdGlvbmFsICovXG4gMjE1Olx0XHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRncyhkZXYsICh1OCAqKilcdTAwMjZhc2FyLVx1MDAzZWdlbywgYXNhci1cdTAwM2V2ZXIpO1xuIDIxNjpcdFx0aWYgKHJldCkge1xuIDIxNzpcdFx0XHRkZXZtX2tmcmVlKGRldi1cdTAwM2VtdDc2LmRldiwgYXNhci1cdTAwM2VnZW8pO1xuIDIxODpcdFx0XHRhc2FyLVx1MDAzZWdlbyA9IE5VTEw7XG4gMjE5Olx0XHR9XG4gMjIwOlx0XG4gMjIxOlx0XHQvKiBNVEZHIGlzIG9wdGlvbmFsICovXG4gMjIyOlx0XHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRmZyhkZXYsICh1OCAqKilcdTAwMjZhc2FyLVx1MDAzZWZnKTtcbiAyMjM6XHRcdGlmIChyZXQpIHtcbiAyMjQ6XHRcdFx0ZGV2bV9rZnJlZShkZXYtXHUwMDNlbXQ3Ni5kZXYsIGFzYXItXHUwMDNlZmcpO1xuIDIyNTpcdFx0XHRhc2FyLVx1MDAzZWZnID0gTlVMTDtcbiAyMjY6XHRcdH1cbiAyMjc6XHRcdGRldi1cdTAwM2VwaHkuYWNwaXNhciA9IGFzYXI7XG4gMjI4Olx0XG4gMjI5Olx0XHRyZXR1cm4gMDtcbiAyMzA6XHR9XG4gMjMxOlx0RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTJ4X2luaXRfYWNwaV9zYXIpO1xuIDIzMjpcdFxuIDIzMzpcdHN0YXRpYyBzOFxuIDIzNDpcdG10NzkyeF9hc2FyX2dldF9nZW9fcHdyKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksXG4gMjM1Olx0XHRcdFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZCwgczggZHluX3Bvd2VyKVxuIDIzNjpcdHtcbiAyMzc6XHRcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbiAyMzg6XHRcdHN0cnVjdCBtdDc5MnhfYXNhcl9nZW9fYmFuZCAqYmFuZF9wd3I7XG4gMjM5Olx0XHRzOCBnZW9fcG93ZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODQ3CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipBQ1BJIFRhYmxlIEV4YW1pbmF0aW9uIC0gRm9jdXNlZCBvbiBNVDc5MnggQVNBUiAmYW1wOyBNVENMKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gdGhlIGBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbGAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgdGFibGUgcmVhZGVyLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQmIzM5O3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIEFDUEkgKEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSkgc3lzdGVtLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgaW5mb3JtYXRpb24gdGhhdCBpcyByZWxldmFudCB0bywgYW5kIGhvcGVmdWxseSwgY29udGFpbnMgaW1wb3J0YW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBNVDc5MnggY2hpcHNldCYjMzk7cyBBU0FSIChBZHZhbmNlZCBTeXN0ZW0gQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyKSBvciB0aGUgTVRDTCAoTWVkaWFUZWsgQ29udHJvbCBMYW5ndWFnZSkgc3RydWN0dXJlcy4KCkkmIzM5O20gbWFraW5nIHRoZSBhc3N1bXB0aW9uIHRoYXQgQVNBUiBsaWtlbHkgcmVsYXRlcyB0byBtb3JlIGhhcmR3YXJlLWxldmVsIGNvbmZpZ3VyYXRpb24sIHBlcmhhcHMgY2xvY2sgc2V0dGluZ3MsIHBvd2VyIG1hbmFnZW1lbnQgc3BlY2lmaWNzLCBvciBldmVuIG1lbW9yeSBtYXBwaW5ncyB1bmlxdWUgdG8gdGhlIE1UNzkyeCBpbXBsZW1lbnRhdGlvbi4gV2hpbGUgTVRDTCBwcm9iYWJseSBjb25maWd1cmVzIGFzcGVjdHMgb2YgTWVkaWFUZWstc3BlY2lmaWMgZmlybXdhcmUuCgpUaGUgc3RydWN0dXJlIG9mIHRoZSBBQ1BJIHRhYmxlcyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGVzZSB0YWJsZXMgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgc3RydWN0dXJlZC4gVGhlIEJJT1MmIzM5O3MgQUNQSSBpbXBsZW1lbnRhdGlvbiBpcyBsaWtlbHkgZ29pbmcgdG8gZGVmaW5lIHRoZSBsYXlvdXQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGl0JiMzOTtzIHVzaW5nIHN0YW5kYXJkIEFDUEkgbWV0aG9kcywgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMsIG9yIGEgY29tYmluYXRpb24gb2YgYm90aC4gSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBmb3IgdGhvc2UgcXVpcmtzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgY29kZSB0byBzZWUgd2hhdCBBQ1BJIG1ldGhvZHMgaXQmIzM5O3MgdXNpbmcsIGhvdyB0aGUgdGFibGUgaXMgcGFyc2VkIGFuZCB2YWxpZGF0ZWQsIGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgZXh0cmFjdGVkLiBUaGUgZnVuY3Rpb24mIzM5O3Mgcm9sZSBpbiB0aGUgZHJpdmVyIG9yIGZpcm13YXJlIGNvbnRleHQgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBoZXJlLiBXaGF0IG90aGVyIHNlY3Rpb25zIG9mIHRoZSBjb2RlIGNhbGwgdGhpcyBmdW5jdGlvbj8gRG9lcyBpdCBoYW5kbGUgZXJyb3IgY29uZGl0aW9ucyBncmFjZWZ1bGx5PyBJcyBpdCBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlPyBXaGF0IHNwZWNpZmljIHJlc291cmNlcyBhbmQvb3IgY29uZmlndXJhdGlvbnMgY2FuIGl0IGlkZW50aWZ5PyBUaG9zZSBhcmUgc29tZSBvZiB0aGUgcXVlc3Rpb25zIEkgYW0gYXNraW5nIG15c2VsZi4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgaXQgZXh0cmFjdHMgdGhlIEFTQVIgYW5kL29yIE1UQ0wtcmVsYXRlZCBkYXRhLCBhbmQgY3JpdGljYWxseSwgaG93IHRoYXQgZGF0YSBpcyB0aGVuIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxuICAgMjpcdC8qIENvcHlyaWdodCAoQykgMjAyMyBNZWRpYVRlayBJbmMuICovXG4gICAzOlx0XG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXCYjMzQ7bXQ3OTJ4LmhcJiMzNDtcbiAgIDY6XHRcbiAgIDc6XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjX2xpc3RfYWxsW10gPSB7XG4gICA4Olx0XHRcJiMzNDswMFwmIzM0OywgXCYjMzQ7RVVcJiMzNDssIFwmIzM0O0FSXCYjMzQ7LCBcJiMzNDtBVVwmIzM0OywgXCYjMzQ7QVpcJiMzNDssIFwmIzM0O0JZXCYjMzQ7LCBcJiMzNDtCT1wmIzM0OywgXCYjMzQ7QlJcJiMzNDssXG4gICA5Olx0XHRcJiMzNDtDQVwmIzM0OywgXCYjMzQ7Q0xcJiMzNDssIFwmIzM0O0NOXCYjMzQ7LCBcJiMzNDtJRFwmIzM0OywgXCYjMzQ7SlBcJiMzNDssIFwmIzM0O01ZXCYjMzQ7LCBcJiMzNDtNWFwmIzM0OywgXCYjMzQ7TUVcJiMzNDssXG4gIDEwOlx0XHRcJiMzNDtNQVwmIzM0OywgXCYjMzQ7TlpcJiMzNDssIFwmIzM0O05HXCYjMzQ7LCBcJiMzNDtQSFwmIzM0OywgXCYjMzQ7UlVcJiMzNDssIFwmIzM0O1JTXCYjMzQ7LCBcJiMzNDtTR1wmIzM0OywgXCYjMzQ7S1JcJiMzNDssXG4gIDExOlx0XHRcJiMzNDtUV1wmIzM0OywgXCYjMzQ7VEhcJiMzNDssIFwmIzM0O1VBXCYjMzQ7LCBcJiMzNDtHQlwmIzM0OywgXCYjMzQ7VVNcJiMzNDssIFwmIzM0O1ZOXCYjMzQ7LCBcJiMzNDtLSFwmIzM0OywgXCYjMzQ7UFlcJiMzNDssXG4gIDEyOlx0fTtcbiAgMTM6XHRcbiAgMTQ6XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjX2xpc3RfZXVbXSA9IHtcbiAgMTU6XHRcdFwmIzM0O0FEXCYjMzQ7LCBcJiMzNDtBVFwmIzM0OywgXCYjMzQ7QkVcJiMzNDssIFwmIzM0O0JHXCYjMzQ7LCBcJiMzNDtDWVwmIzM0OywgXCYjMzQ7Q1pcJiMzNDssIFwmIzM0O0hSXCYjMzQ7LCBcJiMzNDtES1wmIzM0OyxcbiAgMTY6XHRcdFwmIzM0O0VFXCYjMzQ7LCBcJiMzNDtGSVwmIzM0OywgXCYjMzQ7RlJcJiMzNDssIFwmIzM0O0RFXCYjMzQ7LCBcJiMzNDtHUlwmIzM0OywgXCYjMzQ7SFVcJiMzNDssIFwmIzM0O0lTXCYjMzQ7LCBcJiMzNDtJRVwmIzM0OyxcbiAgMTc6XHRcdFwmIzM0O0lUXCYjMzQ7LCBcJiMzNDtMVlwmIzM0OywgXCYjMzQ7TElcJiMzNDssIFwmIzM0O0xUXCYjMzQ7LCBcJiMzNDtMVVwmIzM0OywgXCYjMzQ7TUNcJiMzNDssIFwmIzM0O01UXCYjMzQ7LCBcJiMzNDtOTFwmIzM0OyxcbiAgMTg6XHRcdFwmIzM0O05PXCYjMzQ7LCBcJiMzNDtQTFwmIzM0OywgXCYjMzQ7UFRcJiMzNDssIFwmIzM0O1JPXCYjMzQ7LCBcJiMzNDtTS1wmIzM0OywgXCYjMzQ7U0lcJiMzNDssIFwmIzM0O0VTXCYjMzQ7LCBcJiMzNDtTRVwmIzM0OyxcbiAgMTk6XHRcdFwmIzM0O0NIXCYjMzQ7LFxuICAyMDpcdH07XG4gIDIxOlx0XG4gIDIyOlx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY19saXN0X2JlW10gPSB7XG4gIDIzOlx0XHRcJiMzNDtBUlwmIzM0OywgXCYjMzQ7QlJcJiMzNDssIFwmIzM0O0JZXCYjMzQ7LCBcJiMzNDtDTFwmIzM0OywgXCYjMzQ7SVFcJiMzNDssIFwmIzM0O01YXCYjMzQ7LCBcJiMzNDtPTVwmIzM0OywgXCYjMzQ7UlVcJiMzNDssXG4gIDI0Olx0XHRcJiMzNDtSV1wmIzM0OywgXCYjMzQ7Vk5cJiMzNDssIFwmIzM0O0tSXCYjMzQ7LCBcJiMzNDtVQVwmIzM0OywgXCYjMzQ7XCYjMzQ7LCBcJiMzNDtcJiMzNDssIFwmIzM0O1wmIzM0OywgXCYjMzQ7XCYjMzQ7LFxuICAyNTpcdFx0XCYjMzQ7RVVcJiMzNDssIFwmIzM0O0FUXCYjMzQ7LCBcJiMzNDtDTlwmIzM0OywgXCYjMzQ7Q0FcJiMzNDssIFwmIzM0O1RXXCYjMzQ7LCBcJiMzNDtOWlwmIzM0OywgXCYjMzQ7UEhcJiMzNDssIFwmIzM0O1VLXCYjMzQ7LFxuICAyNjpcdFx0XCYjMzQ7VVNcJiMzNDssXG4gIDI3Olx0fTtcbiAgMjg6XHRcbiAgMjk6XHRzdGF0aWMgaW50XG4gIDMwOlx0bXQ3OTJ4X2FjcGlfcmVhZChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqbWV0aG9kLCB1OCAqKnRibCwgdTMyICpsZW4pXG4gIDMxOlx0e1xuICAzMjpcdFx0c3RydWN0IGFjcGlfYnVmZmVyIGJ1ZiA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTtcbiAgMzM6XHRcdHN0cnVjdCBtdDc2X2RldiAqbWRldiA9IFx1MDAyNmRldi1cdTAwM2VtdDc2O1xuICAzNDpcdFx0dW5pb24gYWNwaV9vYmplY3QgKnNhcl9yb290O1xuICAzNTpcdFx0YWNwaV9oYW5kbGUgcm9vdCwgaGFuZGxlO1xuICAzNjpcdFx0YWNwaV9zdGF0dXMgc3RhdHVzO1xuICAzNzpcdFx0dTMyIGkgPSAwO1xuICAzODpcdFx0aW50IHJldDtcbiAgMzk6XHRcbiAgNDA6XHRcdHJvb3QgPSBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldik7XG4gIDQxOlx0XHRpZiAoIXJvb3QpXG4gIDQyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAgNDM6XHRcbiAgNDQ6XHRcdHN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShyb290LCBtZXRob2QsIFx1MDAyNmhhbmRsZSk7XG4gIDQ1Olx0XHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpXG4gIDQ2Olx0XHRcdHJldHVybiAtRUlPO1xuICA0NzpcdFxuICA0ODpcdFx0c3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBOVUxMLCBOVUxMLCBcdTAwMjZidWYpO1xuICA0OTpcdFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKVxuICA1MDpcdFx0XHRyZXR1cm4gLUVJTztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMTUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEFDUEkgSGFuZGxlIFJldHJpZXZhbCBpbiBRRU1VIGFuZCBDb25zaWRlcmluZyBGdXp6aW5nIFN0cmF0ZWdpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgY2FsbGluZyBgYWNwaV9nZXRfaGFuZGxlKEFDUElfSEFORExFKG1kZXYtJmd0O2RldiksIG1ldGhvZCwgJmFtcDtoYW5kbGUpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIG1hbmlwdWxhdGUgdGhlIEFDUEkgdGFibGVzIHdpdGhpbiBRRU1VIHRvIGluZmx1ZW5jZSB0aGUgYmVoYXZpb3Igb2YgdGhpcyBVU0IgZGV2aWNlPyYjMzQ7IEluIHRoZW9yeSwgeWVzLCBidXQgc3l6a2FsbGVyIHR5cGljYWxseSBkb2VzbiYjMzk7dCBpbmplY3QgQUNQSSB0YWJsZXMgc3BlY2lmaWNhbGx5IGZvciBVU0IgZGV2aWNlcy4gV2UgKmNvdWxkKiB1c2UgYHN5el9tb3VudF9pbWFnZWAgb3Igc2ltaWxhciBnbG9iYWwgaW5qZWN0aW9uLCBidXQgdXN1YWxseSB0aGUgQUNQSSB0YWJsZXMgYXJlIHNldCB1bmxlc3Mgc3l6a2FsbGVyIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgQUNQSSBpbmplY3Rpb24uCgpIYW5nIG9uLi4uIGlzbiYjMzk7dCB0aGVyZSBzb21lIEFDUEkgZnV6emluZyBjYXBhYmlsaXR5IGluIHN5emthbGxlcj8gSXQmIzM5O3MgdXN1YWxseSBmb3IgcGxhdGZvcm0gZGV2aWNlcywgdGhvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGZvcmdldHRpbmcgc29tZXRoaW5nLiBBaCwgcmlnaHQuLi4gaWYgdGhlIHRhcmdldCBpcyBhY3R1YWxseSBhIFVTQiBkZXZpY2UsIGBBQ1BJX0hBTkRMRShtZGV2LSZndDtkZXYpYCB3aWxsICpsaWtlbHkqIGJlIE5VTEwsIHVubGVzcyB0aGUgRFNEVCBoYXJkY29kZXMgYW4gQUNQSSBoYW5kbGUgZm9yIHRoZSBVU0IgZGV2aWNlLCB3aGljaCBpcyB1bnVzdWFsLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gd2hhdCBpZiB0aGlzIGlzbiYjMzk7dCBVU0I/IENvdWxkIHRoaXMgYmUgUENJZT8gVGhlIGBtdDc5MjFlYCBkcml2ZXIuLi4gdGhhdCYjMzk7cyB0aGUgUENJZSBkcml2ZXIsIGlzbiYjMzk7dCBpdD8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBZZWFoLCBJIHRoaW5rIGl0IGlzLiBPa2F5LCBsZXQmIzM5O3MgY29uZmlybSBgbXQ3OTIxZWAgZXhpc3RzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyB0aGUgQUNQSSBoYW5kbGUgaXMgcmV0cmlldmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdDc5MjFlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlPTM9b2JqLSQoQ09ORklHX01UNzkyMV9DT01NT04pICYjNDM7PSBtdDc5MjEtY29tbW9uLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX01UNzkyMUUpICYjNDM7PSBtdDc5MjFlLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlLTUtb2JqLSQoQ09ORklHX01UNzkyMVMpICYjNDM7PSBtdDc5MjFzLm9cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZT05PW10NzkyMS1jb21tb24tJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgJiM0Mzs9IHRlc3Rtb2RlLm9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlOjEwOm10NzkyMWUteSA6PSBwY2kubyBwY2lfbWFjLm8gcGNpX21jdS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZS0xMS1tdDc5MjFzLXkgOj0gc2Rpby5vIHNkaW9fbWFjLm8gc2Rpb19tY3Uub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL210NzkyMS5oPTI3MT12b2lkIG10NzkyMV9tYWNfcmVzZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg6MjcyOmludCBtdDc5MjFlX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgdm9pZCAqdHh3aV9wdHIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaC0yNzMtXHRcdFx0ICAgZW51bSBtdDc2X3R4cV9pZCBxaWQsIHN0cnVjdCBtdDc2X3djaWQgKndjaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg9MzAzPWludCBtdDc5MjFfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaC0zMDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaDozMDY6aW50IG10NzkyMWVfZHJpdmVyX293bihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL210NzkyMS5oOjMwNzppbnQgbXQ3OTIxZV9tYWNfcmVzZXQoc3RydWN0IG10NzkyeF9kZXYgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaDozMDg6aW50IG10NzkyMWVfbWN1X2luaXQoc3RydWN0IG10NzkyeF9kZXYgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaC0zMDktaW50IG10NzkyMXNfd2ZzeXNfcmVzZXQoc3RydWN0IG10NzkyeF9kZXYgKmRldik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM9Mzc9TU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2FzcG0sIFwmIzM0O2Rpc2FibGUgUENJIEFTUE0gc3VwcG9ydFwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0zOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jOjM5OnN0YXRpYyBpbnQgbXQ3OTIxZV9pbml0X3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmMtNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzo0NDpzdGF0aWMgdm9pZCBtdDc5MjFlX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM9MjU5PXN0YXRpYyBpbnQgbXQ3OTIxX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0yNzAtXHRcdC50b2tlbl9zaXplID0gTVQ3OTIxX1RPS0VOX1NJWkUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzoyNzE6XHRcdC50eF9wcmVwYXJlX3NrYiA9IG10NzkyMWVfdHhfcHJlcGFyZV9za2IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0yNzItXHRcdC50eF9jb21wbGV0ZV9za2IgPSBtdDc2X2Nvbm5hY190eF9jb21wbGV0ZV9za2IsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmMtMjgyLVx0c3RhdGljIGNvbnN0IHN0cnVjdCBtdDc5MnhfaGlmX29wcyBtdDc5MjFfcGNpZV9vcHMgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzoyODM6XHRcdC5pbml0X3Jlc2V0ID0gbXQ3OTIxZV9pbml0X3Jlc2V0LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM6Mjg0Olx0XHQucmVzZXQgPSBtdDc5MjFlX21hY19yZXNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jOjI4NTpcdFx0Lm1jdV9pbml0ID0gbXQ3OTIxZV9tY3VfaW5pdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTI4Ni1cdFx0LmRydl9vd24gPSBtdDc5MnhlX21jdV9kcnZfcG1jdHJsLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jPTQ0Nz1zdGF0aWMgdm9pZCBtdDc5MjFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzo0NTU6XHRtdDc5MjFlX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NTYtXHRzZXRfYml0KE1UNzZfUkVNT1ZFRCwgXHUwMDI2bWRldi1cdTAwM2VwaHkuc3RhdGUpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy03LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jOjg6aW50IG10NzkyMWVfdHhfcHJlcGFyZV9za2Ioc3RydWN0IG10NzZfZGV2ICptZGV2LCB2b2lkICp0eHdpX3B0cixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy05LVx0XHRcdCAgIGVudW0gbXQ3Nl90eHFfaWQgcWlkLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy01NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYzo1NjppbnQgbXQ3OTIxZV9tYWNfcmVzZXQoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy01Ny17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jLTEwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYzoxMDI6XHRlcnIgPSBtdDc5MjFlX2RyaXZlcl9vd24oZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy0xMDMtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYy02LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jOjc6aW50IG10NzkyMWVfZHJpdmVyX293bihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYz0yMj1tdDc5MjFfbWN1X3NlbmRfbWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jOjQxOmludCBtdDc5MjFlX21jdV9pbml0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmMtNDIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYy01MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYzo1MjpcdGVyciA9IG10NzkyMWVfZHJpdmVyX293bihkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTUzLVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNDkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA2NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNVDc5MjEgUENJZSBEcml2ZXIgaW4gYSBTeXprYWxsZXIgQ29udGV4dCoqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBhIFBDSWUgZHJpdmVyIGZvciB0aGUgTVQ3OTIxLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0LCBJJiMzOTttIGltbWVkaWF0ZWx5IHJ1bm5pbmcgaW50byBhbiBBQ1BJIHJvYWRibG9jay4gVGhlIGNvZGUmIzM5O3MgdXNpbmcgYGFjcGlfZ2V0X2hhbmRsZWAgdG8gcGFyc2UgQUNQSSB0YWJsZXMsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBoYW5kbGVzLiBOb3csIGluIGEgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaXMgd2hhdCBTeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMsIFBDSWUgZGV2aWNlcyAqZG9uJiMzOTt0KiBoYXZlIEFDUEkgaGFuZGxlcyBieSBkZWZhdWx0LCB1bmxlc3MgdGhleSYjMzk7cmUgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSBEU0RULiBBbmQgU3l6a2FsbGVyLCBmcm9tIHdoYXQgSSYjMzk7dmUgc2VlbiwgZG9lc24mIzM5O3QgdXN1YWxseSBkZWZpbmUgTWVkaWF0ZWsgV2ktRmkgY2FyZHMgd2l0aGluIHRoYXQgRFNEVC4gU28sIHRoZSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGNvZGUgcGF0aCBtaWdodCBiZSB1bnJlYWNoYWJsZSBpbiBhIFN5emthbGxlci1kcml2ZW4gUUVNVSBzZXR1cC4KCkxldCYjMzk7cyB0cmFjZSBpdC4gSWYgYEFDUElfSEFORExFKG1kZXYtJmd0O2RldilgIGlzIE5VTEwsIHRoZSBgbXQ3OTJ4X2FjcGlfcmVhZGAgZnVuY3Rpb24gcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0IGZhaWx1cmUgY2FzY2FkZXMgdG8gYG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGNsYCwgd2hpY2ggYWxzbyByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoZW4sIHdpdGhpbiBgbXQ3OTJ4X2luaXRfYWNwaV9zYXJgLCB3ZSBzZWUgdGhhdCBlcnJvciBpcyBoYW5kbGVkLCB0aGUgYGNvdW50cnlsaXN0YCBpcyBzZXQgdG8gTlVMTCBpZiB0aGUgcmVhZCBmYWlscy4gTGF0ZXIsIHdlIHNlZSBpbiBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIHRoYXQgaWYgYHNhci0mZ3Q7Y291bnRyeWxpc3RfdjNgIGlzIE5VTEwsIGl0IHJldHVybnMgYE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRGAuCgpUaGVyZWZvcmUsIHRoZSBjb2RlIHByb2NlZWRzLiBBbmQgdGhlIGtleSBpcywgaWYgYHNhci0mZ3Q7Y291bnRyeWxpc3RfdjNgICppcyogTlVMTCwgdGhlbiB0aGUgY2hlY2sgb24gYGNsLSZndDttb2RlX2JlYCB3aWxsIGJlIHNraXBwZWQsIHdoaWNoIGltcGxpZXMgdGhlIEFDUEkgcmVhZCBzdWNjZWVkZWQuIEZvciB0aGUgQUNQSSByZWFkIHRvIHN1Y2NlZWQsIGBBQ1BJX0hBTkRMRShtZGV2LSZndDtkZXYpYCBoYXMgdG8gYmUgbm9uLU5VTEwsIGFuZCBgYWNwaV9ldmFsdWF0ZV9vYmplY3RgIGhhcyB0byByZXR1cm4gYSB2YWxpZCBidWZmZXIuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIFN5emthbGxlciBzb21laG93IG1vY2sgdGhpcyBzaXR1YXRpb24/IENhbiBpdCBpbmplY3QgYSBmYWtlIEFDUEkgaGFuZGxlIG9yIHRhYmxlIHNwZWNpZmljYWxseSBmb3IgdGhpcyBQQ0llIGRldmljZT8gTXkgZ3V0IGZlZWxpbmcsIGJhc2VkIG9uIHByZXZpb3VzIGV4cGVyaWVuY2UsIGlzIHByb2JhYmx5IG5vdC4gU3l6a2FsbGVyIGlzIGdvb2QgZm9yIGdlbmVyaWMgQUNQSSBtYW5pcHVsYXRpb24sIGJ1dCBpbmplY3RpbmcgQUNQSSB0YWJsZXMgZm9yICpzcGVjaWZpYyogUENJZSBkZXZpY2VzIGZlZWxzIGxpa2UgYSBsZXZlbCBvZiBzb3BoaXN0aWNhdGlvbiBJIGhhdmVuJiMzOTt0IG9ic2VydmVkIGl0IGRvaW5nLiBJJiMzOTt2ZSBzZWVuIGl0IHVzZSBgc3l6X21vdW50X2ltYWdlYCB0byBpbmplY3QgdGhpbmdzLCBidXQgbmV2ZXIgYSBQQ0llIGRldmljZSBBQ1BJLiBTbyBpdCBzZWVtcyB1bmxpa2VseS4gSSB2YWd1ZWx5IHJlY2FsbCB0aGVyZSBiZWluZyBhIGBzeXpfYWNwaV9pbmplY3RgIG9yIHNvbWV0aGluZyBidXQgaXQgZG9lc24mIzM5O3Qgc2VlbSB0byBleGlzdC4gSSBzaG91bGQgcHJvYmFibHkganVzdCBjaGVjayBpZiBhbnkgQUNQSSBpbmplY3Rpb24gb2NjdXJzIGluIFN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeXpfYWNwaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTQ3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgQUNQSSBUYWJsZSBJbnRlcmFjdGlvbiBmb3IgTWVkaWF0ZWsgV2ktRmkgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIE1lZGlhdGVrIFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaXRzIEFDUEkgaW50ZXJhY3Rpb25zLCB3aXRoaW4gU3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZXJlJiMzOTtzIG5vIGRlZGljYXRlZCBgc3l6X2FjcGlgIGZlYXR1cmUsIHdoaWNoIGlzIHRoZSBmaXJzdCBjaGFsbGVuZ2UuIFRoZW4gSSBzdGFydCB0aGlua2luZywgYXJlIHRoZXJlIGFueSByZWxldmFudCBjb25maWcgb3B0aW9ucz8gQ291bGQgSSBsZXZlcmFnZSBgQ09ORklHX0FDUElfQ1VTVE9NX0RTRFRgIG9yIGBDT05GSUdfQUNQSV9UQUJMRV9VUEdSQURFYD8gU3l6a2FsbGVyICpjYW4qIHVzZSBhbiBgaW5pdHJkYCB0byB1cGdyYWRlIEFDUEkgdGFibGVzLiBUaGUgcHJvYmxlbSBpcywgaXQgdXNlcyBhIGdlbmVyaWMgaW5pdHJkIGFuZCBkb2VzbiYjMzk7dCBkeW5hbWljYWxseSB0YWlsb3IgdGhlIEFDUEkgdGFibGVzIGZvciB0aGVzZSBNZWRpYXRlayBXaS1GaSBjYXJkcy4KCk5leHQsIEkgcmVtZW1iZXIgdGhlIGNvcmUgaXNzdWU6IHRoZSBNZWRpYXRlayBXaS1GaSBjYXJkIGlzbiYjMzk7dCBkaXJlY3RseSBlbXVsYXRlZCBpbiBRRU1VLiBXYWl0LCBJIHNob3VsZCBkb3VibGUgY2hlY2ssIGlzIHRoZSBNVDc5MjEgZW11bGF0ZWQgaW4gUUVNVT8gTm8sIGl0IGlzbiYjMzk7dC4gTmVpdGhlciBNVDc5MjEgbm9yIE1UNzkyNSBhcmUgZGlyZWN0bHkgZW11bGF0ZWQuCgpCdXQgdGhlbiwgSSByZWNhbGwgU3l6a2FsbGVyJiMzOTtzIGNhcGFiaWxpdGllcyB3aXRoIGBtYWM4MDIxMV9od3NpbWAgYW5kIGB2aGNpLWhjZGAuIEl0IGNhbiBlbXVsYXRlIFVTQiBkZXZpY2VzLiBJZiBJIGNvdWxkIGdldCBTeXprYWxsZXIgdG8gZW11bGF0ZSBhbiBNVDc5MjEgdmlhIFVTQiwgdXNpbmcgYHZoY2ktaGNkYCBvciBwZXJoYXBzIGV2ZW4gYGR1bW15X2hjZGAsIHRoZSBgbXQ3OTIxdWAgZHJpdmVyICpjb3VsZCogYmluZCB0byBpdC4KCkFscmlnaHQsIHRoZSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIEkgY2FuIGV2ZW4gcmVhY2ggYG10NzkyMXVgIHZpYSBVU0IgZnV6emluZy4gWWVzLCBpZiBJIGNhbiBjcmVhdGUgYSBVU0IgZGV2aWNlIHRoYXQgaGFzIHRoZSBjb3JyZWN0IHZlbmRvci9wcm9kdWN0IElEIChgMHgwZThkYCwgYDB4NzkwMmApLCB0aGVuIGBtdDc5MjF1X3Byb2JlYCB3aWxsIGJlIGNhbGxlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnQuCgpUaGUgcmVhbCBxdWVzdGlvbiBpcywgZXZlbiBpZiBJIGdldCBgbXQ3OTIxdV9wcm9iZWAgY2FsbGVkLCBkb2VzIHRoZSBVU0IgZGV2aWNlIGhhdmUgYW4gQUNQSSBoYW5kbGU/IEFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgdHJpY2t5LiBJbiBMaW51eCwgVVNCIGRldmljZXMgKnR5cGljYWxseSogZG9uJiMzOTt0IGhhdmUgQUNQSSBoYW5kbGVzIHVubGVzcyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IGhhcmRjb2RlZCBpbiB0aGUgRFNEVCwgd2hpY2ggaXMgdXN1YWxseSBmb3Igc3BlY2lmaWMgb25ib2FyZCBkZXZpY2VzIGxpa2UgQmx1ZXRvb3RoIG9yIFdpLUZpIG9uIHNvbWUgbGFwdG9wcy4KCklmIEkmIzM5O20gY3JlYXRpbmcgYSBVU0IgZGV2aWNlIGR5bmFtaWNhbGx5IHVzaW5nIGBkdW1teV9oY2RgIG9yIGB2aGNpLWhjZGAsIGl0JiMzOTtzICpub3QqIGdvaW5nIHRvIGhhdmUgYW4gQUNQSSBoYW5kbGUuIFRoYXQgbWVhbnMgYEFDUElfQ09NUEFOSU9OKGRldilgIHdpbGwgYmUgTlVMTC4gQ29uc2VxdWVudGx5LCBgbXQ3OTJ4X2FjcGlfcmVhZGAgaXMgZ29pbmcgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoYXQgbWVhbnMgYGFzYXItJmd0O2NvdW50cnlsaXN0YCB3aWxsIGJlIE5VTEwsIGFuZCB0aGUgYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB3aWxsIHJldHVybiBlYXJseSwgZWZmZWN0aXZlbHkgc2hvcnQtY2lyY3VpdGluZyB0aGF0IHBhdGguCgpJbiBjb25jbHVzaW9uLCBJIHRoaW5rIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHVubGVzcyB0aGVyZSYjMzk7cyBhIGN1c3RvbSBEU0RUIGFuZCBhIG1hdGNoaW5nIGVtdWxhdGVkIG9yIHBoeXNpY2FsIGRldmljZS4gSSBuZWVkIHRvIG5vdyBkb3VibGUtY2hlY2ssIGlzIGl0IHBvc3NpYmxlIHRvIGNhbGwgYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB3aXRoIGEgbm9uLU5VTEwgYGNsYCBieSBhbnkgb3RoZXIgbWVhbnM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvdW50cnlsaXN0X3YzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDE3PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOS1cdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cdTAwM2VhY3Bpc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0MjA6XHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2xfdjMgKmNsID0gc2FyLVx1MDAzZWNvdW50cnlsaXN0X3YzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MjEtXHRpbnQgY29sLCByb3csIGk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaD0xMTM9c3RydWN0IG10NzkyeF9hY3BpX3NhciB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaC0xMjQtXHRcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY291bnRyeWxpc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oOjEyNTpcdFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjb3VudHJ5bGlzdF92MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmgtMTI2LVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkyNTgKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkludmVzdGlnYXRpbmcgYGNvdW50cnlsaXN0X3YzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBjb2RlJiMzOTtzIGFza2luZyBhYm91dCBgY291bnRyeWxpc3RfdjNgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp3aGVyZSogaXMgdGhpcyB2YXJpYWJsZSBiZWluZyBzZXQ/IEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyBwb3B1bGF0ZWQuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgY2FuIGZpbmQgdGhlIGNvZGUgdGhhdCBhY3R1YWxseSBhc3NpZ25zIGRhdGEgdG8gYGNvdW50cnlsaXN0X3YzYC4gSXMgaXQgaW5pdGlhbGl6ZWQgbG9jYWxseSB3aXRoaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24vbW9kdWxlPyBJcyBpdCBnbG9iYWxseSBkZWZpbmVkLCBwZXJoYXBzIGltcG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGU/IElzIHRoZXJlIGEgZGF0YWJhc2UgcXVlcnkgb3IgZXh0ZXJuYWwgQVBJIGNhbGwgcG9wdWxhdGluZyBpdD8gS25vd2luZyB0aGUgc291cmNlIG9mIHRoaXMgdmFyaWFibGUgaXMgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSB3aG9sZSBzeXN0ZW0gYW5kIGRlYnVnZ2luZyBhbnkgZG93bnN0cmVhbSBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIC0gbXkgSURFJiMzOTtzIHNlYXJjaCBvciBncmVwLCBpZiBJIG5lZWQgdG8gbG9vayBhY3Jvc3MgdGhlIHdob2xlIHByb2plY3QgLSBhbmQgc3RhcnQgaHVudGluZyBkb3duIGl0cyBkZWZpbml0aW9uLiBHb3R0YSB0cmFjayBkb3duIHRoZSBzb3VyY2UgYmVmb3JlIEkgY2FuIGNvbnRpbnVlIHRoaXMgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudHJ5bGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTE5Mz1pbnQgbXQ3OTJ4X2luaXRfYWNwaV9zYXIoc3RydWN0IG10NzkyeF9kZXYgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTIwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjAyOlx0cmV0ID0gbXQ3OTJ4X2FzYXJfYWNwaV9yZWFkX210Y2woZGV2LCAodTggKiopXHUwMDI2YXNhci1cdTAwM2Vjb3VudHJ5bGlzdCwgXHUwMDI2YXNhci1cdTAwM2V2ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMDMtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjIwNDpcdFx0ZGV2bV9rZnJlZShkZXYtXHUwMDNlbXQ3Ni5kZXYsIGFzYXItXHUwMDNlY291bnRyeWxpc3QpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzoyMDU6XHRcdGFzYXItXHUwMDNlY291bnRyeWxpc3QgPSBOVUxMO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMDYtXHR9XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTc9bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDE5LVx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqc2FyID0gcGh5LVx1MDAzZWFjcGlzYXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQyMDpcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbF92MyAqY2wgPSBzYXItXHUwMDNlY291bnRyeWxpc3RfdjM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQyMS1cdGludCBjb2wsIHJvdywgaTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQ0OT1tdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibChzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00NTEtXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDUyOlx0c3RydWN0IG10NzkyeF9hc2FyX2NsICpjbCA9IHNhci1cdTAwM2Vjb3VudHJ5bGlzdDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDUzLVx0aW50IGNvbCwgcm93LCBpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmg9MTEzPXN0cnVjdCBtdDc5MnhfYWNwaV9zYXIge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmgtMTIzLVx0dW5pb24ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaDoxMjQ6XHRcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY291bnRyeWxpc3Q7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oOjEyNTpcdFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjb3VudHJ5bGlzdF92MztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmgtMTI2LVx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NjUKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAzOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBQ1BJIERhdGEgRmxvdyBpbiB0aGUgTVQ3OTJ4IERyaXZlciB3aXRoaW4gYSBRRU1VIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG10NzkyeGAgZHJpdmVyIGFuZCB0aGUgQUNQSSBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRoaXMgY291bnRyeSBsaXN0IChgYXNhci0mZ3Q7Y291bnRyeWxpc3RgKS4gSXQgbG9va3MgbGlrZSB0aGlzIGRhdGEgaXMgcG9wdWxhdGVkIGV4Y2x1c2l2ZWx5IHRocm91Z2ggYG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGNsYC4gVGhpcyBmdW5jdGlvbiwgaW4gdHVybiwgY2FsbHMgYG10NzkyeF9hY3BpX3JlYWRgLiBJIGhhdmUgdG8gdHJhY2Ugd2hlcmUgdGhhdCBnb2VzLiBBaCwgeWVzLCBgbXQ3OTJ4X2FjcGlfcmVhZGAgY2FsbHMgYEFDUElfSEFORExFKG1kZXYtJmd0O2RldilgLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIHdoYXQgZG9lcyBgbWRldi0mZ3Q7ZGV2YCByZXByZXNlbnQ/IElmIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgVVNCIGRldmljZSwgYG1kZXYtJmd0O2RldmAgaXMgZWl0aGVyIGAmYW1wO2ludGYtJmd0O2RldmAgb3IgYCZhbXA7dXNiX2Rldi0mZ3Q7ZGV2YC4gTm93LCBjYW4gYSBVU0IgZGV2aWNlICphY3R1YWxseSogaGF2ZSBhbiBBQ1BJIGhhbmRsZSB3aGVuIGVtdWxhdGVkIGluIFFFTVU/IEhtbSwgbm8sIHRoYXQmIzM5O3Mgbm90IGhvdyBRRU1VIHdvcmtzLiBJdCBkb2VzbiYjMzk7dCBnZW5lcmF0ZSBBQ1BJIHRhYmxlcyBmb3IgZHluYW1pY2FsbHkgcGx1Z2dlZCBVU0IgZGV2aWNlcy4KCkFscmlnaHQsIHdoYXQgYWJvdXQgUENJZT8gRG9lcyBRRU1VIGV2ZW4gZW11bGF0ZSBNVDc5MjEgUENJZSBkZXZpY2VzPyBObywgaXQgZG9lc24mIzM5O3QuIFNvLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhlIGRyaXZlciBjYW4gKm9ubHkqIGJlIHRlc3RlZCBhbmQgcG90ZW50aWFsbHkgcHJvYmVkIHZpYSBVU0IgKHVzaW5nIHN5emthbGxlciYjMzk7cyBVU0IgZnV6emluZykgb3IgU0RJTyAoaWYgYW55IHN5emthbGxlciBTRElPIGZ1enppbmcgZXhpc3RzKS4gVGhlIGNvbW1vbiBwb2ludCwgaG93ZXZlciwgaXMgdGhhdCBpbiAqbmVpdGhlciogY2FzZSB3aWxsIHRoZSBkZXZpY2UgaGF2ZSBhIHZhbGlkIEFDUEkgaGFuZGxlLgoKQ29uc2VxdWVudGx5LCBgbXQ3OTJ4X2FjcGlfcmVhZGAgd2lsbCByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyBgYXNhci0mZ3Q7Y291bnRyeWxpc3RgIHdpbGwgYmUgYE5VTExgLiBCaW5nbyEgVGhlbiwgYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiBgTVQ3OTJYX0FDUElfTVRDTF9JTlZBTElEYC4KClRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgYmxvY2s6CgpgYGBjCglpZiAoY2wtJmd0O21vZGVfYmUgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpCgkJZ290byBvdXQ7CmBgYAoKd2lsbCAqbmV2ZXIqIGJlIHJlYWNoZWQgd2l0aGluIHRoZSBRRU1VIGVudmlyb25tZW50LiBUaGlzIGlzIGJlY2F1c2UgdGhlIGVhcmxpZXIgY2hlY2tzIHdpbGwgc2hvcnQtY2lyY3VpdCB0aGUgZXhlY3V0aW9uIHBhdGguCgpXYWl0IGEgbW9tZW50LCBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgbXQ3OTJ4X2FjcGlfcmVhZGAgbWlnaHQgc3VjY2VlZCBhbmQgcmV0dXJuIGEgbm9uLWVycm9yIGNvZGU/IExldCBtZSByZS1leGFtaW5lIGBtdDc5MnhfYWNwaV9yZWFkYCBhbmQgc2VlIGlmIEkgbWlzc2VkIHNvbWV0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyOTpcdHN0YXRpYyBpbnRcbiAgMzA6XHRtdDc5MnhfYWNwaV9yZWFkKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICptZXRob2QsIHU4ICoqdGJsLCB1MzIgKmxlbilcbiAgMzE6XHR7XG4gIDMyOlx0XHRzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9O1xuICAzMzpcdFx0c3RydWN0IG10NzZfZGV2ICptZGV2ID0gXHUwMDI2ZGV2LVx1MDAzZW10NzY7XG4gIDM0Olx0XHR1bmlvbiBhY3BpX29iamVjdCAqc2FyX3Jvb3Q7XG4gIDM1Olx0XHRhY3BpX2hhbmRsZSByb290LCBoYW5kbGU7XG4gIDM2Olx0XHRhY3BpX3N0YXR1cyBzdGF0dXM7XG4gIDM3Olx0XHR1MzIgaSA9IDA7XG4gIDM4Olx0XHRpbnQgcmV0O1xuICAzOTpcdFxuICA0MDpcdFx0cm9vdCA9IEFDUElfSEFORExFKG1kZXYtXHUwMDNlZGV2KTtcbiAgNDE6XHRcdGlmICghcm9vdClcbiAgNDI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuICA0MzpcdFxuICA0NDpcdFx0c3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKHJvb3QsIG1ldGhvZCwgXHUwMDI2aGFuZGxlKTtcbiAgNDU6XHRcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcbiAgNDY6XHRcdFx0cmV0dXJuIC1FSU87XG4gIDQ3Olx0XG4gIDQ4Olx0XHRzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE5VTEwsIE5VTEwsIFx1MDAyNmJ1Zik7XG4gIDQ5Olx0XHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpXG4gIDUwOlx0XHRcdHJldHVybiAtRUlPO1xuICA1MTpcdFxuICA1MjpcdFx0c2FyX3Jvb3QgPSBidWYucG9pbnRlcjtcbiAgNTM6XHRcdGlmIChzYXJfcm9vdC1cdTAwM2V0eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFIHx8XG4gIDU0Olx0XHQgICAgc2FyX3Jvb3QtXHUwMDNlcGFja2FnZS5jb3VudCBcdTAwM2MgNCB8fFxuICA1NTpcdFx0ICAgIHNhcl9yb290LVx1MDAzZXBhY2thZ2UuZWxlbWVudHNbMF0udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikge1xuICA1NjpcdFx0XHRkZXZfZXJyKG1kZXYtXHUwMDNlZGV2LCBcJiMzNDtzYXIgY250ID0gJWRcXG5cJiMzNDssXG4gIDU3Olx0XHRcdFx0c2FyX3Jvb3QtXHUwMDNlcGFja2FnZS5jb3VudCk7XG4gIDU4Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTQyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUNQSSBIYW5kbGUgaW4gdGhpcyBDb250ZXh0KioKCk9rYXksIHNvIEkgc2VlIHRoaXMgY2hlY2sgaGVyZTogYHJvb3QgPSBBQ1BJX0hBTkRMRShtZGV2LSZndDtkZXYpOyBpZiAoIXJvb3QpIHJldHVybiAtRU9QTk9UU1VQUDtgIE15IGZpcnN0IHRob3VnaHQgaXMsIHllcywgdGhhdCBtYWtlcyBzZW5zZSAqaW4gdGhlIGdlbmVyYWwgY2FzZSouIEl0JiMzOTtzIGxvb2tpbmcgZm9yIGFuIEFDUEkgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLiBIb3dldmVyLCBnaXZlbiB0aGF0IHN5emthbGxlciBnZW5lcmF0ZXMgdGhlc2UgVVNCIGRldmljZXMgZHluYW1pY2FsbHksIHNwZWNpZmljYWxseSB2aWEgYGR1bW15X2hjZGAgb3IgYHZoY2ktaGNkYCwgdGhlcmUmIzM5O3MgYSB2ZXJ5IGdvb2QgY2hhbmNlIHRoZXkgKndvbiYjMzk7dCogaGF2ZSBhbiBBQ1BJIGNvbXBhbmlvbiBkZXZpY2UuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIGlzc3VlLgoKVGhlcmVmb3JlLCBhcyBpdCBzdGFuZHMsIHRoZSBleHByZXNzaW9uIGBBQ1BJX0hBTkRMRShtZGV2LSZndDtkZXYpYCB3aWxsIG1vc3QgbGlrZWx5IGV2YWx1YXRlIHRvIE5VTEwuIFdoaWNoIG1lYW5zIHRoYXQgdGhlIGNvbmRpdGlvbiBpcyBtZXQgYW5kIGl0IHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhpcyBtb2RpZmllZCBzZWN0aW9uIG9mIHRoZSBjb2RlIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIHdoZW4gb3BlcmF0aW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBzaW5jZSB0aGF0JiMzOTtzIGhvdyB3ZSYjMzk7cmUgZ2VuZXJhdGluZyB0aGVzZSBVU0IgZGV2aWNlcy4KCkkgbmVlZCB0byBjb25maXJtLCB0aG91Z2guIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgKm90aGVyKiBwbGFjZXMgd2hlcmUgYGFjcGlzYXJgIGlzIHBvcHVsYXRlZC4gSSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGEgbnVhbmNlIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjcGlzYXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD0xNTg9c3RydWN0IG10NzkyeF9waHkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4LmgtMTgyLSNpZmRlZiBDT05GSUdfQUNQSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaDoxODM6XHR2b2lkICphY3Bpc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaC0xODQtI2VuZGlmXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0xOTM9aW50IG10NzkyeF9pbml0X2FjcGlfc2FyKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMjYtXHR9XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjIyNzpcdGRldi1cdTAwM2VwaHkuYWNwaXNhciA9IGFzYXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTIyOC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTIzND1tdDc5MnhfYXNhcl9nZXRfZ2VvX3B3cihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjM2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjM3Olx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqYXNhciA9IHBoeS1cdTAwM2VhY3Bpc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMzgtXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfZ2VvX2JhbmQgKmJhbmRfcHdyO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9Mjg5PW10NzkyeF9hc2FyX3JhbmdlX3B3cihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjkzLVx0Y29uc3Qgc3RydWN0IGNmZzgwMjExX3Nhcl9jYXBhICpjYXBhID0gcGh5LVx1MDAzZW10NzYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlc2FyX2NhcGE7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjI5NDpcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjk1LVx0dTggKmxpbWl0LCBiYW5kLCBtYXg7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zMjE9aW50IG10NzkyeF9pbml0X2FjcGlfc2FyX3Bvd2VyKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGJvb2wgc2V0X2RlZmF1bHQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zMjUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjMyNjpcdGlmICghcGh5LVx1MDAzZWFjcGlzYXIgfHwgISgoc3RydWN0IG10NzkyeF9hY3BpX3NhciAqKXBoeS1cdTAwM2VhY3Bpc2FyKS1cdTAwM2VkeW4pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTMyNy1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zNDg9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM0OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjM1MDpcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFjcGlzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzUxLVx0c3RydWN0IG10NzkyeF9hc2FyX2ZnICpmZztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM2MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MzYyOlx0aWYgKCFhY3Bpc2FyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNjMtXHRcdHJldHVybiAwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjM2NTpcdGZnID0gYWNwaXNhci1cdTAwM2VmZztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzY2LVx0aWYgKCFmZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQxNz1tdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQxOTpcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cdTAwM2VhY3Bpc2FyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MjAtXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2xfdjMgKmNsID0gc2FyLVx1MDAzZWNvdW50cnlsaXN0X3YzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDQ5PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDUwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDUxOlx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqc2FyID0gcGh5LVx1MDAzZWFjcGlzYXI7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ1Mi1cdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY2wgPSBzYXItXHUwMDNlY291bnRyeWxpc3Q7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00NzI9dTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00NzMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0NzQ6XHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXHUwMDNlYWNwaXNhcjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDc1LVx0dTMyIGNvbmZpZyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjQ3CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIEFDUEkgU0FSIFBhcnNpbmcgZm9yIE1lZGlhdGVrIFdpLUZpKioKCk9rYXksIHNvIEkmIzM5O3ZlIHRyYWNlZCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGxvb2tpbmcgcHJldHR5IGNsZWFyLiBUaGUga2V5IGlzIHRoYXQgYGFzYXItJmd0O2NvdW50cnlsaXN0YCBnZXRzIHBvcHVsYXRlZCBvbmx5IHdpdGhpbiBgbXQ3OTJ4X2luaXRfYWNwaV9zYXJgLiAgVGhhdCBmdW5jdGlvbiwgaW4gdHVybiwgaXMgY2FsbGVkIGZyb20gc29tZXRoaW5nIGxpa2UgYG10NzkyMV9tYWNfaW5pdGAuICBUaGUgY2F0Y2ggaGVyZSBpcyB0aGF0IGZvciBhIFVTQiBkZXZpY2UgaW4gUUVNVSwgYEFDUElfSEFORExFKG1kZXYtJmd0O2RldilgIGlzIGdvaW5nIHRvIGJlIE5VTEwuCgpUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCBpbW1lZGlhdGVseSBjaGVja3MgaWYgdGhlIGNvdW50cnkgbGlzdCAoYGNsYCkgaXMgbnVsbC4gSWYgaXQgaXMgKHdoaWNoIGl0IGlzIGluIG91ciBRRU1VIFVTQiBjYXNlKSwgaXQgcmV0dXJucyBlYXJseS4KClRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIFFFTVUgc2NlbmFyaW8uIFVTQiBkZXZpY2VzIGluIFFFTVUsIHdoZXRoZXIgdXNpbmcgYGR1bW15X2hjZGAgb3IgYHZoY2ktaGNkYCwgYXJlIHNvZnR3YXJlIGVtdWxhdGVkLiAgVGhleSBkb24mIzM5O3QgZ2V0IEFDUEkgbm9kZXMgaW4gdGhlIERTRFQuIFRoaXMgbWVhbnMgYEFDUElfQ09NUEFOSU9OKGRldilgIGlzIE5VTEwsIHdoaWNoIGluIHR1cm4gbWVhbnMgYEFDUElfSEFORExFKGRldilgIGlzIE5VTEwuIENvbnNlcXVlbnRseSwgYG10NzkyeF9hY3BpX3JlYWRgIHdpbGwgcmV0dXJuIGAtRU9QTk9UU1VQUGAuIFRoYXQgY2F1c2VzIGBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbGAgdG8gZmFpbCBhbmQsIHlvdSBndWVzc2VkIGl0LCBgYXNhci0mZ3Q7Y291bnRyeWxpc3RgIHJlbWFpbnMgTlVMTC4gVGhlcmVmb3JlLCB0aGUgZWFybHkgcmV0dXJuIGluIGBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92M2AgaXMgcmVhY2hlZC4KClNvLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgQUNQSSBTQVIgcGFyc2luZyBmb3IgTWVkaWF0ZWsgV2ktRmkgY2FyZHMuIFRoZSBjb2RlIG5lZWRzIGEgdmFsaWQgQUNQSSBjb21wYW5pb24gZGV2aWNlLCB3aGljaCB2aXJ0dWFsaXplZCBVU0Igb3IgUENJZSBkZXZpY2VzIGluIFFFTVUgc2ltcGx5IGRvbiYjMzk7dCBoYXZlIGR1ZSB0byB0aGVpciBkeW5hbWljIGFuZCBlbXVsYXRlZCBuYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgcGFyc2luZyBsb2dpYyBmb3IgTWVkaWF0ZWsgTVQ3OTJ4IFdpLUZpIGNhcmRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHJldHJpZXZpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGRldmljZSB2aWEgQUNQSV9IQU5ETEUobWRldi1cdTAwM2VkZXYpIHRvIHJlYWQgdGhlIEFDUEkgdGFibGVzLiBJbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBkeW5hbWljYWxseSBjcmVhdGVkIFVTQiBvciBQQ0llIGRldmljZXMgZG8gbm90IGhhdmUgQUNQSSBub2RlcyBpbiB0aGUgRFNEVCwgc28gQUNQSV9IQU5ETEUgcmV0dXJucyBOVUxMLiBDb25zZXF1ZW50bHksIHRoZSBBQ1BJIHJlYWRpbmcgZmFpbHMsIHRoZSBjb3VudHJ5bGlzdCBpcyBuZXZlciBwb3B1bGF0ZWQsIGFuZCB0aGUgbW9kaWZpZWQgcGFyc2luZyBmdW5jdGlvbnMgcmV0dXJuIGVhcmx5LCBtYWtpbmcgdGhpcyBjb2RlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBBQ1BJIFNBUiAoU3BlY2lmaWMgQWJzb3JwdGlvbiBSYXRlKSBwYXJzaW5nIGxvZ2ljIGZvciBNZWRpYXRlayBNVDc5MnggV2ktRmkgY2FyZHMuIFRoaXMgY29kZSByZWxpZXMgb24gcmV0cmlldmluZyB0aGUgQUNQSSBjb21wYW5pb24gZGV2aWNlIHZpYSBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldikgdG8gcmVhZCB0aGUgQUNQSSB0YWJsZXMuIEluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGR5bmFtaWNhbGx5IGNyZWF0ZWQgVVNCIG9yIFBDSWUgZGV2aWNlcyBkbyBub3QgaGF2ZSBBQ1BJIG5vZGVzIGluIHRoZSBEU0RULCBzbyBBQ1BJX0hBTkRMRSByZXR1cm5zIE5VTEwuIENvbnNlcXVlbnRseSwgdGhlIEFDUEkgcmVhZGluZyBmYWlscywgdGhlIGNvdW50cnlsaXN0IGlzIG5ldmVyIHBvcHVsYXRlZCwgYW5kIHRoZSBtb2RpZmllZCBwYXJzaW5nIGZ1bmN0aW9ucyByZXR1cm4gZWFybHksIG1ha2luZyB0aGlzIGNvZGUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNjo0MC40MDEwNjExNzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTcwNDAzMjMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgcGFyc2luZyBsb2dpYyBmb3IgTWVkaWF0ZWsgTVQ3OTJ4IFdpLUZpIGNhcmRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHJldHJpZXZpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGRldmljZSB2aWEgQUNQSV9IQU5ETEUobWRldi1cXHUwMDNlZGV2KSB0byByZWFkIHRoZSBBQ1BJIHRhYmxlcy4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZHluYW1pY2FsbHkgY3JlYXRlZCBVU0Igb3IgUENJZSBkZXZpY2VzIGRvIG5vdCBoYXZlIEFDUEkgbm9kZXMgaW4gdGhlIERTRFQsIHNvIEFDUElfSEFORExFIHJldHVybnMgTlVMTC4gQ29uc2VxdWVudGx5LCB0aGUgQUNQSSByZWFkaW5nIGZhaWxzLCB0aGUgY291bnRyeWxpc3QgaXMgbmV2ZXIgcG9wdWxhdGVkLCBhbmQgdGhlIG1vZGlmaWVkIHBhcnNpbmcgZnVuY3Rpb25zIHJldHVybiBlYXJseSwgbWFraW5nIHRoaXMgY29kZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MzY6NDAuNDAxMDY5NDQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM1ODUyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmMmEyNGFkNTA1NGVlMDViZTJlM2MyNDljOGE4NGNjN2Q5YThlMDRlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDEzOjM2OjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jXFxuaW5kZXggOTQ2ZGQ3OTU2ZTRhMGQuLjg2OGZlYWRiZmY2MTEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jXFxuQEAgLTM4OCw3ICszODgsNyBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjbClcXG4gXFx0dTMyIGNvbmZpZyA9IDA7XFxuIFxcdHU4IG1vZGVfYmUgPSAwO1xcbiBcXG4tXFx0bW9kZV9iZSA9IChjbC1cXHUwMDNlbW9kZV9iZSBcXHUwMDNlIDB4MDIpID8gMCA6IGNsLVxcdTAwM2Vtb2RlX2JlO1xcbitcXHRtb2RlX2JlID0gKGNsLVxcdTAwM2Vtb2RlX2JlIFxcdTAwM2UgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpID8gMCA6IGNsLVxcdTAwM2Vtb2RlX2JlO1xcbiBcXG4gXFx0aWYgKGNsLVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2UgMiBcXHUwMDI2XFx1MDAyNiBjbC1cXHUwMDNlY2xiZVtyb3ddIFxcdTAwMjYgQklUKGNvbHVtbikpXFxuIFxcdFxcdGNvbmZpZyB8PSAobW9kZV9iZSBcXHUwMDI2IDB4MykgXFx1MDAzY1xcdTAwM2MgNDtcXG5AQCAtNDAyLDEwICs0MDIsMTAgQEAgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfbWFwKGludCByb3csIGludCBjb2x1bW4sIHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY2wpXFxuIFxcdHUzMiBjb25maWcgPSAwO1xcbiBcXHR1OCBtb2RlXzZnLCBtb2RlXzVnOTtcXG4gXFxuLVxcdG1vZGVfNmcgPSAoY2wtXFx1MDAzZW1vZGVfNmcgXFx1MDAzZSAweDAyKSA/IDAgOiBjbC1cXHUwMDNlbW9kZV82ZztcXG4tXFx0bW9kZV81ZzkgPSAoY2wtXFx1MDAzZW1vZGVfNWc5IFxcdTAwM2UgMHgwMSkgPyAwIDogY2wtXFx1MDAzZW1vZGVfNWc5O1xcbitcXHRtb2RlXzZnID0gKGNsLVxcdTAwM2Vtb2RlXzZnIFxcdTAwM2UgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpID8gMCA6IGNsLVxcdTAwM2Vtb2RlXzZnO1xcbitcXHRtb2RlXzVnOSA9IChjbC1cXHUwMDNlbW9kZV81ZzkgXFx1MDAzZSBNVDc5MlhfQUNQSV9NVENMX01PREVfRU5BQkxFKSA/IDAgOiBjbC1cXHUwMDNlbW9kZV81Zzk7XFxuIFxcbi1cXHRpZiAoKGNsLVxcdTAwM2VjbDZnW3Jvd10gXFx1MDAyNiBCSVQoY29sdW1uKSkgfHwgY2wtXFx1MDAzZW1vZGVfNmcgPT0gMHgwMilcXG4rXFx0aWYgKChjbC1cXHUwMDNlY2w2Z1tyb3ddIFxcdTAwMjYgQklUKGNvbHVtbikpIHx8IGNsLVxcdTAwM2Vtb2RlXzZnID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKVxcbiBcXHRcXHRjb25maWcgfD0gKG1vZGVfNmcgXFx1MDAyNiAweDMpIFxcdTAwM2NcXHUwMDNjIDI7XFxuIFxcdGlmIChjbC1cXHUwMDNldmVyc2lvbiBcXHUwMDNlIDEgXFx1MDAyNlxcdTAwMjYgY2wtXFx1MDAzZWNsNWc5W3Jvd10gXFx1MDAyNiBCSVQoY29sdW1uKSlcXG4gXFx0XFx0Y29uZmlnIHw9IChtb2RlXzVnOSBcXHUwMDI2IDB4Myk7XFxuQEAgLTQyNiw2ICs0MjYsOSBAQCBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuIFxcdGlmICghY2wpXFxuIFxcdFxcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XFxuIFxcbitcXHRpZiAoY2wtXFx1MDAzZW1vZGVfYmUgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoY2NfbGlzdF9iZSk7IGkrKykge1xcbiBcXHRcXHRjb2wgPSA3IC0gaSAlIDg7XFxuIFxcdFxcdHJvdyA9IGkgLyA4O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaFxcbmluZGV4IDQ3NDAzMzA3MzgzMTU4Li4xMTBmNjg0MzhkOTAwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaFxcbkBAIC0xNyw2ICsxNywxMyBAQFxcbiBcXG4gI2RlZmluZSBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSURcXHQweGZmZmZmZmZmXFxuIFxcbisvKiBNVENMIHBlci1iYW5kIGNvbnRyb2wgbW9kZSAobW9kZV82Zy9tb2RlXzVnOS9tb2RlX2JlKSAqL1xcbitlbnVtIHtcXG4rXFx0TVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RJU0FCTEVcXHQ9IDB4MDAsXFx0LyogZm9yY2UgZGlzYWJsZSAqL1xcbitcXHRNVDc5MlhfQUNQSV9NVENMX01PREVfRU5BQkxFXFx0PSAweDAxLFxcdC8qIGVuYWJsZSBpZiBkcml2ZXIgXFx1MDAyNiBCSU9TIHN1cHBvcnQgKi9cXG4rXFx0TVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFRcXHQ9IDB4MDIsXFx0Lyogc3VwcG9ydGluZyBkZXBlbmRzIG9uIGRyaXZlciBzZXR0aW5nICovXFxuK307XFxuK1xcbiBzdHJ1Y3QgbXQ3OTJ4X2FzYXJfZHluX2xpbWl0IHtcXG4gXFx0dTggaWR4O1xcbiBcXHR1OCBmcnBbNV07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjQwLjkzNTQzMDgwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk5MTY5NjU2NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBBQ1BJIFNBUiAoU3BlY2lmaWMgQWJzb3JwdGlvbiBSYXRlKSBwYXJzaW5nIGxvZ2ljIGZvciBNZWRpYXRlayBNVDc5MnggV2ktRmkgY2FyZHMuIFRoaXMgY29kZSByZWxpZXMgb24gcmV0cmlldmluZyB0aGUgQUNQSSBjb21wYW5pb24gZGV2aWNlIHZpYSBBQ1BJX0hBTkRMRShtZGV2LVxcdTAwM2VkZXYpIHRvIHJlYWQgdGhlIEFDUEkgdGFibGVzLiBJbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBkeW5hbWljYWxseSBjcmVhdGVkIFVTQiBvciBQQ0llIGRldmljZXMgZG8gbm90IGhhdmUgQUNQSSBub2RlcyBpbiB0aGUgRFNEVCwgc28gQUNQSV9IQU5ETEUgcmV0dXJucyBOVUxMLiBDb25zZXF1ZW50bHksIHRoZSBBQ1BJIHJlYWRpbmcgZmFpbHMsIHRoZSBjb3VudHJ5bGlzdCBpcyBuZXZlciBwb3B1bGF0ZWQsIGFuZCB0aGUgbW9kaWZpZWQgcGFyc2luZyBmdW5jdGlvbnMgcmV0dXJuIGVhcmx5LCBtYWtpbmcgdGhpcyBjb2RlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMmEyNGFkNTA1NGVlMDViZTJlM2MyNDljOGE4NGNjN2Q5YThlMDRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTM6MzY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuaW5kZXggOTQ2ZGQ3OTU2ZTRhMGQuLjg2OGZlYWRiZmY2MTEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1xuQEAgLTM4OCw3ICszODgsNyBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjbClcbiBcdHUzMiBjb25maWcgPSAwO1xuIFx0dTggbW9kZV9iZSA9IDA7XG4gXG4tXHRtb2RlX2JlID0gKGNsLVx1MDAzZW1vZGVfYmUgXHUwMDNlIDB4MDIpID8gMCA6IGNsLVx1MDAzZW1vZGVfYmU7XG4rXHRtb2RlX2JlID0gKGNsLVx1MDAzZW1vZGVfYmUgXHUwMDNlIE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKSA/IDAgOiBjbC1cdTAwM2Vtb2RlX2JlO1xuIFxuIFx0aWYgKGNsLVx1MDAzZXZlcnNpb24gXHUwMDNlIDIgXHUwMDI2XHUwMDI2IGNsLVx1MDAzZWNsYmVbcm93XSBcdTAwMjYgQklUKGNvbHVtbikpXG4gXHRcdGNvbmZpZyB8PSAobW9kZV9iZSBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgNDtcbkBAIC00MDIsMTAgKzQwMiwxMCBAQCBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXAoaW50IHJvdywgaW50IGNvbHVtbiwgc3RydWN0IG10NzkyeF9hc2FyX2NsICpjbClcbiBcdHUzMiBjb25maWcgPSAwO1xuIFx0dTggbW9kZV82ZywgbW9kZV81Zzk7XG4gXG4tXHRtb2RlXzZnID0gKGNsLVx1MDAzZW1vZGVfNmcgXHUwMDNlIDB4MDIpID8gMCA6IGNsLVx1MDAzZW1vZGVfNmc7XG4tXHRtb2RlXzVnOSA9IChjbC1cdTAwM2Vtb2RlXzVnOSBcdTAwM2UgMHgwMSkgPyAwIDogY2wtXHUwMDNlbW9kZV81Zzk7XG4rXHRtb2RlXzZnID0gKGNsLVx1MDAzZW1vZGVfNmcgXHUwMDNlIE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKSA/IDAgOiBjbC1cdTAwM2Vtb2RlXzZnO1xuK1x0bW9kZV81ZzkgPSAoY2wtXHUwMDNlbW9kZV81ZzkgXHUwMDNlIE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9FTkFCTEUpID8gMCA6IGNsLVx1MDAzZW1vZGVfNWc5O1xuIFxuLVx0aWYgKChjbC1cdTAwM2VjbDZnW3Jvd10gXHUwMDI2IEJJVChjb2x1bW4pKSB8fCBjbC1cdTAwM2Vtb2RlXzZnID09IDB4MDIpXG4rXHRpZiAoKGNsLVx1MDAzZWNsNmdbcm93XSBcdTAwMjYgQklUKGNvbHVtbikpIHx8IGNsLVx1MDAzZW1vZGVfNmcgPT0gTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFQpXG4gXHRcdGNvbmZpZyB8PSAobW9kZV82ZyBcdTAwMjYgMHgzKSBcdTAwM2NcdTAwM2MgMjtcbiBcdGlmIChjbC1cdTAwM2V2ZXJzaW9uIFx1MDAzZSAxIFx1MDAyNlx1MDAyNiBjbC1cdTAwM2VjbDVnOVtyb3ddIFx1MDAyNiBCSVQoY29sdW1uKSlcbiBcdFx0Y29uZmlnIHw9IChtb2RlXzVnOSBcdTAwMjYgMHgzKTtcbkBAIC00MjYsNiArNDI2LDkgQEAgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjMoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxuIFx0aWYgKCFjbClcbiBcdFx0cmV0dXJuIE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRDtcbiBcbitcdGlmIChjbC1cdTAwM2Vtb2RlX2JlID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoY2NfbGlzdF9iZSk7IGkrKykge1xuIFx0XHRjb2wgPSA3IC0gaSAlIDg7XG4gXHRcdHJvdyA9IGkgLyA4O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG5pbmRleCA0NzQwMzMwNzM4MzE1OC4uMTEwZjY4NDM4ZDkwMDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oXG5AQCAtMTcsNiArMTcsMTMgQEBcbiBcbiAjZGVmaW5lIE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRFx0MHhmZmZmZmZmZlxuIFxuKy8qIE1UQ0wgcGVyLWJhbmQgY29udHJvbCBtb2RlIChtb2RlXzZnL21vZGVfNWc5L21vZGVfYmUpICovXG4rZW51bSB7XG4rXHRNVDc5MlhfQUNQSV9NVENMX01PREVfRElTQUJMRVx0PSAweDAwLFx0LyogZm9yY2UgZGlzYWJsZSAqL1xuK1x0TVQ3OTJYX0FDUElfTVRDTF9NT0RFX0VOQUJMRVx0PSAweDAxLFx0LyogZW5hYmxlIGlmIGRyaXZlciBcdTAwMjYgQklPUyBzdXBwb3J0ICovXG4rXHRNVDc5MlhfQUNQSV9NVENMX01PREVfREVGQVVMVFx0PSAweDAyLFx0Lyogc3VwcG9ydGluZyBkZXBlbmRzIG9uIGRyaXZlciBzZXR0aW5nICovXG4rfTtcbitcbiBzdHJ1Y3QgbXQ3OTJ4X2FzYXJfZHluX2xpbWl0IHtcbiBcdHU4IGlkeDtcbiBcdHU4IGZycFs1XTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjQwLjkzNTQzMjEzN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4NzA2MjgzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgV2lGaSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY2AuIEl0IHNlZW1zIGxpa2UgdGhleSdyZSBjbGVhbmluZyB1cCBzb21lIG1hZ2ljIG51bWJlcnMgcmVsYXRlZCB0byBBQ1BJIFNBUiBwYXJzaW5nIGZvciB0aGUgTVQ3OTJ4IHdpcmVsZXNzIGNhcmRzLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgcmVwbGFjaW5nIHRob3NlIG51bWJlcnMgd2l0aCBlbnVtIHZhbHVlczogYE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUYCBhbmQgYE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9FTkFCTEVgLiAgVGhleSd2ZSBhbHNvIGFkZGVkIGEgY2hlY2sgaW4gYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB0byBzaG9ydC1jaXJjdWl0IGlmIGBjbC1cdTAwM2Vtb2RlX2JlYCBpcyBgTVQ3OTJYX0FDUElfTVRDTF9NT0RFX0RFRkFVTFRgLiAgVGhpcyBpcyBzdGFuZGFyZCBzdHVmZiBmb3IgdGhpcyBraW5kIG9mIGNsZWFudXAsIG1ha2luZyB0aGUgY29kZSBtb3JlIHJlYWRhYmxlIGFuZCBwb3RlbnRpYWxseSBsZXNzIGVycm9yLXByb25lLlxuXG5UaGUgY29yZSBvZiB0aGlzIGlzIEFDUEkgU0FSIHBhcnNpbmcuIFRoZXNlIHRhYmxlcyBhcmUgZ2VuZXJhbGx5IHByb3ZpZGVkIGJ5IHRoZSBCSU9TIG9yIGZpcm13YXJlIGFuZCBhcmUgcGFyc2VkIGR1cmluZyBkcml2ZXIgaW5pdGlhbGl6YXRpb24gb3IgaW4gcmVzcG9uc2UgdG8gQUNQSSBldmVudHMuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogSXMgdGhpcyBjb2RlIHBhdGggZXZlbiBhY2Nlc3NpYmxlIGluIGEgUUVNVSBlbnZpcm9ubWVudD8gU3l6a2FsbGVyIGNhbiBzb21ldGltZXMgaW5qZWN0IEFDUEkgdGFibGVzLCBidXQgdXN1YWxseSwgdGhhdCdzIHRhaWxvcmVkIHRvIHRoZSBoYXJkd2FyZS4gQ29uc2lkZXJpbmcgdGhpcyBpcyBhIE1lZGlhdGVrIE1UNzkyeCwgYSBQQ0llL1NESU8vVVNCIFdpLUZpIGNhcmQsIGl0J3MgcHJvYmFibHkgZmVhc2libGUgdG8gZXhlcmNpc2UgdGhpcyBjb2RlIHdpdGggY2FyZWZ1bGx5IGNyYWZ0ZWQgQUNQSSBkYXRhLlxuXG5Ob3csIGhvdyBjYW4gSSBmdXp6IHRoaXM/ICBMZXQncyBzZWXigKYgVGhlIGtleSBmdW5jdGlvbiBtb2RpZmllZCBpcyBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSSdsbCBzZWFyY2ggZm9yIHJlZmVyZW5jZXMgdG8gYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB0byBzZWUgd2hhdCB0cmlnZ2VycyBpdCBhbmQgdGhlbiBleHBsb3JlIHRoZSBwb3RlbnRpYWwgb2YgZnV6emluZyB0aGF0IGVudHJ5IHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDgzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MzY6NDYuODA2MDYzNzc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NzMzMDQ0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTY9c3RhdGljIHUzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDE3Om10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQ3Mj11MzIgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQ4MDpcXHRjb25maWcgPSBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhwaHksIGFscGhhMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00ODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjQ4Ljc3OTM3NjA4NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODg0Mzk5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlRyYWNpbmcgdGhlIENvbmZpZ3VyYXRpb24gQWNxdWlzaXRpb24qKlxuXG5SaWdodCwgYG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmZgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgKndoeSogYW5kICp3aGVuKiB0aGlzIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gU28sIG15IG1lbnRhbCBtYXAgbm93IG5lZWRzIHRvIGV4cGFuZCB0byBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250cm9sIGZsb3csIHNvIEknbGwgc3RhcnQgYnkgbG9va2luZyBmb3IgaXRzIGludm9jYXRpb25zLiBLbm93aW5nIHdoZXJlIGl0J3MgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXJnZXIgc3lzdGVtIGNvbnRleHQgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBkYXRhIGlzIGFjY2Vzc2VkLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbCBncmFwaCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6MzY6NTEuNzY3ODI0MThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2OTQzMjI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL21jdS5jPTEzMDY9aW50IF9fbXQ3OTIxX21jdV9zZXRfY2xjKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICphbHBoYTIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMzMyLVxcdFxcdC5hY3BpX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfZmxhZ3MoXFx1MDAyNmRldi1cXHUwMDNlcGh5KSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYzoxMzMzOlxcdFxcdC5tdGNsX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKFxcdTAwMjZkZXYtXFx1MDAzZXBoeSwgYWxwaGEyKSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tY3UuYy0xMzM0LVxcdH07XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmM9MjE9dm9pZCBtdDc5MjVfcmVnZF9iZV9jdHJsKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYsIHU4ICphbHBoYTIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtMjYtXFx0Ym9vbCBvbGQgPSBkZXYtXFx1MDAzZWhhc19laHQsIG5ldyA9IHRydWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jOjI3OlxcdHUzMiBtdGNsX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKFxcdTAwMjZkZXYtXFx1MDAzZXBoeSwgYWxwaGEyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtMjgtXFx0dTggKnBvcztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTI1L3JlZ2QuYz02Nz1tdDc5MjVfcmVnZF9jaGFubmVsX3VwZGF0ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jLTc1LVxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjUvcmVnZC5jOjc2OlxcdHUzMiBtdGNsX2NvbmYgPSBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKFxcdTAwMjZkZXYtXFx1MDAzZXBoeSwgbWRldi1cXHUwMDNlYWxwaGEyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyNS9yZWdkLmMtNzctXFx0aW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeC5oPTU1Mj11OCBtdDc5MnhfYWNwaV9nZXRfZmxhZ3Moc3RydWN0IG10NzkyeF9waHkgKnBoeSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaDo1NTM6dTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeC5oLTU1NC0jZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD01NjY9c3RhdGljIGlubGluZSB1OCBtdDc5MnhfYWNwaV9nZXRfZmxhZ3Moc3RydWN0IG10NzkyeF9waHkgKnBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4LmgtNTcwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4Lmg6NTcxOnN0YXRpYyBpbmxpbmUgdTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4LmgtNTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDQ5PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDcyOnUzMiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9jb25mKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3My17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ4OC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0ODk6RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjUzLjczNzI2MTc4MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODYyMTA2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgTVQ3OTIxL01UNzkyNSBXaS1GaSBDYXJkIEVtdWxhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIE1UNzkyMSBhbmQgTVQ3OTI1IFdpLUZpIGNhcmRzIGZyb20gTWVkaWF0ZWsuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGVtdWxhdGUgdGhlc2U/IE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBhdHRhY2sgc3VyZmFjZS4gVGhlIE1UNzkyMSBhcHBlYXJzIHRvIGJlIGEgUENJZS9VU0IvU0RJTyBkZXZpY2UsIHdoaWNoIGltbWVkaWF0ZWx5IGdpdmVzIHVzIGEgZmV3IHBvaW50cyBvZiBlbnRyeSB0byBleHBsb3JlLiBUaGVuIEkgcmVtZW1iZXJlZCBzeXprYWxsZXIgaGFzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcy4gSW50ZXJlc3RpbmcuLi4gZG9lcyB0aGUgTVQ3OTIxIGV2ZW4gKmhhdmUqIGEgVVNCIGRyaXZlcj8gVGhhdCdzIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIEkgbmVlZCB0byBjb25maXJtLiBLbm93aW5nIHRoYXQgd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCB0aGUgdmlhYmlsaXR5IG9mIHVzaW5nIFVTQiBmdXp6aW5nIGFzIGFuIGVtdWxhdGlvbiB2ZWN0b3IuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZHJpdmVyIGxhbmRzY2FwZSBmb3IgdGhhdCBjYXJkIHNwZWNpZmljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY2MSwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjU3LjEyMzQ3NDUzMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM5ODI4MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm10NzkyMXVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfTVQ3OTIxUykgKz0gbXQ3OTIxcy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTVQ3OTIxVSkgKz0gbXQ3OTIxdS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGUtNy1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlPTExPW10NzkyMXMteSA6PSBzZGlvLm8gc2Rpb19tYWMubyBzZGlvX21jdS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGU6MTI6bXQ3OTIxdS15IDo9IHVzYi5vXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoxNTpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbXQ3OTIxdV9kZXZpY2VfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNi1cXHR7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGU4ZCwgMHg3OTAyLCAweGZmLCAweGZmLCAweGZmKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jPTM1PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNjptdDc5MjF1X21jdV9zZW5kX21lc3NhZ2Uoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM3LVxcdFxcdFxcdCBpbnQgY21kLCBpbnQgKnNlcSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjY1OnN0YXRpYyBpbnQgbXQ3OTIxdV9tY3VfaW5pdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTcwLVxcdFxcdC50YWlscm9vbSA9IE1UX1VTQl9UQUlMX1NJWkUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6NzE6XFx0XFx0Lm1jdV9za2Jfc2VuZF9tc2cgPSBtdDc5MjF1X21jdV9zZW5kX21lc3NhZ2UsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtNzItXFx0XFx0Lm1jdV9wYXJzZV9yZXNwb25zZSA9IG10NzkyMV9tY3VfcGFyc2VfcmVzcG9uc2UsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy04OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzo4OTpzdGF0aWMgaW50IG10NzkyMXVfbWFjX3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMTQ5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjE1MDpzdGF0aWMgaW50IG10NzkyMXVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pbnRmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTE1MS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMTcxLVxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3OTJ4X2hpZl9vcHMgaGlmX29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoxNzI6XFx0XFx0Lm1jdV9pbml0ID0gbXQ3OTIxdV9tY3VfaW5pdCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0xNzMtXFx0XFx0LmluaXRfcmVzZXQgPSBtdDc5Mnh1X2luaXRfcmVzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MTc0OlxcdFxcdC5yZXNldCA9IG10NzkyMXVfbWFjX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTE3NS1cXHR9O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMjYzLSNpZmRlZiBDT05GSUdfUE1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzoyNjQ6c3RhdGljIGludCBtdDc5MjF1X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0yNjUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMjkwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjI5MTpzdGF0aWMgaW50IG10NzkyMXVfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTI5Mi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zMzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzM0Ok1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBtdDc5MjF1X2RldmljZV90YWJsZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzM1LU1PRFVMRV9GSVJNV0FSRShNVDc5MjFfRklSTVdBUkVfV00pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jPTMzNj1NT0RVTEVfRklSTVdBUkUoTVQ3OTIxX1JPTV9QQVRDSCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjMzODpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbXQ3OTIxdV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzM5LVxcdC5uYW1lXFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNDA6XFx0LmlkX3RhYmxlXFx0PSBtdDc5MjF1X2RldmljZV90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYzozNDE6XFx0LnByb2JlXFx0XFx0PSBtdDc5MjF1X3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM0Mi1cXHQuZGlzY29ubmVjdFxcdD0gbXQ3OTJ4dV9kaXNjb25uZWN0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jLTM0My0jaWZkZWYgQ09ORklHX1BNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzQ0OlxcdC5zdXNwZW5kXFx0PSBtdDc5MjF1X3N1c3BlbmQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzQ1OlxcdC5yZXN1bWVcXHRcXHQ9IG10NzkyMXVfcmVzdW1lLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3VzYi5jOjM0NjpcXHQucmVzZXRfcmVzdW1lXFx0PSBtdDc5MjF1X3Jlc3VtZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zNDctI2VuZGlmIC8qIENPTkZJR19QTSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmMtMzUwLX07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvdXNiLmM6MzUxOm1vZHVsZV91c2JfZHJpdmVyKG10NzkyMXVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS91c2IuYy0zNTItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM2OjU4Ljg2MzMwODMzM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDQwMzgxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBhIFVTQiBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBhIFVTQiBkcml2ZXIgZm9yIHRoZSBNVDc5MjEsIGdvb2QsIHRoYXQncyB3aGF0IEknbSBsb29raW5nIGZvci4gQnV0IGhvbGQgb24sIHRoZSBwYXRjaCBpdHNlbGYgaXMgaW4gYG10NzkyeF9hY3BpX3Nhci5jYD8gVGhhdCdzIGEgYml0IG9kZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgaXMgdHlwaWNhbGx5IGFzc29jaWF0ZWQgd2l0aCBwb3dlciBtYW5hZ2VtZW50IGFuZCB0aGVybWFsIHJlZ3VsYXRpb24sIG9mdGVuIGxpbmtlZCB0byBiYXR0ZXJ5LXBvd2VyZWQgZGV2aWNlcyBvciB0aG9zZSB3aXRoIHBvdGVudGlhbCBmb3Igc2lnbmlmaWNhbnQgaGVhdCBnZW5lcmF0aW9uLiBJIHdvdWxkbid0IGluc3RpbmN0aXZlbHkgY29ubmVjdCBBQ1BJIFNBUiBkaXJlY3RseSB0byBhIFVTQiBkZXZpY2UsIHRob3VnaCB0aGVyZSBtaWdodCBiZSBhIHJlYXNvbiBmb3IgdGhpcyBJJ20gbm90IGltbWVkaWF0ZWx5IHNlZWluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmZgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgdGhlIEFDUEkgdGFibGUgZGF0YSwgc2luY2UgdGhpcyBpcyB3aGVyZSB0aGUgbGluayBiZXR3ZWVuIEFDUEkgYW5kIHRoZSBVU0IgZGV2aWNlIHdvdWxkIGJlIGVzdGFibGlzaGVkIGlmIGl0IGV4aXN0cy4gS25vd2luZyB0aGUgcmV0cmlldmFsIG1ldGhvZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBvZiB0aGUgcGF0Y2guIElzIHRoaXMgdGFibGUgdXNlZCB0byBjb25maWd1cmUgZGV2aWNlIHBvd2VyIHN0YXRlcyBvbiBVU0IgZGV2aWNlcywgb3IgaXMgaXQgZ2V0dGluZyBjYWxsZWQgaW4gZXJyb3I/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzowMi41NjczNDkwNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzA1ODkxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00MTY9c3RhdGljIHUzMlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDE3Om10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQ3Mj11MzIgbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfY29uZihzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ3OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQ4MDpcXHRjb25maWcgPSBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhwaHksIGFscGhhMik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00ODEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjA0LjQzNzk0NjIwNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ4ODYwMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gdGhlIE1UNzkyeCBBQ1BJIFRhYmxlIFBhcnNpbmcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92M2AgaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHVuZGVyc3RhbmQgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIHJvdXRpbmUuIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHRoZSBBQ1BJIHRhYmxlLiBJcyBpdCBhIHdlbGwtZGVmaW5lZCBzdHJ1Y3R1cmUgb3Igc29tZXRoaW5nIG1vcmUgYWQtaG9jPyBHaXZlbiB0aGUgdmVyc2lvbiBudW1iZXIgKHYzKSwgdGhlcmUncyBsaWtlbHkgZXZvbHV0aW9uIGluIHRoZSB0YWJsZSBmb3JtYXQgdG8gY29uc2lkZXIsIGFuZCB0aGVyZWZvcmUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKG9yIHRoZSBsYWNrIHRoZXJlb2YpIHdpbGwgYmUgaW1wb3J0YW50IHRvIGdyYXNwLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBkYXRhIGlzIGJlaW5nIGV4dHJhY3RlZDogaXMgdGhpcyBwcmltYXJpbHkgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gV2hhdCBhcmUgdGhlIGtleSBmaWVsZHMgdGhlIGRyaXZlciByZWxpZXMgdXBvbj8gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYyDigJMgdGhpbmdzIGxpa2UgYXNzdW1pbmcgc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb24gbGV2ZWxzLCBpbmNvcnJlY3QgbGVuZ3RoIGNhbGN1bGF0aW9ucywgb3IgYnl0ZS1vcmRlciBpc3N1ZXMg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXJyb3ItaGFuZGxpbmcgYW5kIGhvdyBncmFjZWZ1bGx5IGl0IHJlc3BvbmRzIHRvIGNvcnJ1cHRlZCBvciBtaXNzaW5nIGRhdGEgd2l0aGluIHRoZSB0YWJsZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB2YWxpZGF0aW9uIGNoZWNrcyBhcmUgdGhvcm91Z2gsIGFuZCBob3cgdGhleSByZXBvcnQvaGFuZGxlIGVycm9ycy4gRmluYWxseSwgd2hhdCdzIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgQUNQSSBtZXRob2RzIG9yIHN0cnVjdHVyZXMgdG8gZXN0YWJsaXNoIHBvd2VyIHN0YXRlcyBvciBvdGhlciBmdW5jdGlvbmFsaXR5PyBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgbWFwIHRoZSBjb2RlIGxvZ2ljIGFuZCBhbnkgYXNzdW1wdGlvbnMgd2l0aGluLCBzbyBJIGNhbiBwcmVkaWN0IGhvdyBpdCdsbCBiZWhhdmUgaW4gcmVhbC13b3JsZCBzY2VuYXJpb3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MDgsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzowOC42ODY4MDkxNTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MTA6XFx0XFx0aWYgKGNsLVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2UgMSBcXHUwMDI2XFx1MDAyNiBjbC1cXHUwMDNlY2w1Zzlbcm93XSBcXHUwMDI2IEJJVChjb2x1bW4pKVxcbiA0MTE6XFx0XFx0XFx0Y29uZmlnIHw9IChtb2RlXzVnOSBcXHUwMDI2IDB4Myk7XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdHJldHVybiBjb25maWc7XFxuIDQxNDpcXHR9XFxuIDQxNTpcXHRcXG4gNDE2OlxcdHN0YXRpYyB1MzJcXG4gNDE3OlxcdG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG4gNDE4OlxcdHtcXG4gNDE5OlxcdFxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cXHUwMDNlYWNwaXNhcjtcXG4gNDIwOlxcdFxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbF92MyAqY2wgPSBzYXItXFx1MDAzZWNvdW50cnlsaXN0X3YzO1xcbiA0MjE6XFx0XFx0aW50IGNvbCwgcm93LCBpO1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRpZiAoc2FyLVxcdTAwM2V2ZXIgIT0gMylcXG4gNDI0OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA0MjU6XFx0XFxuIDQyNjpcXHRcXHRpZiAoIWNsKVxcbiA0Mjc6XFx0XFx0XFx0cmV0dXJuIE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRDtcXG4gNDI4OlxcdFxcbiA0Mjk6XFx0XFx0aWYgKGNsLVxcdTAwM2Vtb2RlX2JlID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKVxcbiA0MzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDQzMTpcXHRcXG4gNDMyOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYmUpOyBpKyspIHtcXG4gNDMzOlxcdFxcdFxcdGNvbCA9IDcgLSBpICUgODtcXG4gNDM0OlxcdFxcdFxcdHJvdyA9IGkgLyA4O1xcbiA0MzU6XFx0XFx0XFx0aWYgKCFtZW1jbXAoY2NfbGlzdF9iZVtpXSwgYWxwaGEyLCAyKSlcXG4gNDM2OlxcdFxcdFxcdFxcdHJldHVybiBtdDc5MnhfYWNwaV9nZXRfbXRjbF9tYXBfdjMocm93LCBjb2wsIGNsKTtcXG4gNDM3OlxcdFxcdH1cXG4gNDM4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfZXUpOyBpKyspIHtcXG4gNDM5OlxcdFxcdFxcdGlmICghbWVtY21wKGNjX2xpc3RfZXVbaV0sIGFscGhhMiwgMikpXFxuIDQ0MDpcXHRcXHRcXHRcXHRyZXR1cm4gbXQ3OTJ4X2FjcGlfZ2V0X210Y2xfbWFwX3YzKDMsIDcsIGNsKTtcXG4gNDQxOlxcdFxcdH1cXG4gNDQyOlxcdFxcbiA0NDM6XFx0b3V0OlxcbiA0NDQ6XFx0XFx0LyogRGVwZW5kcyBvbiBkcml2ZXIgKi9cXG4gNDQ1OlxcdFxcdHJldHVybiAweDIwO1xcbiA0NDY6XFx0fVxcbiA0NDc6XFx0XFxuIDQ0ODpcXHRzdGF0aWMgdTMyXFxuIDQ0OTpcXHRtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibChzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuIDQ1MDpcXHR7XFxuIDQ1MTpcXHRcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuIDQ1MjpcXHRcXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2wgKmNsID0gc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdDtcXG4gNDUzOlxcdFxcdGludCBjb2wsIHJvdywgaTtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0aWYgKCFjbClcXG4gNDU2OlxcdFxcdFxcdHJldHVybiBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSUQ7XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGNjX2xpc3RfYWxsKTsgaSsrKSB7XFxuIDQ1OTpcXHRcXHRcXHRjb2wgPSA3IC0gaSAlIDg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjA4LjY4NjkwNTM2M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg2ODEyMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgcGh5LVx1MDAzZWFjcGlzYXJgIFZhbHVlKipcblxuQWxyaWdodCwgdGhlIGNvZGUncyBwdWxsaW5nIGRhdGEgZnJvbSBgcGh5LVx1MDAzZWFjcGlzYXJgLiBDbGFzc2ljLiBCdXQgbXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCB3aGVyZSB0aGUgaGVsbCBpcyBgYWNwaXNhcmAgZ2V0dGluZyBpdHMgdmFsdWU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cuIFRoaXMgaXNuJ3QganVzdCBhIHJhbmRvbSB2YXJpYWJsZTsgaXQncyBsaWtlbHkgY3J1Y2lhbCBmb3Igc29tZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBhIHNwZWNpZmljIGJ1cyBvciBkZXZpY2UuIElzIGl0IGEgcmVnaXN0ZXIgcmVhZCwgc29tZXRoaW5nIGRlcml2ZWQgZnJvbSBhIG1vcmUgY29tcGxleCBjYWxjdWxhdGlvbiwgb3IgcGVyaGFwcyBhIHZhbHVlIHBhc3NlZCBpbiBmcm9tIHNvbWV3aGVyZSBlbHNlIGR1cmluZyBpbml0aWFsaXphdGlvbj8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gdHJhY2UgYmFjayB0aHJvdWdoIHRoZSBjb2RlLCBsb29raW5nIGZvciB0aGUgYXNzaWdubWVudC4gSSdtIGhvcGluZyBpdCdzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYXNzaWdubWVudCwgYnV0IGtub3dpbmcgaG93IHRoZXNlIHRoaW5ncyB1c3VhbGx5IGdvLCBJJ20gcHJlcGFyZWQgZm9yIGEgcmFiYml0IGhvbGUuIExldCdzIHNlZS4uLiBpcyB0aGVyZSBhIGNsZWFyIGluaXRpYWxpemF0aW9uIHBhdGg/IE9yIGFtIEkgZ29pbmcgdG8gYmUgZGl2aW5nIGludG8gaW50ZXJydXB0IGhhbmRsZXJzIGFuZCBBQ1BJIHRhYmxlcz8gVGltZSB0byBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTYwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzoxMi4zNzM3MjAyNzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTIzNTU0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWNwaXNhciA9XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9MTkzPWludCBtdDc5MnhfaW5pdF9hY3BpX3NhcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMjYtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjI3OlxcdGRldi1cXHUwMDNlcGh5LmFjcGlzYXIgPSBhc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zNDg9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MzUwOlxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFjcGlzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNTEtXFx0c3RydWN0IG10NzkyeF9hc2FyX2ZnICpmZztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzc6MTQuMjY2MDg0MDg1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NTM2NTU2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIGBtdDc5MnhfaW5pdF9hY3BpX3NhcmAuLi4qKlxuXG5SaWdodCwgbGV0J3MgcHVsbCB1cCB0aGF0IGBtdDc5MnhfaW5pdF9hY3BpX3NhcmAgZnVuY3Rpb24uIEknbSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIG1vZHVsZSBoYW5kbGVzIFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSAoU0FSKSBjb21wbGlhbmNlIHRocm91Z2ggQUNQSS4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgTVQ3OTJ4IHNlcmllcywgd2hpY2ggb2Z0ZW4gaW50ZWdyYXRlcyBib3RoIFdpLUZpIGFuZCBCbHVldG9vdGgsIFNBUiBtaXRpZ2F0aW9uIGJlY29tZXMgYSBjb21wbGV4IGp1Z2dsaW5nIGFjdCBvZiBwb3dlciBsZXZlbHMgYW5kIHJhZGlvIGNvbnRyb2wuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgQUNQSSB0YWJsZXMgYXJlIHBhcnNlZCBhbmQgaW50ZXJwcmV0ZWQgdG8gZHluYW1pY2FsbHkgYWRqdXN0IHRoZSB0cmFuc21pdCBwb3dlciB0byBzdGF5IHdpdGhpbiByZWd1bGF0b3J5IGxpbWl0cywgcGFydGljdWxhcmx5IHdoZW4gdGhlIGRldmljZSBpcyBvcGVyYXRpbmcgbmVhciBhIHVzZXIncyBib2R5LlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZSB0eXBpY2FsIEFDUEkgbWV0aG9kcyBpbnZvbHZlZDogYF9QU1ZgLCBgX1NJT2AsIHBvdGVudGlhbGx5IGBfUFBEYCwgYW5kIGhvdyB0aGV5J3JlIHVzZWQgdG8gcmVhZCBTQVItc3BlY2lmaWMgZGF0YSwgZGVmaW5lIHBvd2VyIHN0YXRlcywgb3IgdHJpZ2dlciByYWRpbyBjb25maWd1cmF0aW9ucy4gQXJlIHRoZXkgdXNpbmcgdGhlIHN0YW5kYXJkIFNBUiBjb250cm9sIG1ldGhvZHM/IE9yIGlzIGl0IGEgY3VzdG9tIGFwcHJvYWNoPyBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBmaXJtd2FyZSDigJMgaG93IGRhdGEgaXMgcGFzc2VkIGJldHdlZW4gdGhlIEFDUEkgbGF5ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uLiBJJ2xsIGFsc28gd2FudCB0byBsb29rIGZvciBhbnkgcG93ZXItc2F2aW5nIHN0cmF0ZWdpZXMgaW1wbGVtZW50ZWQgYWxvbmdzaWRlIFNBUiBjb250cm9sLCBhcyB0aGVzZSBvZnRlbiBnbyBoYW5kLWluLWhhbmQuIEZvciBleGFtcGxlLCBhcmUgdGhleSB1c2luZyBhIHNlcGFyYXRlIHBvd2VyIGRvbWFpbiBmb3IgdGhlIHJhZGlvPyBBbmQgSSBkZWZpbml0ZWx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBlcnJvciBoYW5kbGluZyBvciBmYWxsYmFjayBtZWNoYW5pc21zIGluIGNhc2UgdGhlIEFDUEkgZGF0YSBpcyBtYWxmb3JtZWQgb3IgbWlzc2luZy4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyByb2J1c3QgYW5kIHdlbGwtZGVzaWduZWQgZm9yIHJlYWwtd29ybGQgc2NlbmFyaW9zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU3OCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjE5LjIxOTc0MzMzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Nzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHRyZXR1cm4gMDtcXG4gMTkxOlxcdH1cXG4gMTkyOlxcdFxcbiAxOTM6XFx0aW50IG10NzkyeF9pbml0X2FjcGlfc2FyKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuIDE5NDpcXHR7XFxuIDE5NTpcXHRcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyO1xcbiAxOTY6XFx0XFx0aW50IHJldDtcXG4gMTk3OlxcdFxcbiAxOTg6XFx0XFx0YXNhciA9IGRldm1fa3phbGxvYyhkZXYtXFx1MDAzZW10NzYuZGV2LCBzaXplb2YoKmFzYXIpLCBHRlBfS0VSTkVMKTtcXG4gMTk5OlxcdFxcdGlmICghYXNhcilcXG4gMjAwOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbChkZXYsICh1OCAqKilcXHUwMDI2YXNhci1cXHUwMDNlY291bnRyeWxpc3QsIFxcdTAwMjZhc2FyLVxcdTAwM2V2ZXIpO1xcbiAyMDM6XFx0XFx0aWYgKHJldCkge1xcbiAyMDQ6XFx0XFx0XFx0ZGV2bV9rZnJlZShkZXYtXFx1MDAzZW10NzYuZGV2LCBhc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdCk7XFxuIDIwNTpcXHRcXHRcXHRhc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdCA9IE5VTEw7XFxuIDIwNjpcXHRcXHR9XFxuIDIwNzpcXHRcXG4gMjA4OlxcdFxcdHJldCA9IG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGRzKGRldiwgKHU4ICoqKVxcdTAwMjZhc2FyLVxcdTAwM2VkeW4sIGFzYXItXFx1MDAzZXZlcik7XFxuIDIwOTpcXHRcXHRpZiAocmV0KSB7XFxuIDIxMDpcXHRcXHRcXHRkZXZtX2tmcmVlKGRldi1cXHUwMDNlbXQ3Ni5kZXYsIGFzYXItXFx1MDAzZWR5bik7XFxuIDIxMTpcXHRcXHRcXHRhc2FyLVxcdTAwM2VkeW4gPSBOVUxMO1xcbiAyMTI6XFx0XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHRcXHQvKiBNVEdTIGlzIG9wdGlvbmFsICovXFxuIDIxNTpcXHRcXHRyZXQgPSBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRncyhkZXYsICh1OCAqKilcXHUwMDI2YXNhci1cXHUwMDNlZ2VvLCBhc2FyLVxcdTAwM2V2ZXIpO1xcbiAyMTY6XFx0XFx0aWYgKHJldCkge1xcbiAyMTc6XFx0XFx0XFx0ZGV2bV9rZnJlZShkZXYtXFx1MDAzZW10NzYuZGV2LCBhc2FyLVxcdTAwM2VnZW8pO1xcbiAyMTg6XFx0XFx0XFx0YXNhci1cXHUwMDNlZ2VvID0gTlVMTDtcXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0LyogTVRGRyBpcyBvcHRpb25hbCAqL1xcbiAyMjI6XFx0XFx0cmV0ID0gbXQ3OTJ4X2FzYXJfYWNwaV9yZWFkX210ZmcoZGV2LCAodTggKiopXFx1MDAyNmFzYXItXFx1MDAzZWZnKTtcXG4gMjIzOlxcdFxcdGlmIChyZXQpIHtcXG4gMjI0OlxcdFxcdFxcdGRldm1fa2ZyZWUoZGV2LVxcdTAwM2VtdDc2LmRldiwgYXNhci1cXHUwMDNlZmcpO1xcbiAyMjU6XFx0XFx0XFx0YXNhci1cXHUwMDNlZmcgPSBOVUxMO1xcbiAyMjY6XFx0XFx0fVxcbiAyMjc6XFx0XFx0ZGV2LVxcdTAwM2VwaHkuYWNwaXNhciA9IGFzYXI7XFxuIDIyODpcXHRcXG4gMjI5OlxcdFxcdHJldHVybiAwO1xcbiAyMzA6XFx0fVxcbiAyMzE6XFx0RVhQT1JUX1NZTUJPTF9HUEwobXQ3OTJ4X2luaXRfYWNwaV9zYXIpO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRzdGF0aWMgczhcXG4gMjM0OlxcdG10NzkyeF9hc2FyX2dldF9nZW9fcHdyKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksXFxuIDIzNTpcXHRcXHRcXHRcXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kLCBzOCBkeW5fcG93ZXIpXFxuIDIzNjpcXHR7XFxuIDIzNzpcXHRcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbiAyMzg6XFx0XFx0c3RydWN0IG10NzkyeF9hc2FyX2dlb19iYW5kICpiYW5kX3B3cjtcXG4gMjM5OlxcdFxcdHM4IGdlb19wb3dlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzc6MTkuMjE5ODQyODIxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTcxMjE0MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQUNQSSBUYWJsZSBFeGFtaW5hdGlvbiAtIEZvY3VzZWQgb24gTVQ3OTJ4IEFTQVIgXHUwMDI2IE1UQ0wqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbGAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgdGFibGUgcmVhZGVyLiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgQUNQSSAoQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlKSBzeXN0ZW0sIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlbGV2YW50IHRvLCBhbmQgaG9wZWZ1bGx5LCBjb250YWlucyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIE1UNzkyeCBjaGlwc2V0J3MgQVNBUiAoQWR2YW5jZWQgU3lzdGVtIEFyY2hpdGVjdHVyZSBSZWdpc3Rlcikgb3IgdGhlIE1UQ0wgKE1lZGlhVGVrIENvbnRyb2wgTGFuZ3VhZ2UpIHN0cnVjdHVyZXMuXG5cbkknbSBtYWtpbmcgdGhlIGFzc3VtcHRpb24gdGhhdCBBU0FSIGxpa2VseSByZWxhdGVzIHRvIG1vcmUgaGFyZHdhcmUtbGV2ZWwgY29uZmlndXJhdGlvbiwgcGVyaGFwcyBjbG9jayBzZXR0aW5ncywgcG93ZXIgbWFuYWdlbWVudCBzcGVjaWZpY3MsIG9yIGV2ZW4gbWVtb3J5IG1hcHBpbmdzIHVuaXF1ZSB0byB0aGUgTVQ3OTJ4IGltcGxlbWVudGF0aW9uLiBXaGlsZSBNVENMIHByb2JhYmx5IGNvbmZpZ3VyZXMgYXNwZWN0cyBvZiBNZWRpYVRlay1zcGVjaWZpYyBmaXJtd2FyZS5cblxuVGhlIHN0cnVjdHVyZSBvZiB0aGUgQUNQSSB0YWJsZXMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBoZXJlLiBJJ20gZ29pbmcgdG8gbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiB0aGVzZSB0YWJsZXMgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgc3RydWN0dXJlZC4gVGhlIEJJT1MncyBBQ1BJIGltcGxlbWVudGF0aW9uIGlzIGxpa2VseSBnb2luZyB0byBkZWZpbmUgdGhlIGxheW91dC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCdzIHVzaW5nIHN0YW5kYXJkIEFDUEkgbWV0aG9kcywgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMsIG9yIGEgY29tYmluYXRpb24gb2YgYm90aC4gSSdsbCBuZWVkIHRvIHdhdGNoIGZvciB0aG9zZSBxdWlya3MuXG5cbkknbGwgYmUgbG9va2luZyBhdCB0aGUgY29kZSB0byBzZWUgd2hhdCBBQ1BJIG1ldGhvZHMgaXQncyB1c2luZywgaG93IHRoZSB0YWJsZSBpcyBwYXJzZWQgYW5kIHZhbGlkYXRlZCwgYW5kIHdoYXQgZGF0YSBpcyBiZWluZyBleHRyYWN0ZWQuIFRoZSBmdW5jdGlvbidzIHJvbGUgaW4gdGhlIGRyaXZlciBvciBmaXJtd2FyZSBjb250ZXh0IGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgaGVyZS4gV2hhdCBvdGhlciBzZWN0aW9ucyBvZiB0aGUgY29kZSBjYWxsIHRoaXMgZnVuY3Rpb24/IERvZXMgaXQgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgZ3JhY2VmdWxseT8gSXMgaXQgb3B0aW1pemVkIGZvciBwZXJmb3JtYW5jZT8gV2hhdCBzcGVjaWZpYyByZXNvdXJjZXMgYW5kL29yIGNvbmZpZ3VyYXRpb25zIGNhbiBpdCBpZGVudGlmeT8gVGhvc2UgYXJlIHNvbWUgb2YgdGhlIHF1ZXN0aW9ucyBJIGFtIGFza2luZyBteXNlbGYuIEknbGwgYmUgZm9jdXNlZCBvbiBob3cgaXQgZXh0cmFjdHMgdGhlIEFTQVIgYW5kL29yIE1UQ0wtcmVsYXRlZCBkYXRhLCBhbmQgY3JpdGljYWxseSwgaG93IHRoYXQgZGF0YSBpcyB0aGVuIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NDcsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjIzLjUzNjk2Nzc5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChDKSAyMDIzIE1lZGlhVGVrIEluYy4gKi9cXG4gICAzOlxcdFxcbiAgIDQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcXCJtdDc5MnguaFxcXCJcXG4gICA2OlxcdFxcbiAgIDc6XFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY19saXN0X2FsbFtdID0ge1xcbiAgIDg6XFx0XFx0XFxcIjAwXFxcIiwgXFxcIkVVXFxcIiwgXFxcIkFSXFxcIiwgXFxcIkFVXFxcIiwgXFxcIkFaXFxcIiwgXFxcIkJZXFxcIiwgXFxcIkJPXFxcIiwgXFxcIkJSXFxcIixcXG4gICA5OlxcdFxcdFxcXCJDQVxcXCIsIFxcXCJDTFxcXCIsIFxcXCJDTlxcXCIsIFxcXCJJRFxcXCIsIFxcXCJKUFxcXCIsIFxcXCJNWVxcXCIsIFxcXCJNWFxcXCIsIFxcXCJNRVxcXCIsXFxuICAxMDpcXHRcXHRcXFwiTUFcXFwiLCBcXFwiTlpcXFwiLCBcXFwiTkdcXFwiLCBcXFwiUEhcXFwiLCBcXFwiUlVcXFwiLCBcXFwiUlNcXFwiLCBcXFwiU0dcXFwiLCBcXFwiS1JcXFwiLFxcbiAgMTE6XFx0XFx0XFxcIlRXXFxcIiwgXFxcIlRIXFxcIiwgXFxcIlVBXFxcIiwgXFxcIkdCXFxcIiwgXFxcIlVTXFxcIiwgXFxcIlZOXFxcIiwgXFxcIktIXFxcIiwgXFxcIlBZXFxcIixcXG4gIDEyOlxcdH07XFxuICAxMzpcXHRcXG4gIDE0OlxcdHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2NfbGlzdF9ldVtdID0ge1xcbiAgMTU6XFx0XFx0XFxcIkFEXFxcIiwgXFxcIkFUXFxcIiwgXFxcIkJFXFxcIiwgXFxcIkJHXFxcIiwgXFxcIkNZXFxcIiwgXFxcIkNaXFxcIiwgXFxcIkhSXFxcIiwgXFxcIkRLXFxcIixcXG4gIDE2OlxcdFxcdFxcXCJFRVxcXCIsIFxcXCJGSVxcXCIsIFxcXCJGUlxcXCIsIFxcXCJERVxcXCIsIFxcXCJHUlxcXCIsIFxcXCJIVVxcXCIsIFxcXCJJU1xcXCIsIFxcXCJJRVxcXCIsXFxuICAxNzpcXHRcXHRcXFwiSVRcXFwiLCBcXFwiTFZcXFwiLCBcXFwiTElcXFwiLCBcXFwiTFRcXFwiLCBcXFwiTFVcXFwiLCBcXFwiTUNcXFwiLCBcXFwiTVRcXFwiLCBcXFwiTkxcXFwiLFxcbiAgMTg6XFx0XFx0XFxcIk5PXFxcIiwgXFxcIlBMXFxcIiwgXFxcIlBUXFxcIiwgXFxcIlJPXFxcIiwgXFxcIlNLXFxcIiwgXFxcIlNJXFxcIiwgXFxcIkVTXFxcIiwgXFxcIlNFXFxcIixcXG4gIDE5OlxcdFxcdFxcXCJDSFxcXCIsXFxuICAyMDpcXHR9O1xcbiAgMjE6XFx0XFxuICAyMjpcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjX2xpc3RfYmVbXSA9IHtcXG4gIDIzOlxcdFxcdFxcXCJBUlxcXCIsIFxcXCJCUlxcXCIsIFxcXCJCWVxcXCIsIFxcXCJDTFxcXCIsIFxcXCJJUVxcXCIsIFxcXCJNWFxcXCIsIFxcXCJPTVxcXCIsIFxcXCJSVVxcXCIsXFxuICAyNDpcXHRcXHRcXFwiUldcXFwiLCBcXFwiVk5cXFwiLCBcXFwiS1JcXFwiLCBcXFwiVUFcXFwiLCBcXFwiXFxcIiwgXFxcIlxcXCIsIFxcXCJcXFwiLCBcXFwiXFxcIixcXG4gIDI1OlxcdFxcdFxcXCJFVVxcXCIsIFxcXCJBVFxcXCIsIFxcXCJDTlxcXCIsIFxcXCJDQVxcXCIsIFxcXCJUV1xcXCIsIFxcXCJOWlxcXCIsIFxcXCJQSFxcXCIsIFxcXCJVS1xcXCIsXFxuICAyNjpcXHRcXHRcXFwiVVNcXFwiLFxcbiAgMjc6XFx0fTtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0c3RhdGljIGludFxcbiAgMzA6XFx0bXQ3OTJ4X2FjcGlfcmVhZChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqbWV0aG9kLCB1OCAqKnRibCwgdTMyICpsZW4pXFxuICAzMTpcXHR7XFxuICAzMjpcXHRcXHRzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9O1xcbiAgMzM6XFx0XFx0c3RydWN0IG10NzZfZGV2ICptZGV2ID0gXFx1MDAyNmRldi1cXHUwMDNlbXQ3NjtcXG4gIDM0OlxcdFxcdHVuaW9uIGFjcGlfb2JqZWN0ICpzYXJfcm9vdDtcXG4gIDM1OlxcdFxcdGFjcGlfaGFuZGxlIHJvb3QsIGhhbmRsZTtcXG4gIDM2OlxcdFxcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4gIDM3OlxcdFxcdHUzMiBpID0gMDtcXG4gIDM4OlxcdFxcdGludCByZXQ7XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdHJvb3QgPSBBQ1BJX0hBTkRMRShtZGV2LVxcdTAwM2VkZXYpO1xcbiAgNDE6XFx0XFx0aWYgKCFyb290KVxcbiAgNDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUocm9vdCwgbWV0aG9kLCBcXHUwMDI2aGFuZGxlKTtcXG4gIDQ1OlxcdFxcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcXG4gIDQ2OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE5VTEwsIE5VTEwsIFxcdTAwMjZidWYpO1xcbiAgNDk6XFx0XFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKVxcbiAgNTA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjIzLjUzNzA1NzQzMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI3ODg2MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBQ1BJIEhhbmRsZSBSZXRyaWV2YWwgaW4gUUVNVSBhbmQgQ29uc2lkZXJpbmcgRnV6emluZyBTdHJhdGVnaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGNhbGxpbmcgYGFjcGlfZ2V0X2hhbmRsZShBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldiksIG1ldGhvZCwgXHUwMDI2aGFuZGxlKWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkNhbiB3ZSBtYW5pcHVsYXRlIHRoZSBBQ1BJIHRhYmxlcyB3aXRoaW4gUUVNVSB0byBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoaXMgVVNCIGRldmljZT9cIiBJbiB0aGVvcnksIHllcywgYnV0IHN5emthbGxlciB0eXBpY2FsbHkgZG9lc24ndCBpbmplY3QgQUNQSSB0YWJsZXMgc3BlY2lmaWNhbGx5IGZvciBVU0IgZGV2aWNlcy4gV2UgKmNvdWxkKiB1c2UgYHN5el9tb3VudF9pbWFnZWAgb3Igc2ltaWxhciBnbG9iYWwgaW5qZWN0aW9uLCBidXQgdXN1YWxseSB0aGUgQUNQSSB0YWJsZXMgYXJlIHNldCB1bmxlc3Mgc3l6a2FsbGVyIGlzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgQUNQSSBpbmplY3Rpb24uXG5cbkhhbmcgb24uLi4gaXNuJ3QgdGhlcmUgc29tZSBBQ1BJIGZ1enppbmcgY2FwYWJpbGl0eSBpbiBzeXprYWxsZXI/IEl0J3MgdXN1YWxseSBmb3IgcGxhdGZvcm0gZGV2aWNlcywgdGhvdWdoLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgZm9yZ2V0dGluZyBzb21ldGhpbmcuIEFoLCByaWdodC4uLiBpZiB0aGUgdGFyZ2V0IGlzIGFjdHVhbGx5IGEgVVNCIGRldmljZSwgYEFDUElfSEFORExFKG1kZXYtXHUwMDNlZGV2KWAgd2lsbCAqbGlrZWx5KiBiZSBOVUxMLCB1bmxlc3MgdGhlIERTRFQgaGFyZGNvZGVzIGFuIEFDUEkgaGFuZGxlIGZvciB0aGUgVVNCIGRldmljZSwgd2hpY2ggaXMgdW51c3VhbC5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gd2hhdCBpZiB0aGlzIGlzbid0IFVTQj8gQ291bGQgdGhpcyBiZSBQQ0llPyBUaGUgYG10NzkyMWVgIGRyaXZlci4uLiB0aGF0J3MgdGhlIFBDSWUgZHJpdmVyLCBpc24ndCBpdD8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBZZWFoLCBJIHRoaW5rIGl0IGlzLiBPa2F5LCBsZXQncyBjb25maXJtIGBtdDc5MjFlYCBleGlzdHMuIFRoYXQncyB0aGUga2V5IHRvIGZpZ3VyaW5nIG91dCBob3cgdGhlIEFDUEkgaGFuZGxlIGlzIHJldHJpZXZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzoyOC42NjQ5NDcxOTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODI4ODE3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXQ3OTIxZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZT0zPW9iai0kKENPTkZJR19NVDc5MjFfQ09NTU9OKSArPSBtdDc5MjEtY29tbW9uLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19NVDc5MjFFKSArPSBtdDc5MjFlLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19NVDc5MjFTKSArPSBtdDc5MjFzLm9cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL01ha2VmaWxlPTk9bXQ3OTIxLWNvbW1vbi0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSArPSB0ZXN0bW9kZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvTWFrZWZpbGU6MTA6bXQ3OTIxZS15IDo9IHBjaS5vIHBjaV9tYWMubyBwY2lfbWN1Lm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9NYWtlZmlsZS0xMS1tdDc5MjFzLXkgOj0gc2Rpby5vIHNkaW9fbWFjLm8gc2Rpb19tY3Uub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg9MjcxPXZvaWQgbXQ3OTIxX21hY19yZXNldF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg6MjcyOmludCBtdDc5MjFlX3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgdm9pZCAqdHh3aV9wdHIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmgtMjczLVxcdFxcdFxcdCAgIGVudW0gbXQ3Nl90eHFfaWQgcWlkLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvbXQ3OTIxLmg9MzAzPWludCBtdDc5MjFfbWN1X3BhcnNlX3Jlc3BvbnNlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgaW50IGNtZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL210NzkyMS5oLTMwNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaDozMDY6aW50IG10NzkyMWVfZHJpdmVyX293bihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaDozMDc6aW50IG10NzkyMWVfbWFjX3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL210NzkyMS5oOjMwODppbnQgbXQ3OTIxZV9tY3VfaW5pdChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9tdDc5MjEuaC0zMDktaW50IG10NzkyMXNfd2ZzeXNfcmVzZXQoc3RydWN0IG10NzkyeF9kZXYgKmRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYz0zNz1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfYXNwbSwgXFxcImRpc2FibGUgUENJIEFTUE0gc3VwcG9ydFxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jOjM5OnN0YXRpYyBpbnQgbXQ3OTIxZV9pbml0X3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmMtNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmMtNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM6NDQ6c3RhdGljIHZvaWQgbXQ3OTIxZV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTQ1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jPTI1OT1zdGF0aWMgaW50IG10NzkyMV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0yNzAtXFx0XFx0LnRva2VuX3NpemUgPSBNVDc5MjFfVE9LRU5fU0laRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzoyNzE6XFx0XFx0LnR4X3ByZXBhcmVfc2tiID0gbXQ3OTIxZV90eF9wcmVwYXJlX3NrYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy0yNzItXFx0XFx0LnR4X2NvbXBsZXRlX3NrYiA9IG10NzZfY29ubmFjX3R4X2NvbXBsZXRlX3NrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTI4Mi1cXHRzdGF0aWMgY29uc3Qgc3RydWN0IG10NzkyeF9oaWZfb3BzIG10NzkyMV9wY2llX29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYzoyODM6XFx0XFx0LmluaXRfcmVzZXQgPSBtdDc5MjFlX2luaXRfcmVzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM6Mjg0OlxcdFxcdC5yZXNldCA9IG10NzkyMWVfbWFjX3Jlc2V0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jOjI4NTpcXHRcXHQubWN1X2luaXQgPSBtdDc5MjFlX21jdV9pbml0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaS5jLTI4Ni1cXHRcXHQuZHJ2X293biA9IG10NzkyeGVfbWN1X2Rydl9wbWN0cmwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYz00NDc9c3RhdGljIHZvaWQgbXQ3OTIxX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpLmM6NDU1OlxcdG10NzkyMWVfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2kuYy00NTYtXFx0c2V0X2JpdChNVDc2X1JFTU9WRUQsIFxcdTAwMjZtZGV2LVxcdTAwM2VwaHkuc3RhdGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jLTctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jOjg6aW50IG10NzkyMWVfdHhfcHJlcGFyZV9za2Ioc3RydWN0IG10NzZfZGV2ICptZGV2LCB2b2lkICp0eHdpX3B0cixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWFjLmMtOS1cXHRcXHRcXHQgICBlbnVtIG10NzZfdHhxX2lkIHFpZCwgc3RydWN0IG10NzZfd2NpZCAqd2NpZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy01NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWFjLmM6NTY6aW50IG10NzkyMWVfbWFjX3Jlc2V0KHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jLTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tYWMuYy0xMDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21hYy5jOjEwMjpcXHRlcnIgPSBtdDc5MjFlX2RyaXZlcl9vd24oZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWFjLmMtMTAzLVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmMtNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmM6NzppbnQgbXQ3OTIxZV9kcml2ZXJfb3duKHN0cnVjdCBtdDc5MnhfZGV2ICpkZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jPTIyPW10NzkyMV9tY3Vfc2VuZF9tZXNzYWdlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYy00MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmM6NDE6aW50IG10NzkyMWVfbWN1X2luaXQoc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmMtNDIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MjEvcGNpX21jdS5jLTUxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTIxL3BjaV9tY3UuYzo1MjpcXHRlcnIgPSBtdDc5MjFlX2RyaXZlcl9vd24oZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyMS9wY2lfbWN1LmMtNTMtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzc6MzAuNTQ3ODM0NTYyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5MTU5NTQzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNVDc5MjEgUENJZSBEcml2ZXIgaW4gYSBTeXprYWxsZXIgQ29udGV4dCoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBQQ0llIGRyaXZlciBmb3IgdGhlIE1UNzkyMSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCwgSSdtIGltbWVkaWF0ZWx5IHJ1bm5pbmcgaW50byBhbiBBQ1BJIHJvYWRibG9jay4gVGhlIGNvZGUncyB1c2luZyBgYWNwaV9nZXRfaGFuZGxlYCB0byBwYXJzZSBBQ1BJIHRhYmxlcywgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGhhbmRsZXMuIE5vdywgaW4gYSBRRU1VIGVudmlyb25tZW50LCB3aGljaCBpcyB3aGF0IFN5emthbGxlciB0eXBpY2FsbHkgdXNlcywgUENJZSBkZXZpY2VzICpkb24ndCogaGF2ZSBBQ1BJIGhhbmRsZXMgYnkgZGVmYXVsdCwgdW5sZXNzIHRoZXkncmUgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSBEU0RULiBBbmQgU3l6a2FsbGVyLCBmcm9tIHdoYXQgSSd2ZSBzZWVuLCBkb2Vzbid0IHVzdWFsbHkgZGVmaW5lIE1lZGlhdGVrIFdpLUZpIGNhcmRzIHdpdGhpbiB0aGF0IERTRFQuIFNvLCB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIHBhdGggbWlnaHQgYmUgdW5yZWFjaGFibGUgaW4gYSBTeXprYWxsZXItZHJpdmVuIFFFTVUgc2V0dXAuXG5cbkxldCdzIHRyYWNlIGl0LiBJZiBgQUNQSV9IQU5ETEUobWRldi1cdTAwM2VkZXYpYCBpcyBOVUxMLCB0aGUgYG10NzkyeF9hY3BpX3JlYWRgIGZ1bmN0aW9uIHJldHVybnMgYC1FT1BOT1RTVVBQYC4gVGhhdCBmYWlsdXJlIGNhc2NhZGVzIHRvIGBtdDc5MnhfYXNhcl9hY3BpX3JlYWRfbXRjbGAsIHdoaWNoIGFsc28gcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGVuLCB3aXRoaW4gYG10NzkyeF9pbml0X2FjcGlfc2FyYCwgd2Ugc2VlIHRoYXQgZXJyb3IgaXMgaGFuZGxlZCwgdGhlIGBjb3VudHJ5bGlzdGAgaXMgc2V0IHRvIE5VTEwgaWYgdGhlIHJlYWQgZmFpbHMuIExhdGVyLCB3ZSBzZWUgaW4gYG10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzYCB0aGF0IGlmIGBzYXItXHUwMDNlY291bnRyeWxpc3RfdjNgIGlzIE5VTEwsIGl0IHJldHVybnMgYE1UNzkyWF9BQ1BJX01UQ0xfSU5WQUxJRGAuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgcHJvY2VlZHMuIEFuZCB0aGUga2V5IGlzLCBpZiBgc2FyLVx1MDAzZWNvdW50cnlsaXN0X3YzYCAqaXMqIE5VTEwsIHRoZW4gdGhlIGNoZWNrIG9uIGBjbC1cdTAwM2Vtb2RlX2JlYCB3aWxsIGJlIHNraXBwZWQsIHdoaWNoIGltcGxpZXMgdGhlIEFDUEkgcmVhZCBzdWNjZWVkZWQuIEZvciB0aGUgQUNQSSByZWFkIHRvIHN1Y2NlZWQsIGBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldilgIGhhcyB0byBiZSBub24tTlVMTCwgYW5kIGBhY3BpX2V2YWx1YXRlX29iamVjdGAgaGFzIHRvIHJldHVybiBhIHZhbGlkIGJ1ZmZlci5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiBTeXprYWxsZXIgc29tZWhvdyBtb2NrIHRoaXMgc2l0dWF0aW9uPyBDYW4gaXQgaW5qZWN0IGEgZmFrZSBBQ1BJIGhhbmRsZSBvciB0YWJsZSBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgUENJZSBkZXZpY2U/IE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlLCBpcyBwcm9iYWJseSBub3QuIFN5emthbGxlciBpcyBnb29kIGZvciBnZW5lcmljIEFDUEkgbWFuaXB1bGF0aW9uLCBidXQgaW5qZWN0aW5nIEFDUEkgdGFibGVzIGZvciAqc3BlY2lmaWMqIFBDSWUgZGV2aWNlcyBmZWVscyBsaWtlIGEgbGV2ZWwgb2Ygc29waGlzdGljYXRpb24gSSBoYXZlbid0IG9ic2VydmVkIGl0IGRvaW5nLiBJJ3ZlIHNlZW4gaXQgdXNlIGBzeXpfbW91bnRfaW1hZ2VgIHRvIGluamVjdCB0aGluZ3MsIGJ1dCBuZXZlciBhIFBDSWUgZGV2aWNlIEFDUEkuIFNvIGl0IHNlZW1zIHVubGlrZWx5LiBJIHZhZ3VlbHkgcmVjYWxsIHRoZXJlIGJlaW5nIGEgYHN5el9hY3BpX2luamVjdGAgb3Igc29tZXRoaW5nIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gZXhpc3QuIEkgc2hvdWxkIHByb2JhYmx5IGp1c3QgY2hlY2sgaWYgYW55IEFDUEkgaW5qZWN0aW9uIG9jY3VycyBpbiBTeXprYWxsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQ5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjM5LjQ2Mzc5MjI5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxMTQ1MjM5MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3l6X2FjcGlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjQxLjY3NTI1MzZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA5MzU0NDU3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBBQ1BJIFRhYmxlIEludGVyYWN0aW9uIGZvciBNZWRpYXRlayBXaS1GaSBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRlc3QgdGhlIE1lZGlhdGVrIFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaXRzIEFDUEkgaW50ZXJhY3Rpb25zLCB3aXRoaW4gU3l6a2FsbGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoZXJlJ3Mgbm8gZGVkaWNhdGVkIGBzeXpfYWNwaWAgZmVhdHVyZSwgd2hpY2ggaXMgdGhlIGZpcnN0IGNoYWxsZW5nZS4gVGhlbiBJIHN0YXJ0IHRoaW5raW5nLCBhcmUgdGhlcmUgYW55IHJlbGV2YW50IGNvbmZpZyBvcHRpb25zPyBDb3VsZCBJIGxldmVyYWdlIGBDT05GSUdfQUNQSV9DVVNUT01fRFNEVGAgb3IgYENPTkZJR19BQ1BJX1RBQkxFX1VQR1JBREVgPyBTeXprYWxsZXIgKmNhbiogdXNlIGFuIGBpbml0cmRgIHRvIHVwZ3JhZGUgQUNQSSB0YWJsZXMuIFRoZSBwcm9ibGVtIGlzLCBpdCB1c2VzIGEgZ2VuZXJpYyBpbml0cmQgYW5kIGRvZXNuJ3QgZHluYW1pY2FsbHkgdGFpbG9yIHRoZSBBQ1BJIHRhYmxlcyBmb3IgdGhlc2UgTWVkaWF0ZWsgV2ktRmkgY2FyZHMuXG5cbk5leHQsIEkgcmVtZW1iZXIgdGhlIGNvcmUgaXNzdWU6IHRoZSBNZWRpYXRlayBXaS1GaSBjYXJkIGlzbid0IGRpcmVjdGx5IGVtdWxhdGVkIGluIFFFTVUuIFdhaXQsIEkgc2hvdWxkIGRvdWJsZSBjaGVjaywgaXMgdGhlIE1UNzkyMSBlbXVsYXRlZCBpbiBRRU1VPyBObywgaXQgaXNuJ3QuIE5laXRoZXIgTVQ3OTIxIG5vciBNVDc5MjUgYXJlIGRpcmVjdGx5IGVtdWxhdGVkLlxuXG5CdXQgdGhlbiwgSSByZWNhbGwgU3l6a2FsbGVyJ3MgY2FwYWJpbGl0aWVzIHdpdGggYG1hYzgwMjExX2h3c2ltYCBhbmQgYHZoY2ktaGNkYC4gSXQgY2FuIGVtdWxhdGUgVVNCIGRldmljZXMuIElmIEkgY291bGQgZ2V0IFN5emthbGxlciB0byBlbXVsYXRlIGFuIE1UNzkyMSB2aWEgVVNCLCB1c2luZyBgdmhjaS1oY2RgIG9yIHBlcmhhcHMgZXZlbiBgZHVtbXlfaGNkYCwgdGhlIGBtdDc5MjF1YCBkcml2ZXIgKmNvdWxkKiBiaW5kIHRvIGl0LlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIHNlZSBpZiBJIGNhbiBldmVuIHJlYWNoIGBtdDc5MjF1YCB2aWEgVVNCIGZ1enppbmcuIFllcywgaWYgSSBjYW4gY3JlYXRlIGEgVVNCIGRldmljZSB0aGF0IGhhcyB0aGUgY29ycmVjdCB2ZW5kb3IvcHJvZHVjdCBJRCAoYDB4MGU4ZGAsIGAweDc5MDJgKSwgdGhlbiBgbXQ3OTIxdV9wcm9iZWAgd2lsbCBiZSBjYWxsZWQuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBldmVuIGlmIEkgZ2V0IGBtdDc5MjF1X3Byb2JlYCBjYWxsZWQsIGRvZXMgdGhlIFVTQiBkZXZpY2UgaGF2ZSBhbiBBQ1BJIGhhbmRsZT8gQW5kIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IHRyaWNreS4gSW4gTGludXgsIFVTQiBkZXZpY2VzICp0eXBpY2FsbHkqIGRvbid0IGhhdmUgQUNQSSBoYW5kbGVzIHVubGVzcyB0aGV5J3JlIGV4cGxpY2l0bHkgaGFyZGNvZGVkIGluIHRoZSBEU0RULCB3aGljaCBpcyB1c3VhbGx5IGZvciBzcGVjaWZpYyBvbmJvYXJkIGRldmljZXMgbGlrZSBCbHVldG9vdGggb3IgV2ktRmkgb24gc29tZSBsYXB0b3BzLlxuXG5JZiBJJ20gY3JlYXRpbmcgYSBVU0IgZGV2aWNlIGR5bmFtaWNhbGx5IHVzaW5nIGBkdW1teV9oY2RgIG9yIGB2aGNpLWhjZGAsIGl0J3MgKm5vdCogZ29pbmcgdG8gaGF2ZSBhbiBBQ1BJIGhhbmRsZS4gVGhhdCBtZWFucyBgQUNQSV9DT01QQU5JT04oZGV2KWAgd2lsbCBiZSBOVUxMLiBDb25zZXF1ZW50bHksIGBtdDc5MnhfYWNwaV9yZWFkYCBpcyBnb2luZyB0byByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyBgYXNhci1cdTAwM2Vjb3VudHJ5bGlzdGAgd2lsbCBiZSBOVUxMLCBhbmQgdGhlIGBtdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92M2Agd2lsbCByZXR1cm4gZWFybHksIGVmZmVjdGl2ZWx5IHNob3J0LWNpcmN1aXRpbmcgdGhhdCBwYXRoLlxuXG5JbiBjb25jbHVzaW9uLCBJIHRoaW5rIHRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHVubGVzcyB0aGVyZSdzIGEgY3VzdG9tIERTRFQgYW5kIGEgbWF0Y2hpbmcgZW11bGF0ZWQgb3IgcGh5c2ljYWwgZGV2aWNlLiBJIG5lZWQgdG8gbm93IGRvdWJsZS1jaGVjaywgaXMgaXQgcG9zc2libGUgdG8gY2FsbCBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIHdpdGggYSBub24tTlVMTCBgY2xgIGJ5IGFueSBvdGhlciBtZWFucz9cblxuXG4iLCJJbnB1dFRva2VucyI6MTc1NDcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzc6NTIuNjEwNzAyNDk0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMxODE2NTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvdW50cnlsaXN0X3YzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDE3PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsX3YzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDE5LVxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cXHUwMDNlYWNwaXNhcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQyMDpcXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2xfdjMgKmNsID0gc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdF92MztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQyMS1cXHRpbnQgY29sLCByb3csIGk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oPTExMz1zdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmgtMTI0LVxcdFxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY291bnRyeWxpc3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaDoxMjU6XFx0XFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjb3VudHJ5bGlzdF92MztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oLTEyNi1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzo1NC41NDI1MjQ1NThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA4NzQwMTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgZGVzY3JpYmVkOlxuXG4qKkludmVzdGlnYXRpbmcgYGNvdW50cnlsaXN0X3YzYCoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiB0aGUgY29kZSdzIGFza2luZyBhYm91dCBgY291bnRyeWxpc3RfdjNgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6ICp3aGVyZSogaXMgdGhpcyB2YXJpYWJsZSBiZWluZyBzZXQ/IEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIHBvcHVsYXRlZC4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSBjYW4gZmluZCB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IGFzc2lnbnMgZGF0YSB0byBgY291bnRyeWxpc3RfdjNgLiBJcyBpdCBpbml0aWFsaXplZCBsb2NhbGx5IHdpdGhpbiB0aGUgY3VycmVudCBmdW5jdGlvbi9tb2R1bGU/IElzIGl0IGdsb2JhbGx5IGRlZmluZWQsIHBlcmhhcHMgaW1wb3J0ZWQgZnJvbSBhbm90aGVyIG1vZHVsZT8gSXMgdGhlcmUgYSBkYXRhYmFzZSBxdWVyeSBvciBleHRlcm5hbCBBUEkgY2FsbCBwb3B1bGF0aW5nIGl0PyBLbm93aW5nIHRoZSBzb3VyY2Ugb2YgdGhpcyB2YXJpYWJsZSBpcyBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIHN5c3RlbSBhbmQgZGVidWdnaW5nIGFueSBkb3duc3RyZWFtIGlzc3Vlcy4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyAtIG15IElERSdzIHNlYXJjaCBvciBncmVwLCBpZiBJIG5lZWQgdG8gbG9vayBhY3Jvc3MgdGhlIHdob2xlIHByb2plY3QgLSBhbmQgc3RhcnQgaHVudGluZyBkb3duIGl0cyBkZWZpbml0aW9uLiBHb3R0YSB0cmFjayBkb3duIHRoZSBzb3VyY2UgYmVmb3JlIEkgY2FuIGNvbnRpbnVlIHRoaXMgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1OCwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM3OjU3LjYyOTkyOTQzNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwODc0Nzg2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3VudHJ5bGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTE5Mz1pbnQgbXQ3OTJ4X2luaXRfYWNwaV9zYXIoc3RydWN0IG10NzkyeF9kZXYgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjAxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjAyOlxcdHJldCA9IG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGNsKGRldiwgKHU4ICoqKVxcdTAwMjZhc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdCwgXFx1MDAyNmFzYXItXFx1MDAzZXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMDMtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjA0OlxcdFxcdGRldm1fa2ZyZWUoZGV2LVxcdTAwM2VtdDc2LmRldiwgYXNhci1cXHUwMDNlY291bnRyeWxpc3QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjA1OlxcdFxcdGFzYXItXFx1MDAzZWNvdW50cnlsaXN0ID0gTlVMTDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTIwNi1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQxNz1tdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQxOS1cXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0MjA6XFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjbCA9IHNhci1cXHUwMDNlY291bnRyeWxpc3RfdjM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MjEtXFx0aW50IGNvbCwgcm93LCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00NDk9bXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90Ymwoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00NTEtXFx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDUyOlxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY2wgPSBzYXItXFx1MDAzZWNvdW50cnlsaXN0O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDUzLVxcdGludCBjb2wsIHJvdywgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmg9MTEzPXN0cnVjdCBtdDc5MnhfYWNwaV9zYXIge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaC0xMjMtXFx0dW5pb24ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmg6MTI0OlxcdFxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY291bnRyeWxpc3Q7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuaDoxMjU6XFx0XFx0c3RydWN0IG10NzkyeF9hc2FyX2NsX3YzICpjb3VudHJ5bGlzdF92MztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5oLTEyNi1cXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMzozNzo1OS41Mzg2ODM1MzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA3OTY4MjAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFDUEkgRGF0YSBGbG93IGluIHRoZSBNVDc5MnggRHJpdmVyIHdpdGhpbiBhIFFFTVUgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG10NzkyeGAgZHJpdmVyIGFuZCB0aGUgQUNQSSBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBoYW5kbGVzIHRoaXMgY291bnRyeSBsaXN0IChgYXNhci1cdTAwM2Vjb3VudHJ5bGlzdGApLiBJdCBsb29rcyBsaWtlIHRoaXMgZGF0YSBpcyBwb3B1bGF0ZWQgZXhjbHVzaXZlbHkgdGhyb3VnaCBgbXQ3OTJ4X2FzYXJfYWNwaV9yZWFkX210Y2xgLiBUaGlzIGZ1bmN0aW9uLCBpbiB0dXJuLCBjYWxscyBgbXQ3OTJ4X2FjcGlfcmVhZGAuIEkgaGF2ZSB0byB0cmFjZSB3aGVyZSB0aGF0IGdvZXMuIEFoLCB5ZXMsIGBtdDc5MnhfYWNwaV9yZWFkYCBjYWxscyBgQUNQSV9IQU5ETEUobWRldi1cdTAwM2VkZXYpYC5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIHdoYXQgZG9lcyBgbWRldi1cdTAwM2VkZXZgIHJlcHJlc2VudD8gSWYgd2UncmUgdGFsa2luZyBhYm91dCBhIFVTQiBkZXZpY2UsIGBtZGV2LVx1MDAzZWRldmAgaXMgZWl0aGVyIGBcdTAwMjZpbnRmLVx1MDAzZWRldmAgb3IgYFx1MDAyNnVzYl9kZXYtXHUwMDNlZGV2YC4gTm93LCBjYW4gYSBVU0IgZGV2aWNlICphY3R1YWxseSogaGF2ZSBhbiBBQ1BJIGhhbmRsZSB3aGVuIGVtdWxhdGVkIGluIFFFTVU/IEhtbSwgbm8sIHRoYXQncyBub3QgaG93IFFFTVUgd29ya3MuIEl0IGRvZXNuJ3QgZ2VuZXJhdGUgQUNQSSB0YWJsZXMgZm9yIGR5bmFtaWNhbGx5IHBsdWdnZWQgVVNCIGRldmljZXMuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgUENJZT8gRG9lcyBRRU1VIGV2ZW4gZW11bGF0ZSBNVDc5MjEgUENJZSBkZXZpY2VzPyBObywgaXQgZG9lc24ndC4gU28sIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGUgZHJpdmVyIGNhbiAqb25seSogYmUgdGVzdGVkIGFuZCBwb3RlbnRpYWxseSBwcm9iZWQgdmlhIFVTQiAodXNpbmcgc3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcpIG9yIFNESU8gKGlmIGFueSBzeXprYWxsZXIgU0RJTyBmdXp6aW5nIGV4aXN0cykuIFRoZSBjb21tb24gcG9pbnQsIGhvd2V2ZXIsIGlzIHRoYXQgaW4gKm5laXRoZXIqIGNhc2Ugd2lsbCB0aGUgZGV2aWNlIGhhdmUgYSB2YWxpZCBBQ1BJIGhhbmRsZS5cblxuQ29uc2VxdWVudGx5LCBgbXQ3OTJ4X2FjcGlfcmVhZGAgd2lsbCByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBtZWFucyBgYXNhci1cdTAwM2Vjb3VudHJ5bGlzdGAgd2lsbCBiZSBgTlVMTGAuIEJpbmdvISBUaGVuLCBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIGBNVDc5MlhfQUNQSV9NVENMX0lOVkFMSURgLlxuXG5UaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIGJsb2NrOlxuXG5gYGBjXG5cdGlmIChjbC1cdTAwM2Vtb2RlX2JlID09IE1UNzkyWF9BQ1BJX01UQ0xfTU9ERV9ERUZBVUxUKVxuXHRcdGdvdG8gb3V0O1xuYGBgXG5cbndpbGwgKm5ldmVyKiBiZSByZWFjaGVkIHdpdGhpbiB0aGUgUUVNVSBlbnZpcm9ubWVudC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBlYXJsaWVyIGNoZWNrcyB3aWxsIHNob3J0LWNpcmN1aXQgdGhlIGV4ZWN1dGlvbiBwYXRoLlxuXG5XYWl0IGEgbW9tZW50LCBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgbXQ3OTJ4X2FjcGlfcmVhZGAgbWlnaHQgc3VjY2VlZCBhbmQgcmV0dXJuIGEgbm9uLWVycm9yIGNvZGU/IExldCBtZSByZS1leGFtaW5lIGBtdDc5MnhfYWNwaV9yZWFkYCBhbmQgc2VlIGlmIEkgbWlzc2VkIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NjUsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzg6MDYuNjE4MzY4Njc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjksXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjk6XFx0c3RhdGljIGludFxcbiAgMzA6XFx0bXQ3OTJ4X2FjcGlfcmVhZChzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2LCB1OCAqbWV0aG9kLCB1OCAqKnRibCwgdTMyICpsZW4pXFxuICAzMTpcXHR7XFxuICAzMjpcXHRcXHRzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9O1xcbiAgMzM6XFx0XFx0c3RydWN0IG10NzZfZGV2ICptZGV2ID0gXFx1MDAyNmRldi1cXHUwMDNlbXQ3NjtcXG4gIDM0OlxcdFxcdHVuaW9uIGFjcGlfb2JqZWN0ICpzYXJfcm9vdDtcXG4gIDM1OlxcdFxcdGFjcGlfaGFuZGxlIHJvb3QsIGhhbmRsZTtcXG4gIDM2OlxcdFxcdGFjcGlfc3RhdHVzIHN0YXR1cztcXG4gIDM3OlxcdFxcdHUzMiBpID0gMDtcXG4gIDM4OlxcdFxcdGludCByZXQ7XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdHJvb3QgPSBBQ1BJX0hBTkRMRShtZGV2LVxcdTAwM2VkZXYpO1xcbiAgNDE6XFx0XFx0aWYgKCFyb290KVxcbiAgNDI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAgNDM6XFx0XFxuICA0NDpcXHRcXHRzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUocm9vdCwgbWV0aG9kLCBcXHUwMDI2aGFuZGxlKTtcXG4gIDQ1OlxcdFxcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSlcXG4gIDQ2OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE5VTEwsIE5VTEwsIFxcdTAwMjZidWYpO1xcbiAgNDk6XFx0XFx0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKVxcbiAgNTA6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuICA1MTpcXHRcXG4gIDUyOlxcdFxcdHNhcl9yb290ID0gYnVmLnBvaW50ZXI7XFxuICA1MzpcXHRcXHRpZiAoc2FyX3Jvb3QtXFx1MDAzZXR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UgfHxcXG4gIDU0OlxcdFxcdCAgICBzYXJfcm9vdC1cXHUwMDNlcGFja2FnZS5jb3VudCBcXHUwMDNjIDQgfHxcXG4gIDU1OlxcdFxcdCAgICBzYXJfcm9vdC1cXHUwMDNlcGFja2FnZS5lbGVtZW50c1swXS50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7XFxuICA1NjpcXHRcXHRcXHRkZXZfZXJyKG1kZXYtXFx1MDAzZWRldiwgXFxcInNhciBjbnQgPSAlZFxcXFxuXFxcIixcXG4gIDU3OlxcdFxcdFxcdFxcdHNhcl9yb290LVxcdTAwM2VwYWNrYWdlLmNvdW50KTtcXG4gIDU4OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM4OjA2LjYxODQ1NDU5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI5MjQ5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUNQSSBIYW5kbGUgaW4gdGhpcyBDb250ZXh0KipcblxuT2theSwgc28gSSBzZWUgdGhpcyBjaGVjayBoZXJlOiBgcm9vdCA9IEFDUElfSEFORExFKG1kZXYtXHUwMDNlZGV2KTsgaWYgKCFyb290KSByZXR1cm4gLUVPUE5PVFNVUFA7YCBNeSBmaXJzdCB0aG91Z2h0IGlzLCB5ZXMsIHRoYXQgbWFrZXMgc2Vuc2UgKmluIHRoZSBnZW5lcmFsIGNhc2UqLiBJdCdzIGxvb2tpbmcgZm9yIGFuIEFDUEkgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLiBIb3dldmVyLCBnaXZlbiB0aGF0IHN5emthbGxlciBnZW5lcmF0ZXMgdGhlc2UgVVNCIGRldmljZXMgZHluYW1pY2FsbHksIHNwZWNpZmljYWxseSB2aWEgYGR1bW15X2hjZGAgb3IgYHZoY2ktaGNkYCwgdGhlcmUncyBhIHZlcnkgZ29vZCBjaGFuY2UgdGhleSAqd29uJ3QqIGhhdmUgYW4gQUNQSSBjb21wYW5pb24gZGV2aWNlLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBpc3N1ZS5cblxuVGhlcmVmb3JlLCBhcyBpdCBzdGFuZHMsIHRoZSBleHByZXNzaW9uIGBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldilgIHdpbGwgbW9zdCBsaWtlbHkgZXZhbHVhdGUgdG8gTlVMTC4gV2hpY2ggbWVhbnMgdGhhdCB0aGUgY29uZGl0aW9uIGlzIG1ldCBhbmQgaXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGlzIG1vZGlmaWVkIHNlY3Rpb24gb2YgdGhlIGNvZGUgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgd2hlbiBvcGVyYXRpbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIHNpbmNlIHRoYXQncyBob3cgd2UncmUgZ2VuZXJhdGluZyB0aGVzZSBVU0IgZGV2aWNlcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0sIHRob3VnaC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIHBsYWNlcyB3aGVyZSBgYWNwaXNhcmAgaXMgcG9wdWxhdGVkLiBJIGRvbid0IHdhbnQgdG8gbWlzcyBhIG51YW5jZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk0MiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM4OjEwLjY0NzcwODEzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE5MjQ2NzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFjcGlzYXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaD0xNTg9c3RydWN0IG10NzkyeF9waHkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaC0xODItI2lmZGVmIENPTkZJR19BQ1BJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnguaDoxODM6XFx0dm9pZCAqYWNwaXNhcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeC5oLTE4NC0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9MTkzPWludCBtdDc5MnhfaW5pdF9hY3BpX3NhcihzdHJ1Y3QgbXQ3OTJ4X2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0yMjYtXFx0fVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MjI3OlxcdGRldi1cXHUwMDNlcGh5LmFjcGlzYXIgPSBhc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0yMzQ9bXQ3OTJ4X2FzYXJfZ2V0X2dlb19wd3Ioc3RydWN0IG10NzkyeF9waHkgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjM2LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjIzNzpcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjM4LVxcdHN0cnVjdCBtdDc5MnhfYXNhcl9nZW9fYmFuZCAqYmFuZF9wd3I7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTI4OT1tdDc5MnhfYXNhcl9yYW5nZV9wd3Ioc3RydWN0IG10NzkyeF9waHkgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjkzLVxcdGNvbnN0IHN0cnVjdCBjZmc4MDIxMV9zYXJfY2FwYSAqY2FwYSA9IHBoeS1cXHUwMDNlbXQ3Ni1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2VzYXJfY2FwYTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjI5NDpcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICphc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMjk1LVxcdHU4ICpsaW1pdCwgYmFuZCwgbWF4O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zMjE9aW50IG10NzkyeF9pbml0X2FjcGlfc2FyX3Bvd2VyKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGJvb2wgc2V0X2RlZmF1bHQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTMyNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjMyNjpcXHRpZiAoIXBoeS1cXHUwMDNlYWNwaXNhciB8fCAhKChzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICopcGh5LVxcdTAwM2VhY3Bpc2FyKS1cXHUwMDNlZHluKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzI3LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz0zNDg9dTggbXQ3OTJ4X2FjcGlfZ2V0X2ZsYWdzKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNDkte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MzUwOlxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKmFjcGlzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy0zNTEtXFx0c3RydWN0IG10NzkyeF9hc2FyX2ZnICpmZztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzYxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6MzYyOlxcdGlmICghYWNwaXNhcilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM2My1cXHRcXHRyZXR1cm4gMDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTM2NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjM2NTpcXHRmZyA9IGFjcGlzYXItXFx1MDAzZWZnO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtMzY2LVxcdGlmICghZmcpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jPTQxNz1tdDc5MnhfYWNwaV9wYXJzZV9tdGNsX3RibF92MyhzdHJ1Y3QgbXQ3OTJ4X3BoeSAqcGh5LCBjaGFyICphbHBoYTIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00MTgte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM6NDE5OlxcdHN0cnVjdCBtdDc5MnhfYWNwaV9zYXIgKnNhciA9IHBoeS1cXHUwMDNlYWNwaXNhcjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQyMC1cXHRzdHJ1Y3QgbXQ3OTJ4X2FzYXJfY2xfdjMgKmNsID0gc2FyLVxcdTAwM2Vjb3VudHJ5bGlzdF92MztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmM9NDQ5PW10NzkyeF9hY3BpX3BhcnNlX210Y2xfdGJsKHN0cnVjdCBtdDc5MnhfcGh5ICpwaHksIGNoYXIgKmFscGhhMilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jLTQ1MC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYzo0NTE6XFx0c3RydWN0IG10NzkyeF9hY3BpX3NhciAqc2FyID0gcGh5LVxcdTAwM2VhY3Bpc2FyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDUyLVxcdHN0cnVjdCBtdDc5MnhfYXNhcl9jbCAqY2wgPSBzYXItXFx1MDAzZWNvdW50cnlsaXN0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYz00NzI9dTMyIG10NzkyeF9hY3BpX2dldF9tdGNsX2NvbmYoc3RydWN0IG10NzkyeF9waHkgKnBoeSwgY2hhciAqYWxwaGEyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTJ4X2FjcGlfc2FyLmMtNDczLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkyeF9hY3BpX3Nhci5jOjQ3NDpcXHRzdHJ1Y3QgbXQ3OTJ4X2FjcGlfc2FyICpzYXIgPSBwaHktXFx1MDAzZWFjcGlzYXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MnhfYWNwaV9zYXIuYy00NzUtXFx0dTMyIGNvbmZpZyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDEzOjM4OjEyLjU2Njk1OTM5NloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTM4MDk5MjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gQUNQSSBTQVIgUGFyc2luZyBmb3IgTWVkaWF0ZWsgV2ktRmkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRyYWNlZCB0aGlzIGNvZGUgYW5kIGl0J3MgbG9va2luZyBwcmV0dHkgY2xlYXIuIFRoZSBrZXkgaXMgdGhhdCBgYXNhci1cdTAwM2Vjb3VudHJ5bGlzdGAgZ2V0cyBwb3B1bGF0ZWQgb25seSB3aXRoaW4gYG10NzkyeF9pbml0X2FjcGlfc2FyYC4gIFRoYXQgZnVuY3Rpb24sIGluIHR1cm4sIGlzIGNhbGxlZCBmcm9tIHNvbWV0aGluZyBsaWtlIGBtdDc5MjFfbWFjX2luaXRgLiAgVGhlIGNhdGNoIGhlcmUgaXMgdGhhdCBmb3IgYSBVU0IgZGV2aWNlIGluIFFFTVUsIGBBQ1BJX0hBTkRMRShtZGV2LVx1MDAzZWRldilgIGlzIGdvaW5nIHRvIGJlIE5VTEwuXG5cblRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIGltbWVkaWF0ZWx5IGNoZWNrcyBpZiB0aGUgY291bnRyeSBsaXN0IChgY2xgKSBpcyBudWxsLiBJZiBpdCBpcyAod2hpY2ggaXQgaXMgaW4gb3VyIFFFTVUgVVNCIGNhc2UpLCBpdCByZXR1cm5zIGVhcmx5LlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIGNvbmZpcm0gdGhlIFFFTVUgc2NlbmFyaW8uIFVTQiBkZXZpY2VzIGluIFFFTVUsIHdoZXRoZXIgdXNpbmcgYGR1bW15X2hjZGAgb3IgYHZoY2ktaGNkYCwgYXJlIHNvZnR3YXJlIGVtdWxhdGVkLiAgVGhleSBkb24ndCBnZXQgQUNQSSBub2RlcyBpbiB0aGUgRFNEVC4gVGhpcyBtZWFucyBgQUNQSV9DT01QQU5JT04oZGV2KWAgaXMgTlVMTCwgd2hpY2ggaW4gdHVybiBtZWFucyBgQUNQSV9IQU5ETEUoZGV2KWAgaXMgTlVMTC4gQ29uc2VxdWVudGx5LCBgbXQ3OTJ4X2FjcGlfcmVhZGAgd2lsbCByZXR1cm4gYC1FT1BOT1RTVVBQYC4gVGhhdCBjYXVzZXMgYG10NzkyeF9hc2FyX2FjcGlfcmVhZF9tdGNsYCB0byBmYWlsIGFuZCwgeW91IGd1ZXNzZWQgaXQsIGBhc2FyLVx1MDAzZWNvdW50cnlsaXN0YCByZW1haW5zIE5VTEwuIFRoZXJlZm9yZSwgdGhlIGVhcmx5IHJldHVybiBpbiBgbXQ3OTJ4X2FjcGlfcGFyc2VfbXRjbF90YmxfdjNgIGlzIHJlYWNoZWQuXG5cblNvLCB0aGUgbW9kaWZpZWQgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGJlY2F1c2UgdGhlIGNoYW5nZXMgYXJlIGluIHRoZSBBQ1BJIFNBUiBwYXJzaW5nIGZvciBNZWRpYXRlayBXaS1GaSBjYXJkcy4gVGhlIGNvZGUgbmVlZHMgYSB2YWxpZCBBQ1BJIGNvbXBhbmlvbiBkZXZpY2UsIHdoaWNoIHZpcnR1YWxpemVkIFVTQiBvciBQQ0llIGRldmljZXMgaW4gUUVNVSBzaW1wbHkgZG9uJ3QgaGF2ZSBkdWUgdG8gdGhlaXIgZHluYW1pYyBhbmQgZW11bGF0ZWQgbmF0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDI0NywiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTM6Mzg6MjAuMTA1MDYxNTAxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgcGFyc2luZyBsb2dpYyBmb3IgTWVkaWF0ZWsgTVQ3OTJ4IFdpLUZpIGNhcmRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHJldHJpZXZpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGRldmljZSB2aWEgQUNQSV9IQU5ETEUobWRldi1cXHUwMDNlZGV2KSB0byByZWFkIHRoZSBBQ1BJIHRhYmxlcy4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZHluYW1pY2FsbHkgY3JlYXRlZCBVU0Igb3IgUENJZSBkZXZpY2VzIGRvIG5vdCBoYXZlIEFDUEkgbm9kZXMgaW4gdGhlIERTRFQsIHNvIEFDUElfSEFORExFIHJldHVybnMgTlVMTC4gQ29uc2VxdWVudGx5LCB0aGUgQUNQSSByZWFkaW5nIGZhaWxzLCB0aGUgY291bnRyeWxpc3QgaXMgbmV2ZXIgcG9wdWxhdGVkLCBhbmQgdGhlIG1vZGlmaWVkIHBhcnNpbmcgZnVuY3Rpb25zIHJldHVybiBlYXJseSwgbWFraW5nIHRoaXMgY29kZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQUNQSSBTQVIgKFNwZWNpZmljIEFic29ycHRpb24gUmF0ZSkgcGFyc2luZyBsb2dpYyBmb3IgTWVkaWF0ZWsgTVQ3OTJ4IFdpLUZpIGNhcmRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHJldHJpZXZpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGRldmljZSB2aWEgQUNQSV9IQU5ETEUobWRldi1cXHUwMDNlZGV2KSB0byByZWFkIHRoZSBBQ1BJIHRhYmxlcy4gSW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZHluYW1pY2FsbHkgY3JlYXRlZCBVU0Igb3IgUENJZSBkZXZpY2VzIGRvIG5vdCBoYXZlIEFDUEkgbm9kZXMgaW4gdGhlIERTRFQsIHNvIEFDUElfSEFORExFIHJldHVybnMgTlVMTC4gQ29uc2VxdWVudGx5LCB0aGUgQUNQSSByZWFkaW5nIGZhaWxzLCB0aGUgY291bnRyeWxpc3QgaXMgbmV2ZXIgcG9wdWxhdGVkLCBhbmQgdGhlIG1vZGlmaWVkIHBhcnNpbmcgZnVuY3Rpb25zIHJldHVybiBlYXJseSwgbWFraW5nIHRoaXMgY29kZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflownk8h7[1] Phase: Running StartedAt: 2026-07-25 13:38:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownk8h7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-25 13:38:31 +0000 UTC FinishedAt: 2026-07-25 13:38:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}