LyoKICogQ29weXJpZ2h0IDIwMDYgYnkgSm9uYXRoYW4gRXJuc3QKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKTUFJTk1FTlUgTUVOVSBESVNDQVJEQUJMRSAKQkVHSU4KICAgIFBPUFVQICImRmljaGllciIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZOb3V2ZWF1XHRDdHJsK04iLCAgICAgICAgSURfRklMRV9ORVcKICAgICAgICBNRU5VSVRFTSAiJk91dnJpclx0Q3RybCtPIiwgICAgICAgICBJRF9GSUxFX09QRU4KICAgICAgICBNRU5VSVRFTSAiJlNhdXZlclx0Q3RybCtTIiwgICAgICAgICBJRF9GSUxFX1NBVkUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiJlF1aXR0ZXIiLCAgICAgICAgSURfRklMRV9FWElUCiAgICBFTkQKICAgIFBPUFVQICLJJmRpdGlvbiIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIiZBbm51bGVyXHRDdHJsK1oiLCAgICAgICAgICAgICAgICBJRF9FRElUX1VORE8KICAgICAgICBNRU5VSVRFTSAiJlLpcOl0ZXJcdEN0cmwrWSIsICAgICAgICAgICAgICAgIElEX0VESVRfUkVETwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICImQ291cGVyXHRDdHJsK1giLCAgICAgICAgICAgICAgICAgSURfRURJVF9DVVQKICAgICAgICBNRU5VSVRFTSAiQ28mcGllclx0Q3RybCtDIiwgICAgICAgICAgICAgICAgIElEX0VESVRfQ09QWQogICAgICAgIE1FTlVJVEVNICJDJm9sbGVyXHRDdHJsK1YiLCAgICAgICAgICAgICAgICAgSURfRURJVF9QQVNURQogICAgICAgIE1FTlVJVEVNICImRWZmYWNlclx0RGVsIiwgICAgICAgICAgICAgICAgICAgSURfRURJVF9DTEVBUgogICAgICAgIE1FTlVJVEVNICImU+lsZWN0aW9ubmVyIHRvdXRcdEN0cmwrQSIsICAgICAgSURfRURJVF9TRUxFQ1RBTEwKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAiTGVjdHVyZS0mc2V1bGUiLCAgICAgICAgICAgICAgICAgIElEX0VESVRfUkVBRE9OTFkKICAgICAgICBNRU5VSVRFTSAiJk1vZGlmaekiLCAgICAgICAgICAgICAgICAgICAgICAgIElEX0VESVRfTU9ESUZJRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAiJkF2YW5j6XMiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZJbmZvcm1hdGlvbiBz6WxlY3Rpb24iLCAgICAgIElEX0VESVRfU0VMRUNUSU9OSU5GTwogICAgICAgICAgICBNRU5VSVRFTSAiJkZvcm1hdCBjYXJhY3TocmVzIiwgICAgICAgICAgSURfRURJVF9DSEFSRk9STUFUCiAgICAgICAgICAgIE1FTlVJVEVNICImROlmLiBmb3JtYXQgY2FyLiIsICAgICAgICAgICBJRF9FRElUX0RFRkNIQVJGT1JNQVQKICAgICAgICAgICAgTUVOVUlURU0gIkZvcm1hdCBwYXJhZ3JhcCZoZSIsICAgICAgICAgIElEX0VESVRfUEFSQUZPUk1BVAogICAgICAgICAgICBNRU5VSVRFTSAiJlJlY2V2b2lyIHRleHRlIiwgICAgICAgICAgICAgSURfRURJVF9HRVRURVhUCiAgICAgICAgRU5ECiAgICBFTkQKICAgIFBPUFVQICJGb3JtYSZ0IgogICAgQkVHSU4KICAgICAgICBQT1BVUCAiJkZvbmQiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIiZTeXN06G1lXHRDdHJsKzEiLCAgICAgICAgIElEX0JBQ0tfMQogICAgICAgICAgICBNRU5VSVRFTSAiJkphdW5hc3NlXHRDdHJsKzIiLCAgICAgICAgICAgSURfQkFDS18yCiAgICAgICAgRU5ECiAgICAgICAgUE9QVVAgIiZBbGlnbmVtZW50IgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICJBbGlnbukg4CAmZ2F1Y2hlXHRDdHJsK0wiLCAgICAgICAgIElEX0FMSUdOX0xFRlQKICAgICAgICAgICAgTUVOVUlURU0gIiZDZW50culcdEN0cmwrRSIsICAgICAgIElEX0FMSUdOX0NFTlRFUgogICAgICAgICAgICBNRU5VSVRFTSAiQWxpZ27pIOAgJmRyb2l0ZVx0Q3RybCtSIiwgICAgICAgIElEX0FMSUdOX1JJR0hUCiAgICAgICAgRU5ECiAgICBFTkQKRU5ECg==