LyoKICogRmlubmlzaCByZXNvdXJjZXMgZm9yIE1TSQogKgogKiBDb3B5cmlnaHQgMjAwNSBLaW1tbyBNeWxseXZpcnRhCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQQogKi8KCiNpbmNsdWRlICJ3aW5kZWYuaCIKCkxBTkdVQUdFIExBTkdfRklOTklTSCwgU1VCTEFOR19ERUZBVUxUCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7Cgk0ICJBbm5ldHR1YSBhc2VubnVzcGFrZXR0aWEgZWkgdm9pdHUgYXZhdGEuIFRhcmtpc3RhIHRpZWRvc3RvbiBwb2xrdSBqYSB5cml05CB1dWRlbGxlZW4uIgoJNSAiUG9sa3VhICVzIGVpIGz2eWR5LiIKCTkgIkFubmEgbGV2eSAlcyIKCTEwICJXaW5kb3dzIEluc3RhbGxlciAlc1xuXG4iIFwKCSJL5Hl0dPY6XG4iIFwKCSJtc2lleGVjIGtvbWVudG8ge3Bha29sbGluZW4gcGFyYW1ldHJpfSBbdmFsaW5uYWluZW4gcGFyYW1ldHJpXVxuXG4iIFwKCSJBc2VubmEgdHVvdGU6XG4iIFwKCSJcdC9pIHtwYWtldHRpfHR1b3Rla29vZGl9IFtvbWluYWlzdXVzXVxuIiBcCgkiXHQvcGFja2FnZSB7cGFrZXR0aXx0dW90ZWtvb2RpfSBbb21pbmFpc3V1c11cbiIgXAoJIlx0L2Ege3Bha2V0dGl9IFtvbWluYWlzdXVzXVxuIiBcCgkiS29yamFhIGFzZW5udXM6XG4iIFwKCSJcdC9mW3B8b3xlfGR8Y3xhfHV8bXxzfHZdIHtwYWtldHRpfHR1b3Rla29vZGl9XG4iIFwKCSJQb2lzdGEgdHVvdGU6XG4iIFwKCSJcdC91bmluc3RhbGwge3Bha2V0dGl8dHVvdGVrb29kaX0gW29taW5haXN1dXNdXG4iIFwKCSJcdC94IHtwYWtldHRpfHR1b3Rla29vZGl9IFtvbWluYWlzdXVzXVxuIiBcCgkiTWFpbm9zdGEgKGFkdmVydGlzZSkgdHVvdGV0dGE6XG4iIFwKCSJcdC9qW3V8bV0gcGFrZXR0aSBbL3QgbXV1bm5vc10gWy9nIGtpZWxpdHVubnVzXVxuIiBcCgkiQXNlbm5hIGtvcmphdXM6XG4iIFwKCSJcdC9wIGtvcmphdXNwYWtldHRpIFtvbWluYWlzdXVzXVxuIiBcCgkiXHQvcCBrb3JqYXVzcGFrZXR0aSAvYSBwYWtldHRpIFtvbWluYWlzdXVzXVxuIiBcCgkiTG9raS0gamEga+R5dHT2bGlpdHR5beRhc2V0dWtzZXQgZWRlbGxpc2lsbGUga29tZW5ub2lsbGU6XG4iIFwKCSJcdC9sWypdW2l8d3xlfGF8cnx1fGN8bXxvfHB8dnxdWyt8IV0gbG9raXRpZWRvc3RvXG4iIFwKCSJcdC9xe3xufGJ8cnxmfG4rfGIrfGItfVxuIiBcCgkiUmVraXN0ZXL2aSBNU0ktcGFsdmVsdTpcbiIgXAoJIlx0L3lcbiIgXAoJIlBlcnUgTVNJLXBhbHZlbHVuIHJla2lzdGVy9mludGk6XG4iIFwKCSJcdC96XG4iIFwKCSJO5Hl05CB05G3kIG9oamU6XG4iIFwKCSJcdC9oZWxwXG4iIFwKCSJcdC8/XG4iCgkxMSAiQW5uYSBrYW5zaW8sIGpvc3NhIG9uICVzIgoJMTIgIk9taW5haXN1dWRlbiBhc2VubnVzbORoZGUgcHV1dHR1dS4iCgkxMyAiT21pbmFpc3V1ZGVuIHZlcmtrb2xldnkgcHV1dHR1dS4iCgkxNCAiT21pbmFpc3V1czoiCgkxNSAiVmFsaXRzZSBrYW5zaW8sIGpvc3NhIG9uICVzIgp9Cg==