LyoKICogQ2xvY2sgKEtvcmVhbiByZXNvdXJjZXMpCiAqCiAqIENvcHlyaWdodCAxOTk4IE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KICogQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqIENvcHlyaWdodCAyMDA0IE1pa2UgTWNDb3JtYWNrCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJjbG9ja19yZXMuaCIKCkxBTkdVQUdFIExBTkdfS09SRUFOLCBTVUJMQU5HX0RFRkFVTFQKCk1BSU5fTUVOVSBNRU5VIAp7CiBQT1BVUCAite63zyDBpLq4KCZQKSIgewogIE1FTlVJVEVNICK+xrOvt86x1ygmTCkiLCBJRE1fQU5BTE9HCiAgTUVOVUlURU0gIrXwwfbF0CgmVCkiLCBJRE1fRElHSVRBTAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICKx27LDKCZGKS4uLiIsIElETV9GT05UCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsGmuPEgx6W9wyC+yMfUICgmVykiLCBJRE1fTk9USVRMRQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICLDyigmUykiLCBJRE1fU0VDT05EUwogIE1FTlVJVEVNICKzr8KlKCZEKSIsIElETV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsfXu/MgIL7Vv6EgKCZBKSIsIElETV9PTlRPUAogfQogUE9QVVAgIsGkurgoJk8pIiB7CiAgTUVOVUlURU0gIr3DsOggwaS6uCgmQSkuLi4iLCBJRE1fQUJPVVQKIH0KfQoKU1RSSU5HVEFCTEUKewpJRFNfQ0xPQ0ssICK9w7DoIgp9Cg==