LyoKICogQ29weXJpZ2h0IKkgMjAwNy0yMDA4IFBldGVyIEh1dHRlcmVyCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCiAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCiAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CiAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKICogU29mdHdhcmUuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgogKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAqCiAqIEF1dGhvcnM6IFBldGVyIEh1dHRlcmVyLCBVbml2ZXJzaXR5IG9mIFNvdXRoIEF1c3RyYWxpYSwgTklDVEEKICoKICovCgoKLyogWEdFIENsaWVudCBpbnRlcmZhY2VzICovCgojaWZuZGVmIF9YR0VfSF8KI2RlZmluZSBfWEdFX0hfCgojaW5jbHVkZSA8WDExL1hsaWIuaD4KI2luY2x1ZGUgPFgxMS9YZnVuY3Byb3RvLmg+CgpfWEZVTkNQUk9UT0JFR0lOCgovKioKICogR2VuZXJpYyBFdmVudCBtYXNrLgogKiBUbyBiZSB1c2VkIHdoZW5ldmVyIGEgbGlzdCBvZiBtYXNrcyBwZXIgZXh0ZW5zaW9uIGhhcyB0byBiZSBwcm92aWRlZC4KICoKICogQnV0LCBkb24ndCBhY3R1YWxseSB1c2UgdGhlIENBUkR7OCwxNiwzMn0gdHlwZXMuICBXZSBjYW4ndCBnZXQgdGhlbSB0aGVtCiAqIGRlZmluZWQgaGVyZSB3aXRob3V0IHBvbGx1dGluZyB0aGUgbmFtZXNwYWNlLgogKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgdW5zaWduZWQgY2hhciAgICAgICBleHRlbnNpb247CiAgICB1bnNpZ25lZCBjaGFyICAgICAgIHBhZDA7CiAgICB1bnNpZ25lZCBzaG9ydCAgICAgIHBhZDE7CiAgICB1bnNpZ25lZCBpbnQgICAgICBldm1hc2s7Cn0gWEdlbmVyaWNFdmVudE1hc2s7CgpCb29sIFhHRVF1ZXJ5RXh0ZW5zaW9uKERpc3BsYXkqIGRweSwgaW50ICpldmVudF9iYXNlcCwgaW50ICplcnJfYmFzZXApOwpCb29sIFhHRVF1ZXJ5VmVyc2lvbihEaXNwbGF5KiBkcHksIGludCAqbWFqb3IsIGludCogbWlub3IpOwoKX1hGVU5DUFJPVE9FTkQKCiNlbmRpZiAvKiBfWEdFX0hfICovCg==