LyoKICogWENPUFkgLSBXaW5lLWNvbXBhdGlibGUgeGNvcHkgcHJvZ3JhbQogKiBOb3J3ZWdpYW4gQm9rbeVsIGxhbmd1YWdlIHN1cHBvcnQKICoKICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXhhbmRlciBOLiBT+HJuZXMgPGFsZXhAdGhlaGFuZG9mYWdvbnkuY29tPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgoKTEFOR1VBR0UgTEFOR19OT1JXRUdJQU4sIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTAoKU1RSSU5HVEFCTEUKewogICAgU1RSSU5HX0lOVlBBUk1TLCAiVWd5bGRpZyBhbnRhbGwgcGFyYW1ldGVyZTsgYnJ1ayCreGNvcHkgLz+7IGZvciBoamVscFxuIgogICAgU1RSSU5HX0lOVlBBUk0sICAiVWd5bGRpZyBwYXJhbWV0ZXIgqyVzuzsgYnJ1ayCreGNvcHkgLz+7IGZvciBoamVscFxuIgogICAgU1RSSU5HX1BBVVNFLCAgICAiVHJ5a2sgRW50ZXIgZm9yIOUgYmVneW5uZSDlIGtvcGllcmVcbiIKICAgIFNUUklOR19TSU1DT1BZLCAgIiVkIGZpbChlcikgdmlsbGUgYmxpdHQga29waWVydFxuIgogICAgU1RSSU5HX0NPUFksICAgICAiJWQgZmlsKGVyKSBrb3BpZXJ0XG4iCiAgICBTVFJJTkdfUUlTRElSLCAgICJFZXIgqyVzuyBldCBmaWxuZXZuIGVsbGVyIGthdGFsb2dcbiIgXAogICAgICAgICAgICAgICAgICAgICAiaSBt5WxldD9cbiIgXAogICAgICAgICAgICAgICAgICAgICAiKEYgLSBGaWwsIEsgLSBLYXRhbG9nKVxuIgogICAgU1RSSU5HX1NSQ1BST01QVCwiJXM/IChKYXxOZWkpXG4iCiAgICBTVFJJTkdfT1ZFUldSSVRFLCJTa3JpdmUgb3ZlciCrJXO7PyAoSmF8TmVpfEFsbGUpXG4iCiAgICBTVFJJTkdfQ09QWUZBSUwsICJLbGFydGUgaWtrZSBrb3BpZXJlIKslc7sgdGlsIKslc7s7IGZlaWxldCBtZWQgci9jICVkXG4iCiAgICBTVFJJTkdfT1BFTkZBSUwsICJLbGFydGUgaWtrZSDlcG5lIKslc7tcbiIKICAgIFNUUklOR19SRUFERkFJTCwgIktsYXJ0ZSBpa2tlIGxlc2UgqyVzu1xuIgogICAgU1RSSU5HX1lFU19DSEFSLCAiSiIKICAgIFNUUklOR19OT19DSEFSLCAgIk4iCiAgICBTVFJJTkdfQUxMX0NIQVIsICJBIgogICAgU1RSSU5HX0ZJTEVfQ0hBUiwiRiIKICAgIFNUUklOR19ESVJfQ0hBUiwgIksiCgogICAgU1RSSU5HX0hFTFAsCiJYQ09QWSAtIEtvcGllcmVyIGZpbGVyIGVsbGVyIGthdGFsb2d0cmUgdGlsIGVuIG3lbHBsYXNzZXJpbmdcblwKXG5cClN5bnRheDpcblwKWENPUFkga2lsZGUgW23lbF0gWy9JXSBbL1NdIFsvUV0gWy9GXSBbL0xdIFsvV10gWy9UXSBbL05dIFsvVV0gXG5cClx0ICAgICBbL1JdIFsvSF0gWy9DXSBbL1BdIFsvQV0gWy9NXSBbL0VdIFsvRF0gWy9ZXSBbLy1ZXVxuXApcblwKV2hlcmU6XG5cClxuXApbL0ldICBBbnRhIGF0IG3lbGV0IGVyIGVuIGthdGFsb2cgaHZpcyBt5WxldCBpa2tlIGZpbm5lcyBvZyAyIGVsbGVyXG5cCiAgICAgIFx0ZmxlcmUgZmlsZXIgYmxpciBrb3BpZXJ0XG5cClsvU10gIEtvcGllciBrYXRhbG9nZXIgb2cgdW5kZXJrYXRhbG9nZXJcblwKWy9FXSAgS29waWVyIGthdGFsb2dlciBvZyB1bmRlcmthdGFsb2dlciwgdGEgbWVkIHRvbW1lIGthdGFsb2dlclxuXApbL1FdICBTdGlsbGUgbW9kdXM6IGlra2UgdmlzIGZpbG5hdm4gdW5kZXIga29waWVyaW5nXG5cClsvRl0gIEZpbCBoZWxlIGtpbGRlLSBvZyBt5WxuYXZuIHVuZGVyIGtvcGllcmluZ1xuXApbL0xdICBTaW11bGVyIG9wZXJhc2pvbmVuOyB2aXMgYmFyZSBodmEgc29tIHZpbGxlIGJsaXR0IGtvcGllcnRcblwKWy9XXSAgU3D4ciBmb3Iga29wZXJpbmdlbiBzdGFydGVyXG5cClsvVF0gIExhZyB0b20gIGthdGFsb2dzdHJ1a3R1cjsgaWtrZSBrb3BpZXIgZmlsZXJcblwKWy9ZXSAgSWtrZSBzcPhyIG7lciBmaWxlciBza2FsIG92ZXJza3JpdmVzXG5cClsvLVldIFNw+HIgZvhyIGZpbGVyIHNrYWwgb3ZlcnNrcml2ZXNcblwKWy9QXSAgU3D4ciBmb3IgaHZlciBraWxkZWZpbCBzb20gc2thbCBrb3BpZXJlc1xuXApbL05dICBLb3BpZXIgc29tIGtvcnRlIGZpbG5hdm4gKDguMyB0ZWduKVxuXApbL1VdICBCYXJlIGtvcGllciBmaWxlciBzb20gYWxsZXJlZGUgZmlubmVzIGkgbeVsZXRcblwKWy9SXSAgU2tyaXYgb3ZlciBmaWxlciBzb20gZXIgc2tyaXZlYmVza3l0dGV0XG5cClsvSF0gIEtvcGllciBza2p1bHRlIGZpbGVyIG9nIHN5c3RlbWZpbGVyXG5cClsvQ10gIEZvcnRzZXR0IHNlbHYgb20gZGV0IG9wcHN05XIgZmVpbCB1bmRlciBrb3BpZXJpbmdlblxuXApbL0FdICBJa2tlIGtvcGllciBmaWxlciBzb20gZXIgbWFya2VydCBzb20gYXJraXZcblwKWy9NXSAgQmFyZSBrb3BpZXIgZmlsZXIgc29tIGVyIG1hcmtlcnQgc29tIGFrcml2OyBmamVybmVyIGRlbm5lIG1lcmtpbmdlbiBcblwKWy9EIHwgL0Q6bS1kLeVdIEtvcGllciBueWUgZmlsZXIgZWxsZXIgZGUgc29tIGVyIGVuZHJldCBldHRlclxuXAogICAgICBcdFx0ZGVuIG9wcGdpdHRlIGRhdG9lbi5cblwKICAgICAgXHRcdEh2aXMgaW5nZW4gZGF0byBvcHBnaXMga29waWVyZXMgYmFyZSBkZSBmaWxlbmUgc29tIGVyXG5cCiAgICAgIFx0XHRlbGRyZSBpIG3lbGV0IGVubiBpIGtpbGRlblxuXG4iCgp9Cg==