LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBEYW5pc2ggbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDggSmVucyBBbGJyZXRzZW4gPGplbnNAYWxicmV0c2VuLmRrPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgoKTEFOR1VBR0UgTEFOR19EQU5JU0gsIFNVQkxBTkdfREVGQVVMVAoKU1RSSU5HVEFCTEUKewogICAgU1RSSU5HX0lOVlBBUk1TLCAiVWd5bGRpZ3QgYW50YWwgcGFyYW1ldGVyZTsgYnJ1ZyCreGNvcHkgLz+7IGZvciBoamVscFxuIgogICAgU1RSSU5HX0lOVlBBUk0sICAiVWd5bGRpZ3QgcGFyYW1ldGVyIKslc7s7IGJydWcgq3hjb3B5IC8/uyBmb3IgaGplbHBcbiIKICAgIFNUUklOR19QQVVTRSwgICAgIlRyeWsgRW50ZXIgZm9yIGF0IGJlZ3luZGUgYXQga29waWVyZVxuIgogICAgU1RSSU5HX1NJTUNPUFksICAiJWQgZmlsKGVyKSB2aWwgYmxpdmUga29waWVyZXRcbiIKICAgIFNUUklOR19DT1BZLCAgICAgIiVkIGZpbChlcikga29waWVyZXRcbiIKICAgIFNUUklOR19RSVNESVIsICAgIkVyIKslc7sgZXQgZmlsbmF2biBlbGxlciBrYXRhbG9nXG4iIFwKICAgICAgICAgICAgICAgICAgICAgInDlIGRlc3RpbmF0aW9uZW4/XG4iIFwKICAgICAgICAgICAgICAgICAgICAgIihGIC0gRmlsLCBLIC0gS2F0YWxvZylcbiIKICAgIFNUUklOR19TUkNQUk9NUFQsIiVzPyAoSmF8TmVpKVxuIgogICAgU1RSSU5HX09WRVJXUklURSwiT3ZlcnNrcml2ZSCrJXO7PyAoSmF8TmVpfEFsbGUpXG4iCiAgICBTVFJJTkdfQ09QWUZBSUwsICJLdW5uZSBpa2tlIGtvcGllcmUgqyVzuyB0aWwgqyVzuzsgZmVqbGV0IG1lZCByL2MgJWRcbiIKICAgIFNUUklOR19PUEVORkFJTCwgIkt1bm5lIGlra2Ug5WJuZSCrJXO7XG4iCiAgICBTVFJJTkdfUkVBREZBSUwsICJLdW5uZSBpa2tlIGzmc2UgqyVzu1xuIgogICAgU1RSSU5HX1lFU19DSEFSLCAiSiIKICAgIFNUUklOR19OT19DSEFSLCAgIk4iCiAgICBTVFJJTkdfQUxMX0NIQVIsICJBIgogICAgU1RSSU5HX0ZJTEVfQ0hBUiwiRiIKICAgIFNUUklOR19ESVJfQ0hBUiwgIksiCgogICAgU1RSSU5HX0hFTFAsCiJYQ09QWSAtIEtvcGllcmVyIGZpbGVyIGVsbGVyIGthdGFsb2d0cmUgdGlsIGVuIG3lbHBsYXNzZXJpbmdcblwKXG5cClN5bnRha3M6XG5cClhDT1BZIGtpbGRlIFtt5WxdIFsvSV0gWy9TXSBbL1FdIFsvRl0gWy9MXSBbL1ddIFsvVF0gWy9OXSBbL1VdXG5cClx0ICAgICBbL1JdIFsvSF0gWy9DXSBbL1BdIFsvQV0gWy9NXSBbL0VdIFsvRF0gWy9ZXSBbLy1ZXVxuXApcblwKaHZvcjpcblwKWy9JXSAgQW50YWcgYXQgZGVzdGluYXRpb25lbiBlciBldCBrYXRhbG9nIGh2aXMgZGVzdGluYXRpb25lbiBpa2tlXG5cCiAgICAgIFx0ZmluZGVzIG9nIDIgZWxsZXIgZmxlcmUgZmlsZXIgYmxpdmVyIGtvcGllcmV0XG5cClsvU10gIEtvcGllciBrYXRhbG9nZXIgb2cgdW5kZXJrYXRhbG9nZXJcblwKWy9FXSAgS29waWVyIGthdGFsb2dlciBvZyB1bmRlcmthdGFsb2dlciwgb2dz5SB0b21tZSBrYXRhbG9nZXJcblwKWy9RXSAgVuZyIHN0aWxsZSA6IHZpcyBpa2tlIGZpbG5hdm5lIHVuZGVyIGtvcGllcmluZ1xuXApbL0ZdICBGaWwgaGVsZSBraWxkZS0gb2cgbeVsbmF2biB1bmRlciBrb3BpZXJpbmdcblwKWy9MXSAgU2ltdWzpciBvcGVyYXRpb25lbjsgdmlzIGt1biwgZ/hyIGludGV0XG5cClsvV10gIFNw+HJnIGb4ciBrb3BlcmluZ2VuIHN0YXJ0ZXJcblwKWy9UXSAgTGF2IHRvbSBrYXRhbG9nc3RydWt0dXI7IGtvcGllciBpa2tlIGZpbGVyXG5cClsvWV0gIFNw+HJnIGlra2Ugb20gZmlsZXIgc2thbCBvdmVyc2tyaXZlc1xuXApbLy1ZXSBTcPhyZyBm+HIgb20gZmlsZXIgc2thbCBvdmVyc2tyaXZlc1xuXApbL1BdICBTcPhyZyBvbSBodmVyIGVua2VsdCBmaWwgZGVyIHNrYWwga29waWVyZXNcblwKWy9OXSAgS29waWVyIHNvbSBrb3J0ZSBmaWxuYXZuICg4LjMgdGVnbilcblwKWy9VXSAgS29waWVyIGt1biBmaWxlciBzb20gYWxsZXJlZGUgZmluZGVzIHDlIGRlc3RpbmF0aW9uZW5cblwKWy9SXSAgT3ZlcnNrcml2IGZpbGVyIHNvbSBlciBza3JpdmViZXNreXR0ZXRcblwKWy9IXSAgS29waWVyIHNranVsdGUgZmlsZXIgb2cgc3lzdGVtZmlsZXJcblwKWy9DXSAgRm9ydHPmdCBzZWx2IG9tIGRldCBvcHN05XIgZmVqbCB1bmRlciBrb3BpZXJpbmdlblxuXApbL0FdICBLb3BpZXIgaWtrZSBmaWxlciBzb20gZXIgbWFya2VyZXQgc29tIGFya2l2XG5cClsvTV0gIEtvcGllciBrdW4gZmlsZXIgc29tIGVyIG1hcmtlcmV0IHNvbSBha3JpdjsgZmplcm5lciBkZW5uZSBtYXJrZXJpbmdcblwKWy9EIHwgL0Q6bS1kLeVdIEtvcGllciBrdW4gbnllIGZpbGVyIGVsbGVyIGRlbSBzb20gZXIg5m5kcmV0IGVmdGVyXG5cCiAgICAgIFx0XHRkZW4gb3BnaXZuZSBkYXRvLlxuXAogICAgICBcdFx0SHZpcyBpbmdlbiBkYXRvIG9wZ2l2ZXMga29waWVyZXMga3VuIGRlIGZpbGVyIGh2b3JcblwKICAgICAgXHRcdGRlc3RpbmF0aW9uZW4gZXIg5mxkcmUgZW5kIGtpbGRlblxuXG4iCgp9Cg==