LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgojaWZuZGVmIF9QUENCT09UX0kzODZfSF8KI2RlZmluZSBfUFBDQk9PVF9JMzg2X0hfCTEKCi8qIGZvciB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcywgc2VlIHN0YXJ0LlMgKi8KZXh0ZXJuIHVsb25nIGkzODZib290X3N0YXJ0OwkgICAgLyogY29kZSBzdGFydCAoaW4gZmxhc2gpICovCmV4dGVybiB1bG9uZyBpMzg2Ym9vdF9lbmQ7CSAgICAvKiBjb2RlIGVuZCAoaW4gZmxhc2gpICovCmV4dGVybiB1bG9uZyBpMzg2Ym9vdF9yb21kYXRhX3N0YXJ0Oy8qIGRhdGFzZWdtZW50IGluIGZsYXNoIChhbHNvIGNvZGUrcm9kYXRhIGVuZCkgKi8KZXh0ZXJuIHVsb25nIGkzODZib290X3JvbWRhdGFfZGVzdDsgLyogZGF0YSBsb2NhdGlvbiBzZWdtZW50IGluIHJhbSAqLwpleHRlcm4gdWxvbmcgaTM4NmJvb3Rfcm9tZGF0YV9zaXplOyAvKiBzaXplIG9mIGRhdGEgc2VnbWVudCAqLwpleHRlcm4gdWxvbmcgaTM4NmJvb3RfYnNzX3N0YXJ0OyAgICAvKiBic3Mgc3RhcnQgKi8KZXh0ZXJuIHVsb25nIGkzODZib290X2Jzc19zaXplOyAgICAgLyogYnNzIHNpemUgKi8KZXh0ZXJuIHVsb25nIGkzODZib290X3N0YWNrX2VuZDsgICAgLyogZmlyc3QgdXNhYmxlIFJBTSBhZGRyZXNzIGFmdGVyIGJzcyBhbmQgc3RhY2sgKi8KZXh0ZXJuIHVsb25nIGkzODZib290X3JhbV9lbmQ7ICAgICAgLyogZW5kIG9mIHJhbSAqLwoKZXh0ZXJuIHVsb25nIGkzODZib290X3JlYWxtb2RlOyAgICAgLyogc3RhcnQgb2YgcmVhbG1vZGUgZW50cnkgY29kZSAqLwpleHRlcm4gdWxvbmcgaTM4NmJvb3RfcmVhbG1vZGVfc2l6ZTsvKiBzaXplIG9mIHJlYWxtb2RlIGVudHJ5IGNvZGUgKi8KZXh0ZXJuIHVsb25nIGkzODZib290X2Jpb3M7ICAgICAgICAgLyogc3RhcnQgb2YgQklPUyBlbXVsYXRpb24gY29kZSAqLwpleHRlcm4gdWxvbmcgaTM4NmJvb3RfYmlvc19zaXplOyAgICAvKiBzaXplIG9mIEJJT1MgZW11bGF0aW9uIGNvZGUgKi8KCgovKiBjcHUvLi4uL2NwdS5jICovCmludCBjcHVfaW5pdCh2b2lkKTsKaW50IHRpbWVyX2luaXQodm9pZCk7CgovKiBib2FyZC8uLi4vLi4uICovCmludAlib2FyZF9pbml0KHZvaWQpOwppbnQJZHJhbV9pbml0ICh2b2lkKTsKCgojZW5kaWYJLyogX1BQQ0JPT1RfSTM4Nl9IXyAqLwo=