LyoKICogRGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0gCiAqIGtub3duIGFzIEZURElfU0lPIChTZXJpYWwgSW5wdXQvT3V0cHV0IGFwcGxpY2F0aW9uIG9mIHRoZSBjaGlwc2V0KSAKICoKICogVGhlIGV4YW1wbGUgSSBoYXZlIGlzIGtub3duIGFzIHRoZSBVU0MtMTAwMCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbQogKiBodHRwOi8vd3d3LmRzZS5jby5ueiAtIGNhdCBubyBYSDQyMTQgSXQgbG9va3Mgc2ltaWxhciB0byB0aGlzOgogKiBodHRwOi8vd3d3LmRhbnNkYXRhLmNvbS91c2JzZXIuaHRtIGJ1dCBJIGNhbid0IGJlIHN1cmUgVGhlcmUgYXJlIG90aGVyCiAqIFVTQy0xMDAwcyB3aGljaCBkb24ndCBsb29rIGxpa2UgbXkgZGV2aWNlIHRob3VnaCBzbyBiZXdhcmUhCiAqCiAqIFRoZSBkZXZpY2UgaXMgYmFzZWQgb24gdGhlIEZUREkgRlQ4VTEwMEFYIGNoaXAuIEl0IGhhcyBhIERCMjUgb24gb25lIHNpZGUsIAogKiBVU0Igb24gdGhlIG90aGVyLgogKgogKiBUaGFueCB0byBGVERJIChodHRwOi8vd3d3LmZ0ZGkuY28udWspIGZvciBzbyBraW5kbHkgcHJvdmlkaW5nIGRldGFpbHMKICogb2YgdGhlIHByb3RvY29sIHJlcXVpcmVkIHRvIHRhbGsgdG8gdGhlIGRldmljZSBhbmQgb25nb2luZyBhc3Npc3RlbmNlCiAqIGR1cmluZyBkZXZlbG9wbWVudC4KICoKICogQmlsbCBSeWRlciAtIGJyeWRlckBzZ2kuY29tIGZvcm1lcmx5IG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4tIHdyb3RlIHRoZSAKICogRlRESV9TSU8gaW1wbGVtZW50YXRpb24uCiAqCiAqIFBoaWxpcHAgR/xocmluZyAtIHBnQGZ1dHVyZXdhcmUuYXQgLSBhZGRlZCB0aGUgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzCiAqIGZyb20gUnVkb2xmIEd1Z2xlcgogKgogKi8KCiNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLwojZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KI2RlZmluZSBGVERJXzhVMjMyQU1fUElEIDB4NjAwMSAvKiBTaW1pbGFyIGRldmljZSB0byBTSU8gYWJvdmUgKi8KI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCiNkZWZpbmUgRlRESV84VTIzMkFNX0FMVF9BTFRfUElEIDB4ZjNjMCAvKiBGVERJJ3Mgc2Vjb25kIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCiNkZWZpbmUgRlRESV84VTIyMzJDX1BJRCAweDYwMTAgLyogRHVhbCBjaGFubmVsIGRldmljZSAqLwojZGVmaW5lIEZURElfUkVMQUlTX1BJRAkweEZBMTAgIC8qIFJlbGFpcyBkZXZpY2UgZnJvbSBSdWRvbGYgR3VnbGVyICovCiNkZWZpbmUgRlRESV9ORl9SSUNfVklECTB4MERDRAkvKiBWZW5kb3IgSWQgKi8KI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KCi8qIHd3dy5pcnRyYW5zLmRlIGRldmljZSAqLwojZGVmaW5lIEZURElfSVJUUkFOU19QSUQgMHhGQzYwIC8qIFByb2R1Y3QgSWQgKi8KCi8qIHd3dy5jcnlzdGFsZm9udHouY29tIGRldmljZXMgLSB0aGFueCBmb3IgcHJvdmlkaW5nIGZyZWUgZGV2aWNlcyBmb3IgZXZhbHVhdGlvbiAhICovCi8qIHRoZXkgdXNlIHRoZSBmdGRpIGNoaXBzZXQgZm9yIHRoZSBVU0IgaW50ZXJmYWNlIGFuZCB0aGUgdmVuZG9yIGlkIGlzIHRoZSBzYW1lICovCiNkZWZpbmUgRlRESV9YRl82MzJfUElEIDB4RkMwOAkvKiA2MzI6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KI2RlZmluZSBGVERJX1hGXzYzNF9QSUQgMHhGQzA5CS8qIDYzNDogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLwojZGVmaW5lIEZURElfWEZfNTQ3X1BJRCAweEZDMEEJLyogNTQ3OiBUd28gbGluZSBEaXNwbGF5ICovCiNkZWZpbmUgRlRESV9YRl82MzNfUElEIDB4RkMwQgkvKiA2MzM6IDE2eDIgQ2hhcmFjdGVyIERpc3BsYXkgd2l0aCBLZXlzICovCiNkZWZpbmUgRlRESV9YRl82MzFfUElEIDB4RkMwQwkvKiA2MzE6IDIweDIgQ2hhcmFjdGVyIERpc3BsYXkgKi8KI2RlZmluZSBGVERJX1hGXzYzNV9QSUQgMHhGQzBECS8qIDYzNTogMjB4NCBDaGFyYWN0ZXIgRGlzcGxheSAqLwojZGVmaW5lIEZURElfWEZfNjQwX1BJRCAweEZDMEUJLyogNjQwOiBUd28gbGluZSBEaXNwbGF5ICovCiNkZWZpbmUgRlRESV9YRl82NDJfUElEIDB4RkMwRgkvKiA2NDI6IFR3byBsaW5lIERpc3BsYXkgKi8KCi8qIFZpZGVvIE5ldHdvcmtzIExpbWl0ZWQgLyBIb21lY2hvaWNlIGluIHRoZSBVSyB1c2UgYW4gZnRkaS1iYXNlZCBkZXZpY2UgZm9yIHRoZWlyIDFNYiAqLwovKiBicm9hZGJhbmQgaW50ZXJuZXQgc2VydmljZS4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGV4aGliaXRlZCBieSB0aGUgdXNiIGRldmljZSBzdXBwbGllZCAqLwovKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLwojZGVmaW5lIEZURElfVk5IQ1BDVVNCX0RfUElEIDB4ZmUzOCAvKiBQcm9kdWN0IElkICovCgovKgogKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgTWF0cml4IE9yYml0YWwgTENEIGRpc3BsYXlzLAogKiB3aGljaCBhcmUgdGhlIEZUMjMyQk0gKCBzaW1pbGFyIHRvIHRoZSA4VTIzMkFNICkKICovCiNkZWZpbmUgRlRESV9NVFhPUkJfMF9QSUQgICAgICAweEZBMDAgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KI2RlZmluZSBGVERJX01UWE9SQl8xX1BJRCAgICAgIDB4RkEwMSAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwojZGVmaW5lIEZURElfTVRYT1JCXzJfUElEICAgICAgMHhGQTAyICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCiNkZWZpbmUgRlRESV9NVFhPUkJfM19QSUQgICAgICAweEZBMDMgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KI2RlZmluZSBGVERJX01UWE9SQl80X1BJRCAgICAgIDB4RkEwNCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwojZGVmaW5lIEZURElfTVRYT1JCXzVfUElEICAgICAgMHhGQTA1ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCiNkZWZpbmUgRlRESV9NVFhPUkJfNl9QSUQgICAgICAweEZBMDYgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KCi8qIEludGVyYmlvbWV0cmljcyBVU0IgSS9PIEJvYXJkICovCi8qIERldmVsb3BlZCBmb3IgSW50ZXJiaW9tZXRyaWNzIGJ5IFJ1ZG9sZiBHdWdsZXIgKi8KI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfVklEICAgICAgICAgICAgICAweDEyMDkKI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfSU9CT0FSRF9QSUQgICAgICAweDEwMDIKI2RlZmluZSBJTlRFUkJJT01FVFJJQ1NfTUlOSV9JT0JPQVJEX1BJRCAweDEwMDYKCi8qCiAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBQZXJsZSBTeXN0ZW1zCiAqIFVsdHJhUG9ydCBVU0Igc2VyaWFsIGNvbnZlcnRlcnMKICovCiNkZWZpbmUgRlRESV9QRVJMRV9VTFRSQVBPUlRfUElEIDB4RjBDMAkvKiBQZXJsZSBVbHRyYVBvcnQgUHJvZHVjdCBJZCAqLwoKLyoKICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFNlYWxldmVsIFNlYUxJTksrIGFkYXB0ZXJzLgogKiAoT3JpZ2luYWwgbGlzdCBzZW50IGJ5IFR1YW4gSG9hbmcuICBJYW4gQWJib3R0IHJlbmFtZWQgdGhlIG1hY3JvcyBhbmQKICogcmVtb3ZlZCBzb21lIFBJRHMgdGhhdCBkb24ndCBzZWVtIHRvIG1hdGNoIGFueSBleGlzdGluZyBwcm9kdWN0cy4pCiAqLwojZGVmaW5lIFNFQUxFVkVMX1ZJRAkJMHgwYzUyCS8qIFNlYWxldmVsIFZlbmRvciBJRCAqLwojZGVmaW5lIFNFQUxFVkVMXzIxMDFfUElECTB4MjEwMQkvKiBTZWFMSU5LKzIzMiAoMjEwMS8yMTA1KSAqLwojZGVmaW5lIFNFQUxFVkVMXzIxMDJfUElECTB4MjEwMgkvKiBTZWFMSU5LKzQ4NSAoMjEwMikgKi8KI2RlZmluZSBTRUFMRVZFTF8yMTAzX1BJRAkweDIxMDMJLyogU2VhTElOSysyMzJJICgyMTAzKSAqLwojZGVmaW5lIFNFQUxFVkVMXzIxMDRfUElECTB4MjEwNAkvKiBTZWFMSU5LKzQ4NUkgKDIxMDQpICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMV8yX1BJRAkweDIyMjEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMl8xX1BJRAkweDIyMTIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwM18xX1BJRAkweDIyMTMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDEgKi8KI2RlZmluZSBTRUFMRVZFTF8yMjAzXzJfUElECTB4MjIyMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfMl9QSUQJMHgyNDIxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfM19QSUQJMHgyNDMxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfMV9QSUQJMHgyNDEyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMSAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfMl9QSUQJMHgyNDIyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfNF9QSUQJMHgyNDQyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgNCAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDNfMV9QSUQJMHgyNDEzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KI2RlZmluZSBTRUFMRVZFTF8yNDAzXzNfUElECTB4MjQzMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDNfNF9QSUQJMHgyNDQzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8yX1BJRAkwWDI4MjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8zX1BJRAkwWDI4MzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAzICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV81X1BJRAkwWDI4NTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA1ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV82X1BJRAkwWDI4NjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA2ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV84X1BJRAkwWDI4ODEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA4ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8xX1BJRAkwWDI4MTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8zX1BJRAkwWDI4MzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAzICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl80X1BJRAkwWDI4NDIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl82X1BJRAkwWDI4NjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA2ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl83X1BJRAkwWDI4NzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA3ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwM18xX1BJRAkwWDI4MTMJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDEgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzJfUElECTBYMjgyMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDIgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzRfUElECTBYMjg0MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDQgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzVfUElECTBYMjg1MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDUgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzdfUElECTBYMjg3MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDcgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzhfUElECTBYMjg4MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDggKi8KCi8qCiAqIERTUy0yMCBTeW5jIFN0YXRpb24gZm9yIFNvbnkgRXJpY3Nzb24gUDgwMAogKi8KIAojZGVmaW5lIEZURElfRFNTMjBfUElEICAgICAgICAgIDB4RkM4MiAgCgovKgogKiBIb21lIEVsZWN0cm9uaWNzICh3d3cuaG9tZS1lbGVjdHJvLmNvbSkgVVNCIGdhZGdldHMKICovCiNkZWZpbmUgRlRESV9IRV9USVJBMV9QSUQJMHhGQTc4CS8qIFRpcmEtMSBJUiB0cmFuY2VpdmVyICovCgovKiBVU0ItVUlSVCAtIEFuIGluZnJhcmVkIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciB1c2luZyB0aGUgOFUyMzJBTSBjaGlwICovCi8qIGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bSAqLwojZGVmaW5lIEZURElfVVNCX1VJUlRfUElECTB4Rjg1MAkvKiBQcm9kdWN0IElkICovCgovKiBFTFYgVVNCIE1vZHVsZSBVTzEwMCAoUElEIHNlbnQgYnkgU3RlZmFuIEZyaW5ncykgKi8KI2RlZmluZSBGVERJX0VMVl9VTzEwMF9QSUQJMHhGQjU4CS8qIFByb2R1Y3QgSWQgKi8KCi8qCiAqIERlZmluaXRpb25zIGZvciBJRCBURUNIICh3d3cuaWR0LW5ldC5jb20pIGRldmljZXMKICovCiNkZWZpbmUgSURURUNIX1ZJRAkJMHgwQUNECS8qIElEIFRFQ0ggVmVuZG9yIElEICovCiNkZWZpbmUgSURURUNIX0lEVDEyMjFVX1BJRAkweDAzMDAJLyogSURUMTIyMVUgVVNCIHRvIFJTLTIzMiBhZGFwdGVyICovCgovKgogKiBEZWZpbml0aW9ucyBmb3IgT21uaWRpcmVjdGlvbmFsIENvbnRyb2wgVGVjaG5vbG9neSwgSW5jLiBkZXZpY2VzCiAqLwojZGVmaW5lIE9DVF9WSUQJCQkweDBCMzkJLyogT0NUIHZlbmRvciBJRCAqLwovKiBOb3RlOiBPQ1QgVVMxMDEgaXMgYWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChOWikgWEg2MzgxICovCi8qIEFsc28gcmViYWRnZWQgYXMgU0lJRyBJbmMuIG1vZGVsIFVTMjMwOCAqLwojZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLwoKLyogYW4gaW5mcmFyZWQgcmVjZWl2ZXIgZm9yIHVzZXIgYWNjZXNzIGNvbnRyb2wgd2l0aCBJUiB0YWdzICovCiNkZWZpbmUgRlRESV9QSUVHUk9VUF9QSUQJMHhGMjA4CS8qIFByb2R1Y3QgSWQgKi8KCi8qCiAqIFByb3RlZ28gcHJvZHVjdCBpZHMKICovCiNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzEJMHhGQzcwCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KI2RlZmluZSBQUk9URUdPX1IyWDAJCTB4RkM3MQkvKiBSMjAwLVVTQiBUUk5HIHVuaXQgKFIyMTAsIFIyMjAsIGFuZCBSMjMwKSAqLwojZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8zCTB4RkM3MgkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCiNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzQJMHhGQzczCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KCi8qCiAqIEd1ZGUgQW5hbG9nLSB1bmQgRGlnaXRhbHN5c3RlbWUgR21iSAogKi8KI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOF9QSUQgICAgMHhFODA4CiNkZWZpbmUgRlRESV9HVURFQURTX0U4MDlfUElEICAgIDB4RTgwOQojZGVmaW5lIEZURElfR1VERUFEU19FODBBX1BJRCAgICAweEU4MEEKI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQl9QSUQgICAgMHhFODBCCiNkZWZpbmUgRlRESV9HVURFQURTX0U4MENfUElEICAgIDB4RTgwQwojZGVmaW5lIEZURElfR1VERUFEU19FODBEX1BJRCAgICAweEU4MEQKI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRV9QSUQgICAgMHhFODBFCiNkZWZpbmUgRlRESV9HVURFQURTX0U4MEZfUElEICAgIDB4RTgwRgojZGVmaW5lIEZURElfR1VERUFEU19FODg4X1BJRCAgICAweEU4ODggIC8qIEV4cGVydCBJU0ROIENvbnRyb2wgVVNCICovCiNkZWZpbmUgRlRESV9HVURFQURTX0U4ODlfUElEICAgIDB4RTg4OSAgLyogVVNCIFJTLTIzMiBPcHRvQnJpZGdlICovCiNkZWZpbmUgRlRESV9HVURFQURTX0U4OEFfUElEICAgIDB4RTg4QQojZGVmaW5lIEZURElfR1VERUFEU19FODhCX1BJRCAgICAweEU4OEIKI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Q19QSUQgICAgMHhFODhDCiNkZWZpbmUgRlRESV9HVURFQURTX0U4OERfUElEICAgIDB4RTg4RAojZGVmaW5lIEZURElfR1VERUFEU19FODhFX1BJRCAgICAweEU4OEUKI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Rl9QSUQgICAgMHhFODhGCgovKgogKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcwogKi8KI2RlZmluZSBMSU5YX1NETVVTQlFTU19QSUQJMHhGNDQ4CS8qIExpbnggU0RNLVVTQi1RUy1TICovCiNkZWZpbmUgTElOWF9NQVNURVJERVZFTDJfUElEICAgMHhGNDQ5ICAgLyogTGlueCBNYXN0ZXIgRGV2ZWxvcG1lbnQgMi4wICovCiNkZWZpbmUgTElOWF9GVVRVUkVfMF9QSUQgICAweEY0NEEgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QiAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwojZGVmaW5lIExJTlhfRlVUVVJFXzJfUElEICAgMHhGNDRDICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCgovKiBDQ1MgSW5jLiBJQ0RVL0lDRFU0MCBwcm9kdWN0IElEIC0gdGhlIEZUMjMyQk0gaXMgdXNlZCBpbiBhbiBpbi1jaXJjdWl0LWRlYnVnZ2VyICovCi8qIHVuaXQgZm9yIFBJQzE2J3MvUElDMTgncyAqLwojZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMCAgICAgCiNkZWZpbmUgRlRESV9DQ1NJQ0RVNDBfMV9QSUQgICAgMHhGOUQxICAgICAKCi8qIEluc2lkZSBBY2Nlc3NvIGNvbnRhY3RsZXNzIHJlYWRlciAoaHR0cDovL3d3dy5pbnNpZGVmci5jb20pICovCiNkZWZpbmUgSU5TSURFX0FDQ0VTU08JCTB4RkFEMAoKLyoKICogSW50cmVwaWQgQ29udHJvbCBTeXN0ZW1zIChodHRwOi8vd3d3LmludHJlcGlkY3MuY29tLykgVmFsdWVDQU4gYW5kIE5lb1ZJCiAqLwojZGVmaW5lIElOVFJFUElEX1ZJRAkJMHgwOTNDCiNkZWZpbmUgSU5UUkVQSURfVkFMVUVDQU5fUElECTB4MDYwMQojZGVmaW5lIElOVFJFUElEX05FT1ZJX1BJRAkweDA3MDEKCi8qCiAqIEZhbGNvbSBXaXJlbGVzcyBDb21tdW5pY2F0aW9ucyBHbWJICiAqLwojZGVmaW5lIEZBTENPTV9WSUQJCTB4MEY5NAkvKiBWZW5kb3IgSWQgKi8KI2RlZmluZSBGQUxDT01fVFdJU1RfUElECTB4MDAwMQkvKiBGYWxjb20gVHdpc3QgVVNCIEdQUlMgbW9kZW0gKi8KCi8qCiAqIFNVVU5UTyBwcm9kdWN0IGlkcwogKi8KI2RlZmluZSBGVERJX1NVVU5UT19TUE9SVFNfUElECTB4RjY4MAkvKiBTdXVudG8gU3BvcnRzIGluc3RydW1lbnQgKi8KCi8qCiAqIERlZmluaXRpb25zIGZvciBCJkIgRWxlY3Ryb25pY3MgcHJvZHVjdHMuCiAqLwojZGVmaW5lIEJBTkRCX1ZJRAkJMHgwODU2CS8qIEImQiBFbGVjdHJvbmljcyBWZW5kb3IgSUQgKi8KI2RlZmluZSBCQU5EQl9VU09UTDRfUElECTB4QUMwMQkvKiBVU09UTDQgSXNvbGF0ZWQgUlMtNDg1IENvbnZlcnRlciAqLwojZGVmaW5lIEJBTkRCX1VTVEw0X1BJRAkJMHhBQzAyCS8qIFVTVEw0IFJTLTQ4NSBDb252ZXJ0ZXIgKi8KI2RlZmluZSBCQU5EQl9VU085TUwyX1BJRAkweEFDMDMJLyogVVNPOU1MMiBJc29sYXRlZCBSUy0yMzIgQ29udmVydGVyICovCgovKgogKiBSTSBNaWNoYWVsaWRlcyBDQU52aWV3IFVTQiAoaHR0cDovL3d3dy5ybWNhbi5jb20pCiAqIENBTiBmaWxlZGJ1cyBpbnRlcmZhY2UgYWRhcHRlciwgYWRkYWQgYnkgcG9ydCBHbWJIIHd3dy5wb3J0LmRlKQogKi8KI2RlZmluZSBGVERJX1JNX1ZJRAkJMHgwNDAzCS8qIFZlbmRvciAgSWQgKi8KI2RlZmluZSBGVERJX1JNQ0FOVklFV19QSUQJMHhmZDYwCS8qIFByb2R1Y3QgSWQgKi8KCi8qCiAqIEVWRVIgRWNvIFBybyBVUFMgKGh0dHA6Ly93d3cuZXZlci5jb20ucGwvKQogKi8KCiNkZWZpbmUJRVZFUl9FQ09fUFJPX0NEUwkweGU1MjAJLyogUlMtMjMyIGNvbnZlcnRlciAqLwoKLyogQ29tbWFuZHMgKi8KI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwojZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkwJMiAvKiBTZXQgZmxvdyBjb250cm9sIHJlZ2lzdGVyICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURfUkFURQkzIC8qIFNldCBiYXVkIHJhdGUgKi8KI2RlZmluZSBGVERJX1NJT19TRVRfREFUQQk0IC8qIFNldCB0aGUgZGF0YSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHBvcnQgKi8KI2RlZmluZSBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCTUgLyogUmV0cmlldmUgY3VycmVudCB2YWx1ZSBvZiBtb2Rlcm4gc3RhdHVzIHJlZ2lzdGVyICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIJNiAvKiBTZXQgdGhlIGV2ZW50IGNoYXJhY3RlciAqLwojZGVmaW5lIEZURElfU0lPX1NFVF9FUlJPUl9DSEFSCTcgLyogU2V0IHRoZSBlcnJvciBjaGFyYWN0ZXIgKi8KI2RlZmluZSBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgk5IC8qIFNldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwojZGVmaW5lIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCTEwIC8qIEdldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwoKLyogUG9ydCBpbnRlcmZhY2UgY29kZSBmb3IgRlQyMjMyQyAqLwojZGVmaW5lIElOVEVSRkFDRV9BCQkxCiNkZWZpbmUgSU5URVJGQUNFX0IJCTIKCgovKgogKiAgIEJtUmVxdWVzdFR5cGU6ICAxMTAwIDAwMDBiCiAqICAgYlJlcXVlc3Q6ICAgICAgIEZURElfRTJfUkVBRAogKiAgIHdWYWx1ZTogICAgICAgICAwCiAqICAgd0luZGV4OiAgICAgICAgIEFkZHJlc3Mgb2Ygd29yZCB0byByZWFkCiAqICAgd0xlbmd0aDogICAgICAgIDIKICogICBEYXRhOiAgICAgICAgICAgV2lsbCByZXR1cm4gYSB3b3JkIG9mIGRhdGEgZnJvbSBFMkFkZHJlc3MKICoKICovCgovKiBQb3J0IElkZW50aWZpZXIgVGFibGUgKi8KI2RlZmluZSBQSVRfREVGQVVMVCAJCTAgLyogU0lPQSAqLwojZGVmaW5lIFBJVF9TSU9BCQkxIC8qIFNJT0EgKi8KLyogVGhlIGRldmljZSB0aGlzIGRyaXZlciBpcyB0ZXN0ZWQgd2l0aCBvbmUgaGFzIG9ubHkgb25lIHBvcnQgKi8KI2RlZmluZSBQSVRfU0lPQgkJMiAvKiBTSU9CICovCiNkZWZpbmUgUElUX1BBUkFMTEVMCQkzIC8qIFBhcmFsbGVsICovCgovKiBGVERJX1NJT19SRVNFVCAqLwojZGVmaW5lIEZURElfU0lPX1JFU0VUX1JFUVVFU1QgRlRESV9TSU9fUkVTRVQKI2RlZmluZSBGVERJX1NJT19SRVNFVF9SRVFVRVNUX1RZUEUgMHg0MAojZGVmaW5lIEZURElfU0lPX1JFU0VUX1NJTyAwCiNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUFVSR0VfUlggMQojZGVmaW5lIEZURElfU0lPX1JFU0VUX1BVUkdFX1RYIDIKCi8qCiAqIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBCCiAqIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19SRVNFVAogKiB3VmFsdWU6ICAgICAgICAgQ29udHJvbCBWYWx1ZSAKICogICAgICAgICAgICAgICAgICAgMCA9IFJlc2V0IFNJTwogKiAgICAgICAgICAgICAgICAgICAxID0gUHVyZ2UgUlggYnVmZmVyCiAqICAgICAgICAgICAgICAgICAgIDIgPSBQdXJnZSBUWCBidWZmZXIKICogd0luZGV4OiAgICAgICAgIFBvcnQKICogd0xlbmd0aDogICAgICAgIDAKICogRGF0YTogICAgICAgICAgIE5vbmUKICoKICogVGhlIFJlc2V0IFNJTyBjb21tYW5kIGhhcyB0aGlzIGVmZmVjdDoKICoKICogICAgU2V0cyBmbG93IGNvbnRyb2wgc2V0IHRvICdub25lJwogKiAgICBFdmVudCBjaGFyID0gJDBECiAqICAgIEV2ZW50IHRyaWdnZXIgPSBkaXNhYmxlZAogKiAgICBQdXJnZSBSWCBidWZmZXIKICogICAgUHVyZ2UgVFggYnVmZmVyCiAqICAgIENsZWFyIERUUgogKiAgICBDbGVhciBSVFMKICogICAgYmF1ZCBhbmQgZGF0YSBmb3JtYXQgbm90IHJlc2V0CiAqCiAqIFRoZSBQdXJnZSBSWCBhbmQgVFggYnVmZmVyIGNvbW1hbmRzIGFmZmVjdCBub3RoaW5nIGV4Y2VwdCB0aGUgYnVmZmVycwogKgogICAqLwoKLyogRlRESV9TSU9fU0VUX0JBVURSQVRFICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURSQVRFX1JFUVVFU1RfVFlQRSAweDQwCiNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURSQVRFX1JFUVVFU1QgMwoKLyoKICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIKICogYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1NFVF9CQVVEUkFURQogKiB3VmFsdWU6ICAgICAgICAgQmF1ZERpdmlzb3IgdmFsdWUgLSBzZWUgYmVsb3cKICogd0luZGV4OiAgICAgICAgIFBvcnQKICogd0xlbmd0aDogICAgICAgIDAKICogRGF0YTogICAgICAgICAgIE5vbmUKICogVGhlIEJhdWREaXZpc29yIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBhcyBmb2xsb3dzOgogKiAtIEJhc2VDbG9jayBpcyBlaXRoZXIgMTIwMDAwMDAgb3IgNDgwMDAwMDAgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UuIEZJWE1FOiBJIHdpc2gKICogICBJIGtuZXcgaG93IHRvIGRldGVjdCBvbGQgY2hpcHMgdG8gc2VsZWN0IHByb3BlciBiYXNlIGNsb2NrIQogKiAtIEJhdWREaXZpc29yIGlzIGEgZml4ZWQgcG9pbnQgbnVtYmVyIGVuY29kZWQgaW4gYSBmdW5ueSB3YXkuCiAqICAgKC0tV1JPTkcgV0FZIE9GIFRISU5LSU5HLS0pCiAqICAgQmF1ZERpdmlzb3IgaXMgYSBmaXhlZCBwb2ludCBudW1iZXIgZW5jb2RlZCB3aXRoIGZvbGxvd2luZyBiaXQgd2VpZ2hzOgogKiAgICgtMikoLTEpKDEzLi4wKS4gSXQgaXMgYSByYWRpY2FsIHdpdGggYSBkZW5vbWluYXRvciBvZiA0LCBzbyB2YWx1ZXMKICogICBlbmQgd2l0aCAwLjAgKDAwLi4uKSwgMC4yNSAoMTAuLi4pLCAwLjUgKDAxLi4uKSwgYW5kIDAuNzUgKDExLi4uKS4KICogICAoLS1USEUgUkVBTElUWS0tKQogKiAgIFRoZSBib3RoLWJpdHMtc2V0IGhhcyBxdWl0ZSBkaWZmZXJlbnQgbWVhbmluZyBmcm9tIDAuNzUgLSB0aGUgY2hpcCBkZXNpZ25lcnMKICogICBoYXZlIGRlY2lkZWQgaXQgdG8gbWVhbiAwLjEyNSBpbnN0ZWFkIG9mIDAuNzUuCiAqICAgVGhpcyBpbmZvIGxvb2tlZCB1cCBpbiBGVERJIGFwcGxpY2F0aW9uIG5vdGUgIkZUOFUyMzIgREVWSUNFUyBcIERhdGEgUmF0ZXMKICogICBhbmQgRmxvdyBDb250cm9sIENvbnNpZGVyYXRpb24gZm9yIFVTQiB0byBSUzIzMiIuCiAqIC0gQmF1ZERpdmlzb3IgPSAoQmFzZUNsb2NrIC8gMTYpIC8gQmF1ZFJhdGUsIHdoZXJlIHRoZSAoPSkgb3BlcmF0aW9uIHNob3VsZAogKiAgIGF1dG9tYWdpY2FsbHkgcmUtZW5jb2RlIHRoZSByZXN1bHRpbmcgdmFsdWUgdG8gdGFrZSBmcmFjdGlvbnMgaW50byBjb25zaWRlcmF0aW9uLgogKiBBcyBhbGwgdmFsdWVzIGFyZSBpbnRlZ2Vycywgc29tZSBiaXQgdHdpZGRsaW5nIGlzIGluIG9yZGVyOgogKiAgIEJhdWREaXZpc29yID0gKEJhc2VDbG9jayAvIDE2IC8gQmF1ZFJhdGUpIHwKICogICAoKChCYXNlQ2xvY2sgLyAyIC8gQmF1ZFJhdGUpICYgNCkgPyAweDQwMDAgICAgLy8gMC41CiAqICAgIDogKChCYXNlQ2xvY2sgLyAyIC8gQmF1ZFJhdGUpICYgMikgPyAweDgwMDAgIC8vIDAuMjUKICogICAgOiAoKEJhc2VDbG9jayAvIDIgLyBCYXVkUmF0ZSkgJiAxKSA/IDB4YzAwMCAgLy8gMC4xMjUKICogICAgOiAwKQogKgogKiBGb3IgdGhlIEZUMjMyQk0sIGEgMTd0aCBkaXZpc29yIGJpdCB3YXMgaW50cm9kdWNlZCB0byBlbmNvZGUgdGhlIG11bHRpcGxlcwogKiBvZiAwLjEyNSBtaXNzaW5nIGZyb20gdGhlIEZUOFUyMzJBTS4gIEJpdHMgMTYgdG8gMTQgYXJlIGNvZGVkIGFzIGZvbGxvd3MKICogKHRoZSBmaXJzdCBmb3VyIGNvZGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIEZUOFUyMzJBTSwgd2hlcmUgYml0IDE2IGlzCiAqIGFsd2F5cyAwKToKICogICAwMDAgLSBhZGQgLjAwMCB0byBkaXZpc29yCiAqICAgMDAxIC0gYWRkIC41MDAgdG8gZGl2aXNvcgogKiAgIDAxMCAtIGFkZCAuMjUwIHRvIGRpdmlzb3IKICogICAwMTEgLSBhZGQgLjEyNSB0byBkaXZpc29yCiAqICAgMTAwIC0gYWRkIC4zNzUgdG8gZGl2aXNvcgogKiAgIDEwMSAtIGFkZCAuNjI1IHRvIGRpdmlzb3IKICogICAxMTAgLSBhZGQgLjc1MCB0byBkaXZpc29yCiAqICAgMTExIC0gYWRkIC44NzUgdG8gZGl2aXNvcgogKiBCaXRzIDE1IHRvIDAgb2YgdGhlIDE3LWJpdCBkaXZpc29yIGFyZSBwbGFjZWQgaW4gdGhlIHVyYiB2YWx1ZS4gIEJpdCAxNiBpcyAKICogcGxhY2VkIGluIGJpdCAwIG9mIHRoZSB1cmIgaW5kZXguCiAqCiAqIE5vdGUgdGhhdCB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygc3BlY2lhbCBjYXNlcyB0byBzdXBwb3J0IHRoZSBoaWdoZXN0IGJhdWQKICogcmF0ZXMuICBJZiB0aGUgY2FsY3VsYXRlZCBkaXZpc29yIHZhbHVlIGlzIDEsIHRoaXMgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aAogKiAwLiAgQWRkaXRpb25hbGx5IGZvciB0aGUgRlQyMzJCTSwgaWYgdGhlIGNhbGN1bGF0ZWQgZGl2aXNvciB2YWx1ZSBpcyAweDQwMDEKICogKDEuNSksIHRoaXMgbmVlZHMgdG8gYmUgcmVwbGFjZWQgd2l0aCAweDAwMDEgKDEpIChidXQgdGhpcyBkaXZpc29yIHZhbHVlIGlzCiAqIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEZUOFUyMzJBTSkuCiAqLwoKdHlwZWRlZiBlbnVtIHsKCVNJTyA9IDEsCglGVDhVMjMyQU0gPSAyLAoJRlQyMzJCTSA9IDMsCglGVDIyMzJDID0gNCwKfSBmdGRpX2NoaXBfdHlwZV90OwoKdHlwZWRlZiBlbnVtIHsKIGZ0ZGlfc2lvX2IzMDAgPSAwLCAKIGZ0ZGlfc2lvX2I2MDAgPSAxLCAKIGZ0ZGlfc2lvX2IxMjAwID0gMiwKIGZ0ZGlfc2lvX2IyNDAwID0gMywKIGZ0ZGlfc2lvX2I0ODAwID0gNCwKIGZ0ZGlfc2lvX2I5NjAwID0gNSwKIGZ0ZGlfc2lvX2IxOTIwMCA9IDYsCiBmdGRpX3Npb19iMzg0MDAgPSA3LAogZnRkaV9zaW9fYjU3NjAwID0gOCwKIGZ0ZGlfc2lvX2IxMTUyMDAgPSA5Cn0gRlRESV9TSU9fYmF1ZHJhdGVfdCA7CgovKgogKiBUaGUgZnRkaV84VTIzMkFNX3h4TUh6X2J5eXkgY29uc3RhbnRzIGhhdmUgYmVlbiByZW1vdmVkLiBUaGUgZW5jb2RlZCBkaXZpc29yIHZhbHVlcwogKiBhcmUgY2FsY3VsYXRlZCBpbnRlcm5hbGx5LgogKi8KCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVCBGVERJX1NJT19TRVRfREFUQQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1RfVFlQRSAweDQwCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX05PTkUgKDB4MCA8PCA4ICkKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfT0REICgweDEgPDwgOCApCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX0VWRU4gKDB4MiA8PCA4ICkKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfTUFSSyAoMHgzIDw8IDggKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9TUEFDRSAoMHg0IDw8IDggKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18xICgweDAgPDwgMTEgKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18xNSAoMHgxIDw8IDExICkKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9TVE9QX0JJVFNfMiAoMHgyIDw8IDExICkKI2RlZmluZSBGVERJX1NJT19TRVRfQlJFQUsgKDB4MSA8PCAxNCkKLyogRlRESV9TSU9fU0VUX0RBVEEgKi8KCi8qCiAqIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBCIAogKiBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0RBVEEKICogd1ZhbHVlOiAgICAgICAgIERhdGEgY2hhcmFjdGVyaXN0aWNzIChzZWUgYmVsb3cpCiAqIHdJbmRleDogICAgICAgICBQb3J0CiAqIHdMZW5ndGg6ICAgICAgICAwCiAqIERhdGE6ICAgICAgICAgICBObwogKgogKiBEYXRhIGNoYXJhY3RlcmlzdGljcwogKgogKiAgIEIwLi43ICAgTnVtYmVyIG9mIGRhdGEgYml0cwogKiAgIEI4Li4xMCAgUGFyaXR5CiAqICAgICAgICAgICAwID0gTm9uZQogKiAgICAgICAgICAgMSA9IE9kZAogKiAgICAgICAgICAgMiA9IEV2ZW4KICogICAgICAgICAgIDMgPSBNYXJrCiAqICAgICAgICAgICA0ID0gU3BhY2UKICogICBCMTEuLjEzIFN0b3AgQml0cwogKiAgICAgICAgICAgMCA9IDEKICogICAgICAgICAgIDEgPSAxLjUKICogICAgICAgICAgIDIgPSAyCiAqICAgQjE0CiAqICAgICAgICAgICAxID0gVFggT04gKGJyZWFrKQogKiAgICAgICAgICAgMCA9IFRYIE9GRiAobm9ybWFsIHN0YXRlKQogKiAgIEIxNSBSZXNlcnZlZAogKgogKi8KCgoKLyogRlRESV9TSU9fTU9ERU1fQ1RSTCAqLwojZGVmaW5lIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1RfVFlQRSAweDQwCiNkZWZpbmUgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVCBGVERJX1NJT19NT0RFTV9DVFJMCgovKiAKICogQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBCCiAqIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fTU9ERU1fQ1RSTAogKiB3VmFsdWU6ICAgICAgICAgIENvbnRyb2xWYWx1ZSAoc2VlIGJlbG93KQogKiB3SW5kZXg6ICAgICAgICAgIFBvcnQKICogd0xlbmd0aDogICAgICAgICAwCiAqIERhdGE6ICAgICAgICAgICAgTm9uZQogKgogKiBOT1RFOiBJZiB0aGUgZGV2aWNlIGlzIGluIFJUUy9DVFMgZmxvdyBjb250cm9sLCB0aGUgUlRTIHNldCBieSB0aGlzCiAqIGNvbW1hbmQgd2lsbCBiZSBJR05PUkVEIHdpdGhvdXQgYW4gZXJyb3IgYmVpbmcgcmV0dXJuZWQKICogQWxzbyAtIHlvdSBjYW4gbm90IHNldCBEVFIgYW5kIFJUUyB3aXRoIG9uZSBjb250cm9sIG1lc3NhZ2UKICovCgojZGVmaW5lIEZURElfU0lPX1NFVF9EVFJfTUFTSyAweDEKI2RlZmluZSBGVERJX1NJT19TRVRfRFRSX0hJR0ggKCAxIHwgKCBGVERJX1NJT19TRVRfRFRSX01BU0sgIDw8IDgpKQojZGVmaW5lIEZURElfU0lPX1NFVF9EVFJfTE9XICAoIDAgfCAoIEZURElfU0lPX1NFVF9EVFJfTUFTSyAgPDwgOCkpCiNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19NQVNLIDB4MgojZGVmaW5lIEZURElfU0lPX1NFVF9SVFNfSElHSCAoIDIgfCAoIEZURElfU0lPX1NFVF9SVFNfTUFTSyA8PCA4ICkpCiNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19MT1cgKCAwIHwgKCBGVERJX1NJT19TRVRfUlRTX01BU0sgPDwgOCApKQoKLyoKICogQ29udHJvbFZhbHVlCiAqIEIwICAgIERUUiBzdGF0ZQogKiAgICAgICAgICAwID0gcmVzZXQKICogICAgICAgICAgMSA9IHNldAogKiBCMSAgICBSVFMgc3RhdGUKICogICAgICAgICAgMCA9IHJlc2V0CiAqICAgICAgICAgIDEgPSBzZXQKICogQjIuLjcgUmVzZXJ2ZWQKICogQjggICAgRFRSIHN0YXRlIGVuYWJsZQogKiAgICAgICAgICAwID0gaWdub3JlCiAqICAgICAgICAgIDEgPSB1c2UgRFRSIHN0YXRlCiAqIEI5ICAgIFJUUyBzdGF0ZSBlbmFibGUKICogICAgICAgICAgMCA9IGlnbm9yZQogKiAgICAgICAgICAxID0gdXNlIFJUUyBzdGF0ZQogKiBCMTAuLjE1IFJlc2VydmVkCiAqLwoKLyogRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTCAqLwojZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFIDB4NDAKI2RlZmluZSBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTAojZGVmaW5lIEZURElfU0lPX0RJU0FCTEVfRkxPV19DVFJMIDB4MCAKI2RlZmluZSBGVERJX1NJT19SVFNfQ1RTX0hTICgweDEgPDwgOCkKI2RlZmluZSBGVERJX1NJT19EVFJfRFNSX0hTICgweDIgPDwgOCkKI2RlZmluZSBGVERJX1NJT19YT05fWE9GRl9IUyAoMHg0IDw8IDgpCi8qCiAqICAgQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMGIKICogICBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTAogKiAgIHdWYWx1ZTogICAgICAgICBYb2ZmL1hvbgogKiAgIHdJbmRleDogICAgICAgICBQcm90b2NvbC9Qb3J0IC0gaEluZGV4IGlzIHByb3RvY2wgLyBsSW5kZXggaXMgcG9ydAogKiAgIHdMZW5ndGg6ICAgICAgICAwIAogKiAgIERhdGE6ICAgICAgICAgICBOb25lCiAqCiAqIGhJbmRleCBwcm90b2NvbCBpczoKICogICBCMCBPdXRwdXQgaGFuZHNoYWtpbmcgdXNpbmcgUlRTL0NUUwogKiAgICAgICAwID0gZGlzYWJsZWQKICogICAgICAgMSA9IGVuYWJsZWQKICogICBCMSBPdXRwdXQgaGFuZHNoYWtpbmcgdXNpbmcgRFRSL0RTUgogKiAgICAgICAwID0gZGlzYWJsZWQKICogICAgICAgMSA9IGVuYWJsZWQKICogICBCMiBYb24vWG9mZiBoYW5kc2hha2luZwogKiAgICAgICAwID0gZGlzYWJsZWQKICogICAgICAgMSA9IGVuYWJsZWQKICoKICogQSB2YWx1ZSBvZiB6ZXJvIGluIHRoZSBoSW5kZXggZmllbGQgZGlzYWJsZXMgaGFuZHNoYWtpbmcKICoKICogSWYgWG9uL1hvZmYgaGFuZHNoYWtpbmcgaXMgc3BlY2lmaWVkLCB0aGUgaFZhbHVlIGZpZWxkIHNob3VsZCBjb250YWluIHRoZSBYT0ZGIGNoYXJhY3RlciAKICogYW5kIHRoZSBsVmFsdWUgZmllbGQgY29udGFpbnMgdGhlIFhPTiBjaGFyYWN0ZXIuCiAqLyAgCiAKLyoKICogRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIKICoKICogU2V0IHRoZSB0aW1lb3V0IGludGVydmFsLiBUaGUgRlRESSBjb2xsZWN0cyBkYXRhIGZyb20gdGhlIHNsYXZlCiAqIGRldmljZSwgdHJhbnNtaXR0aW5nIGl0IHRvIHRoZSBob3N0IHdoZW4gZWl0aGVyIEEpIDYyIGJ5dGVzIGFyZQogKiByZWNlaXZlZCwgb3IgQikgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgaGFzIGVsYXBzZWQgYW5kIHRoZSBidWZmZXIKICogY29udGFpbnMgYXQgbGVhc3QgMSBieXRlLiAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIGEgc21hbGwgbnVtYmVyCiAqIGNhbiBkcmFtYXRpY2FsbHkgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IgYXBwbGljYXRpb25zIHdoaWNoIHNlbmQKICogc21hbGwgcGFja2V0cywgc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMTZtcy4KICovCiNkZWZpbmUgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIKI2RlZmluZSAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFIDB4QzAKCi8qIAogKiAgQm1SZXF1ZXN0VHlwZTogICAxMTAwIDAwMDBiCiAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCiAqICB3VmFsdWU6ICAgICAgICAgIDAKICogIHdJbmRleDogICAgICAgICAgUG9ydAogKiAgd0xlbmd0aDogICAgICAgICAwCiAqICBEYXRhOiAgICAgICAgICAgIGxhdGVuY3kgKG9uIHJldHVybikKICovCgovKiAKICogRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIKICoKICogU2V0IHRoZSB0aW1lb3V0IGludGVydmFsLiBUaGUgRlRESSBjb2xsZWN0cyBkYXRhIGZyb20gdGhlIHNsYXZlCiAqIGRldmljZSwgdHJhbnNtaXR0aW5nIGl0IHRvIHRoZSBob3N0IHdoZW4gZWl0aGVyIEEpIDYyIGJ5dGVzIGFyZQogKiByZWNlaXZlZCwgb3IgQikgdGhlIHRpbWVvdXQgaW50ZXJ2YWwgaGFzIGVsYXBzZWQgYW5kIHRoZSBidWZmZXIKICogY29udGFpbnMgYXQgbGVhc3QgMSBieXRlLiAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIGEgc21hbGwgbnVtYmVyCiAqIGNhbiBkcmFtYXRpY2FsbHkgaW1wcm92ZSBwZXJmb3JtYW5jZSBmb3IgYXBwbGljYXRpb25zIHdoaWNoIHNlbmQKICogc21hbGwgcGFja2V0cywgc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMTZtcy4KICovCiNkZWZpbmUgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIKI2RlZmluZSAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFIDB4NDAKCi8qIAogKiAgQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBiCiAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSCiAqICB3VmFsdWU6ICAgICAgICAgIExhdGVuY3kgKG1pbGxpc2Vjb25kcykKICogIHdJbmRleDogICAgICAgICAgUG9ydAogKiAgd0xlbmd0aDogICAgICAgICAwCiAqICBEYXRhOiAgICAgICAgICAgIE5vbmUKICoKICogd1ZhbHVlOgogKiAgIEIwLi43ICAgTGF0ZW5jeSB0aW1lcgogKiAgIEI4Li4xNSAgMAogKgogKi8KCi8qCiAqIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSIAogKgogKiBTZXQgdGhlIHNwZWNpYWwgZXZlbnQgY2hhcmFjdGVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbW11bmljYXRpb25zIHBvcnQuCiAqIElmIHRoZSBkZXZpY2Ugc2VlcyB0aGlzIGNoYXJhY3RlciBpdCB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiB0aGUKICogZGF0YSByZWFkIHNvIGZhciAtIHJhdGhlciB0aGFuIHdhaXQgNDBtcyBvciB1bnRpbCA2MiBieXRlcyBhcmUgcmVhZAogKiB3aGljaCBpcyB3aGF0IG5vcm1hbGx5IGhhcHBlbnMuCiAqLwoKCiNkZWZpbmUgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSX1JFUVVFU1QgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIKI2RlZmluZSAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVF9UWVBFIDB4NDAKCgovKiAKICogIEJtUmVxdWVzdFR5cGU6ICAgMDEwMCAwMDAwYgogKiAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgogKiAgd1ZhbHVlOiAgICAgICAgICBFdmVudENoYXIKICogIHdJbmRleDogICAgICAgICAgUG9ydAogKiAgd0xlbmd0aDogICAgICAgICAwCiAqICBEYXRhOiAgICAgICAgICAgIE5vbmUKICoKICogd1ZhbHVlOgogKiAgIEIwLi43ICAgRXZlbnQgQ2hhcmFjdGVyCiAqICAgQjggICAgICBFdmVudCBDaGFyYWN0ZXIgUHJvY2Vzc2luZwogKiAgICAgICAgICAgICAwID0gZGlzYWJsZWQKICogICAgICAgICAgICAgMSA9IGVuYWJsZWQKICogICBCOS4uMTUgIFJlc2VydmVkCiAqCiAqLwogICAgICAgICAgCi8qIEZURElfU0lPX1NFVF9FUlJPUl9DSEFSICovCgovKiBTZXQgdGhlIHBhcml0eSBlcnJvciByZXBsYWNlbWVudCBjaGFyYWN0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgY29tbXVuaWNhdGlvbnMgcG9ydCAqLwoKLyogCiAqICBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwYgogKiAgYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCiAqICB3VmFsdWU6ICAgICAgICAgRXJyb3IgQ2hhcgogKiAgd0luZGV4OiAgICAgICAgIFBvcnQKICogIHdMZW5ndGg6ICAgICAgICAwCiAqICBEYXRhOiAgICAgICAgICAgTm9uZQogKgogKkVycm9yIENoYXIKICogIEIwLi43ICBFcnJvciBDaGFyYWN0ZXIKICogIEI4ICAgICBFcnJvciBDaGFyYWN0ZXIgUHJvY2Vzc2luZwogKiAgICAgICAgICAgMCA9IGRpc2FibGVkCiAqICAgICAgICAgICAxID0gZW5hYmxlZAogKiAgQjkuLjE1IFJlc2VydmVkCiAqCiAqLwoKLyogRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUyAqLwovKiBSZXRyZWl2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbW9kZW0gc3RhdHVzIHJlZ2lzdGVyICovCgojZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFIDB4YzAKI2RlZmluZSBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1QgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUwojZGVmaW5lIEZURElfU0lPX0NUU19NQVNLIDB4MTAKI2RlZmluZSBGVERJX1NJT19EU1JfTUFTSyAweDIwCiNkZWZpbmUgRlRESV9TSU9fUklfTUFTSyAgMHg0MAojZGVmaW5lIEZURElfU0lPX1JMU0RfTUFTSyAweDgwCi8qIAogKiAgIEJtUmVxdWVzdFR5cGU6ICAgMTEwMCAwMDAwYgogKiAgIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUwogKiAgIHdWYWx1ZTogICAgICAgICAgemVybwogKiAgIHdJbmRleDogICAgICAgICAgUG9ydAogKiAgIHdMZW5ndGg6ICAgICAgICAgMQogKiAgIERhdGE6ICAgICAgICAgICAgU3RhdHVzCiAqIAogKiBPbmUgYnl0ZSBvZiBkYXRhIGlzIHJldHVybmVkIAogKiBCMC4uMyAwCiAqIEI0ICAgIENUUwogKiAgICAgICAgIDAgPSBpbmFjdGl2ZQogKiAgICAgICAgIDEgPSBhY3RpdmUKICogQjUgICAgRFNSCiAqICAgICAgICAgMCA9IGluYWN0aXZlCiAqICAgICAgICAgMSA9IGFjdGl2ZQogKiBCNiAgICBSaW5nIEluZGljYXRvciAoUkkpCiAqICAgICAgICAgMCA9IGluYWN0aXZlCiAqICAgICAgICAgMSA9IGFjdGl2ZQogKiBCNyAgICBSZWNlaXZlIExpbmUgU2lnbmFsIERldGVjdCAoUkxTRCkKICogICAgICAgICAwID0gaW5hY3RpdmUKICogICAgICAgICAxID0gYWN0aXZlIAogKi8KCgoKLyogRGVzY3JpcHRvcnMgcmV0dXJuZWQgYnkgdGhlIGRldmljZSAKICogCiAqICBEZXZpY2UgRGVzY3JpcHRvcgogKiAKICogT2Zmc2V0CUZpZWxkCQlTaXplCVZhbHVlCURlc2NyaXB0aW9uCiAqIDAJYkxlbmd0aAkJMQkweDEyCVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcwogKiAxCWJEZXNjcmlwdG9yVHlwZQkxCTB4MDEJREVWSUNFIERlc2NyaXB0b3IgVHlwZQogKiAyCWJjZFVTQgkJMgkweDAxMTAJVVNCIFNwZWMgUmVsZWFzZSBOdW1iZXIKICogNAliRGV2aWNlQ2xhc3MJMQkweDAwCUNsYXNzIENvZGUKICogNQliRGV2aWNlU3ViQ2xhc3MJMQkweDAwCVN1YkNsYXNzIENvZGUKICogNgliRGV2aWNlUHJvdG9jb2wJMQkweDAwCVByb3RvY29sIENvZGUKICogNwliTWF4UGFja2V0U2l6ZTAgMQkweDA4CU1heGltdW0gcGFja2V0IHNpemUgZm9yIGVuZHBvaW50IDAKICogOAlpZFZlbmRvcgkyCTB4MDQwMwlWZW5kb3IgSUQKICogMTAJaWRQcm9kdWN0CTIJMHg4MzcyCVByb2R1Y3QgSUQgKEZURElfU0lPX1BJRCkKICogMTIJYmNkRGV2aWNlCTIJMHgwMDAxCURldmljZSByZWxlYXNlIG51bWJlcgogKiAxNAlpTWFudWZhY3R1cmVyCTEJMHgwMQlJbmRleCBvZiBtYW4uIHN0cmluZyBkZXNjCiAqIDE1CWlQcm9kdWN0CTEJMHgwMglJbmRleCBvZiBwcm9kIHN0cmluZyBkZXNjCiAqIDE2CWlTZXJpYWxOdW1iZXIJMQkweDAyCUluZGV4IG9mIHNlcmlhbCBubXIgc3RyaW5nIGRlc2MKICogMTcJYk51bUNvbmZpZ3VyYXRpb25zIDEgICAgMHgwMQlOdW1iZXIgb2YgcG9zc2libGUgY29uZmlndXJhdGlvbnMKICogCiAqIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvcgogKiAKICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQogKiAwCWJMZW5ndGgJCQkxCTB4MDkJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCiAqIDEJYkRlc2NyaXB0b3JUeXBlCQkxCTB4MDIJQ09ORklHVVJBVElPTiBEZXNjcmlwdG9yIFR5cGUKICogMgl3VG90YWxMZW5ndGgJCTIJMHgwMDIwCVRvdGFsIGxlbmd0aCBvZiBkYXRhCiAqIDQJYk51bUludGVyZmFjZXMJCTEJMHgwMQlOdW1iZXIgb2YgaW50ZXJmYWNlcyBzdXBwb3J0ZWQKICogNQliQ29uZmlndXJhdGlvblZhbHVlCTEJMHgwMQlBcmd1bWVudCBmb3IgU2V0Q09uZmlndXJhdGlvbigpIHJlcQogKiA2CWlDb25maWd1cmF0aW9uCQkxCTB4MDIJSW5kZXggb2YgY29uZmlnIHN0cmluZyBkZXNjcmlwdG9yCiAqIDcJYm1BdHRyaWJ1dGVzCQkxCTB4MjAJQ29uZmlnIGNoYXJhY3RlcmlzdGljcyBSZW1vdGUgV2FrZXVwCiAqIDgJTWF4UG93ZXIJCTEJMHgxRQlNYXggcG93ZXIgY29uc3VtcHRpb24KICogCiAqIEludGVyZmFjZSBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCiAqIDAJYkxlbmd0aAkJCTEJMHgwOQlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNAlJTlRFUkZBQ0UgRGVzY3JpcHRvciBUeXBlCiAqIDIJYkludGVyZmFjZU51bWJlcgkxCTB4MDAJTnVtYmVyIG9mIGludGVyZmFjZQogKiAzCWJBbHRlcm5hdGVTZXR0aW5nCTEJMHgwMAlWYWx1ZSB1c2VkIHRvIHNlbGVjdCBhbHRlcm5hdGUKICogNAliTnVtRW5kcG9pbnRzCQkxCTB4MDIJTnVtYmVyIG9mIGVuZHBvaW50cwogKiA1CWJJbnRlcmZhY2VDbGFzcwkJMQkweEZGCUNsYXNzIENvZGUKICogNgliSW50ZXJmYWNlU3ViQ2xhc3MJMQkweEZGCVN1YmNsYXNzIENvZGUKICogNwliSW50ZXJmYWNlUHJvdG9jb2wJMQkweEZGCVByb3RvY29sIENvZGUKICogOAlpSW50ZXJmYWNlCQkxCTB4MDIJSW5kZXggb2YgaW50ZXJmYWNlIHN0cmluZyBkZXNjcmlwdGlvbgogKiAKICogSU4gRW5kcG9pbnQgRGVzY3JpcHRvcgogKiAKICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQogKiAwCWJMZW5ndGgJCQkxCTB4MDcJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCiAqIDEJYkRlc2NyaXB0b3JUeXBlCQkxCTB4MDUJRU5EUE9JTlQgZGVzY3JpcHRvciB0eXBlCiAqIDIJYkVuZHBvaW50QWRkcmVzcwkxCTB4ODIJQWRkcmVzcyBvZiBlbmRwb2ludAogKiAzCWJtQXR0cmlidXRlcwkJMQkweDAyCUVuZHBvaW50IGF0dHJpYnV0ZXMgLSBCdWxrCiAqIDQJYk51bUVuZHBvaW50cwkJMgkweDAwNDAJbWF4aW11bSBwYWNrZXQgc2l6ZQogKiA1CWJJbnRlcnZhbAkJMQkweDAwCUludGVydmFsIGZvciBwb2xsaW5nIGVuZHBvaW50CiAqIAogKiBPVVQgRW5kcG9pbnQgRGVzY3JpcHRvcgogKiAKICogT2Zmc2V0CUZpZWxkCQkJU2l6ZQlWYWx1ZQogKiAwCWJMZW5ndGgJCQkxCTB4MDcJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCiAqIDEJYkRlc2NyaXB0b3JUeXBlCQkxCTB4MDUJRU5EUE9JTlQgZGVzY3JpcHRvciB0eXBlCiAqIDIJYkVuZHBvaW50QWRkcmVzcwkxCTB4MDIJQWRkcmVzcyBvZiBlbmRwb2ludAogKiAzCWJtQXR0cmlidXRlcwkJMQkweDAyCUVuZHBvaW50IGF0dHJpYnV0ZXMgLSBCdWxrCiAqIDQJYk51bUVuZHBvaW50cwkJMgkweDAwNDAJbWF4aW11bSBwYWNrZXQgc2l6ZQogKiA1CWJJbnRlcnZhbAkJMQkweDAwCUludGVydmFsIGZvciBwb2xsaW5nIGVuZHBvaW50CiAqICAgICAKICogREFUQSBGT1JNQVQKICogCiAqIElOIEVuZHBvaW50CiAqIAogKiBUaGUgZGV2aWNlIHJlc2VydmVzIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgZGF0YSBvbiB0aGlzIGVuZHBvaW50IHRvIGNvbnRhaW4gdGhlIGN1cnJlbnQKICogdmFsdWVzIG9mIHRoZSBtb2RlbSBhbmQgbGluZSBzdGF0dXMgcmVnaXN0ZXJzLiBJbiB0aGUgYWJzZW5jZSBvZiBkYXRhLCB0aGUgZGV2aWNlIAogKiBnZW5lcmF0ZXMgYSBtZXNzYWdlIGNvbnNpc3Rpbmcgb2YgdGhlc2UgdHdvIHN0YXR1cyBieXRlcyBldmVyeSA0MCBtcwogKiAKICogQnl0ZSAwOiBNb2RlbSBTdGF0dXMKICogCiAqIE9mZnNldAlEZXNjcmlwdGlvbgogKiBCMAlSZXNlcnZlZCAtIG11c3QgYmUgMQogKiBCMQlSZXNlcnZlZCAtIG11c3QgYmUgMAogKiBCMglSZXNlcnZlZCAtIG11c3QgYmUgMAogKiBCMwlSZXNlcnZlZCAtIG11c3QgYmUgMAogKiBCNAlDbGVhciB0byBTZW5kIChDVFMpCiAqIEI1CURhdGEgU2V0IFJlYWR5IChEU1IpCiAqIEI2CVJpbmcgSW5kaWNhdG9yIChSSSkKICogQjcJUmVjZWl2ZSBMaW5lIFNpZ25hbCBEZXRlY3QgKFJMU0QpCiAqIAogKiBCeXRlIDE6IExpbmUgU3RhdHVzCiAqIAogKiBPZmZzZXQJRGVzY3JpcHRpb24KICogQjAJRGF0YSBSZWFkeSAoRFIpCiAqIEIxCU92ZXJydW4gRXJyb3IgKE9FKQogKiBCMglQYXJpdHkgRXJyb3IgKFBFKQogKiBCMwlGcmFtaW5nIEVycm9yIChGRSkKICogQjQJQnJlYWsgSW50ZXJydXB0IChCSSkKICogQjUJVHJhbnNtaXR0ZXIgSG9sZGluZyBSZWdpc3RlciAoVEhSRSkKICogQjYJVHJhbnNtaXR0ZXIgRW1wdHkgKFRFTVQpCiAqIEI3CUVycm9yIGluIFJDVlIgRklGTwogKiAKICovCiNkZWZpbmUgRlRESV9SUzBfQ1RTCSgxIDw8IDQpCiNkZWZpbmUgRlRESV9SUzBfRFNSCSgxIDw8IDUpCiNkZWZpbmUgRlRESV9SUzBfUkkJKDEgPDwgNikKI2RlZmluZSBGVERJX1JTMF9STFNECSgxIDw8IDcpCgojZGVmaW5lIEZURElfUlNfRFIgIDEKI2RlZmluZSBGVERJX1JTX09FICgxPDwxKQojZGVmaW5lIEZURElfUlNfUEUgKDE8PDIpCiNkZWZpbmUgRlRESV9SU19GRSAoMTw8MykKI2RlZmluZSBGVERJX1JTX0JJICgxPDw0KQojZGVmaW5lIEZURElfUlNfVEhSRSAoMTw8NSkKI2RlZmluZSBGVERJX1JTX1RFTVQgKDE8PDYpCiNkZWZpbmUgRlRESV9SU19GSUZPICAoMTw8NykKCi8qCiAqIE9VVCBFbmRwb2ludAogKiAKICogVGhpcyBkZXZpY2UgcmVzZXJ2ZXMgdGhlIGZpcnN0IGJ5dGVzIG9mIGRhdGEgb24gdGhpcyBlbmRwb2ludCBjb250YWluIHRoZSBsZW5ndGgKICogYW5kIHBvcnQgaWRlbnRpZmllciBvZiB0aGUgbWVzc2FnZS4gRm9yIHRoZSBGVERJIFVTQiBTZXJpYWwgY29udmVydGVyIHRoZSBwb3J0IAogKiBpZGVudGlmaWVyIGlzIGFsd2F5cyAxLgogKiAKICogQnl0ZSAwOiBMaW5lIFN0YXR1cwogKiAKICogT2Zmc2V0CURlc2NyaXB0aW9uCiAqIEIwCVJlc2VydmVkIC0gbXVzdCBiZSAxCiAqIEIxCVJlc2VydmVkIC0gbXVzdCBiZSAwCiAqIEIyLi43CUxlbmd0aCBvZiBtZXNzYWdlIC0gKG5vdCBpbmNsdWRpbmcgQnl0ZSAwKQogKiAKICovCgo=