LyoKICogUG9ydHVndWVzZSByZXNvdXJjZXMgZm9yIFdMREFQMzIKICoKICogQ29weXJpZ2h0IDIwMDggUmljYXJkbyBGaWxpcGUKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIndpbmRlZi5oIgoKTEFOR1VBR0UgTEFOR19QT1JUVUdVRVNFLCBTVUJMQU5HX05FVVRSQUwKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgIDAgIlN1Y2Vzc28iCiAgICAxICJFcnJvIGRlIG9wZXJh5/VlcyIKICAgIDIgIkVycm8gZGUgcHJvdG9jb2xvIgogICAgMyAiVGVtcG8gbGltaXRlIGV4Y2VkaWRvIgogICAgNCAiVGFtYW5obyBsaW1pdGUgZXhjZWRpZG8iCiAgICA1ICJDb21wYXJhciBGYWxzbyIKICAgIDYgIkNvbXBhcmFyIFZlcmRhZGVpcm8iCiAgICA3ICJN6XRvZG8gZGUgYXV0ZW50aWNh5+NvIG7jbyBzdXBvcnRhZG8iCiAgICA4ICJBdXRlbnRpY2Hn428gZm9ydGUgbmVjZXNz4XJpYSIKICAgIDkgIlJlZmVy6m5jaWEgKHYyKSIKICAgIDEwICJSZWZlcupuY2lhIgogICAgMTEgIkxpbWl0ZSBkZSBhZG1pbmlzdHJh5+NvIGV4Y2VkaWRvIgogICAgMTIgIkV4dGVuc+NvIENy7XRpY2EgaW5kaXNwb27tdmVsIgogICAgMTMgIkNvbmZpZGVuY2lhbGlkYWRlIG5lY2Vzc+FyaWEiCiAgICAxNCAiIgogICAgMTUgIiIKICAgIDE2ICJBdHJpYnV0byBu428gZW5jb250cmFkbyIKICAgIDE3ICJUaXBvIGluZGVmaW5pZG8iCiAgICAxOCAiQXRyaWJ1aefjbyBpbXBy83ByaWEiCiAgICAxOSAiVmlvbGHn428gZGUgcmVzdHJp5/VlcyIKICAgIDIwICJWYWxvciBvdSBhdHJpYnV0byBleGlzdGVudGUiCiAgICAyMSAiU2ludGF4ZSBJbnbhbGlkYSIKICAgIDIyICIiCiAgICAyMyAiIgogICAgMjQgIiIKICAgIDI1ICIiCiAgICAyNiAiIgogICAgMjcgIiIKICAgIDI4ICIiCiAgICAyOSAiIgogICAgMzAgIiIKICAgIDMxICIiCiAgICAzMiAiT2JqZWN0byBu428gZW5jb250cmFkbyIKICAgIDMzICJQcm9ibGVtYSBkZSBhYnJldmlhdHVyYSIKICAgIDM0ICJTaW50YXhlIEROIGluduFsaWRhIgogICAgMzUgIskgZm9saGEiCiAgICAzNiAiUHJvYmxlbWEgbmEgcmVmZXLqbmNpYSBkYSBhYnJldmlhdHVyYSIKICAgIDM3ICIiCiAgICAzOCAiIgogICAgMzkgIiIKICAgIDQwICIiCiAgICA0MSAiIgogICAgNDIgIiIKICAgIDQzICIiCiAgICA0NCAiIgogICAgNDUgIiIKICAgIDQ2ICIiCiAgICA0NyAiIgogICAgNDggIkF1dGVudGljYefjbyBpbXBy83ByaWEiCiAgICA0OSAiQ3JlZGVuY2lhaXMgSW524WxpZGFzIgogICAgNTAgIkRpcmVpdG9zIGluc3VmaWNpZW50ZXMiCiAgICA1MSAiT2N1cGFkbyIKICAgIDUyICJJbmRpc3Bvbu12ZWwiCiAgICA1MyAiSW5kaXNwb3N0byBhIHJlYWxpemFyIgogICAgNTQgIkNpY2xvIGRldGVjdGFkbyIKICAgIDU1ICIiCiAgICA1NiAiIgogICAgNTcgIiIKICAgIDU4ICIiCiAgICA1OSAiIgogICAgNjAgIkZhbHRhIGRlIGNvbnRyb2xvIGRlIG9yZGVuYefjbyIKICAgIDYxICJFcnJvIGRlIGxpbWl0ZSBkZSDtbmRpY2UiCiAgICA2MiAiIgogICAgNjMgIiIKICAgIDY0ICJWaW9sYefjbyBkZSBOb21lIgogICAgNjUgIlZpb2xh5+NvIGRhIENsYXNzZSBkZSBPYmplY3RvIgogICAgNjYgIk7jbyBwZXJtaXRpZG8gZW0gbuNvLWZvbGhhIgogICAgNjcgIk7jbyBwZXJtaXRpZG8gZW0gUkROIgogICAgNjggIkrhIGV4aXN0ZSIKICAgIDY5ICJTZW0gbW9kaWZpY2Hn9WVzIGRlIENsYXNzZSBkZSBPYmplY3RvIgogICAgNzAgIlJlc3VsdGFkb3MgbXVpdG8gZ3JhbmRlcyIKICAgIDcxICJBZmVjdGEgbfpsdGlwbG9zIERTQXMiCiAgICA3MiAiIgogICAgNzMgIiIKICAgIDc0ICIiCiAgICA3NSAiIgogICAgNzYgIiIKICAgIDc3ICIiCiAgICA3OCAiIgogICAgNzkgIiIKICAgIDgwICJPdXRybyIKICAgIDgxICJTZXJ2aWRvciBlbSBiYWl4byIKICAgIDgyICJFcnJvIExvY2FsIgogICAgODMgIkVycm8gZGUgQ29kaWZpY2Hn428iCiAgICA4NCAiRXJybyBkZSBEZXNjb2RpZmljYefjbyIKICAgIDg1ICJUZW1wbyBleGNlZGlkbyIKICAgIDg2ICJBdXRlbnRpY2Hn428gZGVzY29uaGVjaWRhIgogICAgODcgIkVycm8gZGUgZmlsdHJvIgogICAgODggIkNhbmNlbGFkbyBwZWxvIHV0aWxpemFkb3IiCiAgICA4OSAiRXJybyBkZSBwYXLibWV0cm8iCiAgICA5MCAiU2VtIG1lbfNyaWEiCiAgICA5MSAiTuNvIGNvbnNlZ3VlIGxpZ2FyIGFvIHNlcnZpZG9yIExEQVAiCiAgICA5MiAiT3BlcmHn428gbuNvIHN1cG9ydGFkYSBwb3IgZXN0YSB2ZXJz428gZG8gcHJvdG9jb2xvIExEQVAiCiAgICA5MyAiTyBjb250cm9sbyBlc3BlY2lmaWNhZG8gbuNvIGZvaSBlbmNvbnRyYWRvIG5hIG1lbnNhZ2VtIgogICAgOTQgIk5lbmh1bSByZXN1bHRhZG8gcHJlc2VudGUgbmEgbWVuc2FnZW0iCiAgICA5NSAiTWFpcyByZXN1bHRhZG9zIGRldm9sdmlkb3MiCiAgICA5NiAiQ2ljbG8gZW5xdWFudG8gcmVzb2x2ZSByZWZlcupuY2lhcyIKICAgIDk3ICJMaW1pdGUgZGUgc2FsdG8gZGUgcmVmZXLqbmNpYXMgZXhjZWRpZG8iCn0K