LyoKICogIE5vdGVwYWQgKFdhbG9uIHJlc291cmNlcykKICoKICogIENvcHlyaWdodCAxOTk3LDk4IE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaD4KICogIFByb29mcmVhZCAxOTk4IGJ5IERhdmlkIExlZSBMYW1iZXJ0IDxsYW1iZXI0NUBlZ3IubXN1LmVkdT4KICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlIDxzcGV0cmVvbGxlQHlhaG9vLmZyPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1dBTE9OLCBTVUJMQU5HX05FVVRSQUwKewogUE9QVVAgIiZGaXRjaO4iIHsKICBNRU5VSVRFTSAiJk5vdmVhLi4uIiwgMHgxMDAKICBNRU5VSVRFTSAiJkRyb3buIiwgMHgxMDEKICBNRU5VSVRFTSAiJlNjaGFwZXIiLCAweDEwMgogIE1FTlVJVEVNICJTY2hhcGVyIOh0IHImbG9tZXIuLi4iLCAweDEwMwogIE1FTlVJVEVNICImUmV4aGUiLCAweDEwNAogIE1FTlVJVEVNICJBcnJhbmRqbWludCBkZWwgJlDlZGplLi4uIiwgMHgxMDUKICBNRU5VSVRFTSAiJkFwb250aWFlZGplIGRlbCBzY3JpcmVjZS4uLiIsIDB4MTA2CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIk1vdXNz7iAmRm/7IiwgMHgxMDgKIH0KUE9QVVAgIiZDYW5kau4iIHsKICBNRU5VSVRFTSAiJkRpc2bpXHRDdHJsK1oiLCAweDExMAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJD9CZwZXJcdEN0cmwrWCIsIDB4MTExCiAgTUVOVUlURU0gIiZDb3B57lx0Q3RybCtDIiwgMHgxMTIKICBNRU5VSVRFTSAiQyZsYXBlclx0Q3RybCtWIiwgMHgxMTMKICBNRU5VSVRFTSAiJlJhZmFjZXJcdERlbCIsIDB4MTE0CiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZUY2h3ZXppIHRvdGFmd2FpdCIsIDB4MTE2CiAgTUVOVUlURU0gIiZFdXJlL0RhdGVcdEY1IiwgMHgxMTcKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiQ/RwZXIgbGVzIHJvJnllcyIsIDB4MTE5CiB9ClBPUFVQICJDJndlcu4iIHsKICBNRU5VSVRFTSAiQ3dlcu4uLi4iLCAweDEyMAogIE1FTlVJVEVNICImU2j7dmFudFx0RjMiLCAweDEyMQogfQpQT1BVUCAiJkFpZGUiIHsKICBNRU5VSVRFTSAixSZkdmlucyIsIDB4MTMwCiAgTUVOVUlURU0gIkMmd2Vy7i4uLiIsIDB4MTMxCiAgTUVOVUlURU0gIiZBaWRlIHNvIGwnIEFpZGUiLCAweDEzMgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIFBPUFVQICImSW5mb3Jt5WNpb24uLi4iIHsKICAgTUVOVUlURU0gIiZMaWNpbnNlIiwgMHgxMzUKICAgTUVOVUlURU0gIiZOT0xFIFdBUkFOVEVZRSIsIDB4MTM2CiAgIE1FTlVJVEVNICLFICZkZmFpdCBkaSBXaW5lIiwgMHgxMzcKICB9CiB9Cn0KCi8qIERpYWxvZyBgUGFnZSBzZXR1cCcgKi8KCkRJQUxPR19QQUdFU0VUVVBfIERJQUxPRyAwLCAwLCAyMjUsIDk1CkxBTkdVQUdFIExBTkdfV0FMT04sIFNVQkxBTkdfTkVVVFJBTApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiSGVsdiIKQ0FQVElPTiAiQXJpbmRqbWludCBkZWwgUOVkamUiCnsKTFRFWFQgICAgIiZUaXRlOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MSwgICAgICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZQ7m5vdGU6IiwgIDB4MTQyLCAgIDEwLCAyNCwgNDAsIDE1CkVESVRURVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQzLCAgICAgICA2MCwgMjIsMTEwLCAxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUAoKR1JPVVBCT1ggIiZNYXJkamVzOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJkhpbnRjaGU6IiwgICAgICAgIDB4MTQ1LCAgIDIwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfTEVGVFZBTFVFLCovICAgMHgxNDcsICAgICAgIDUwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZDb3BldGU6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwqLyAgICAweDE0QSwgICAgICAgIDUwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZEcm9ldGU6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgLypTVFJJTkdfUEFHRVNFVFVQX1JJR0hUVkFMVUUsKi8gIDB4MTRELCAgICAgMTMwLCA1NSwgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZCYXM6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIkkgVmEiLCAgICAgICAgIDB4MTUxLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiUmlub25j7iIsICAgICAweDE1MiwgICAgICAgICAgICAgICAxODAsIDIxLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiJkFpZGUiLCAgICAgICAweDE1MywgICAgICAgICAgICAgICAgMTgwLCAzOSwgNDAsIDE1LCBXU19UQUJTVE9QCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfV0FMT04sIFNVQkxBTkdfTkVVVFJBTAp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsCSImbiIgICAgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfRk9PVEVSVkFMVUUsCSJQ5WRqZSAmcyIgICAvKiBGSVhNRSAqLwpTVFJJTkdfUEFHRVNFVFVQX0xFRlRWQUxVRSwJCSIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwJIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwJCSIyNSBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsCSIyNSBtbSIgICAgIC8qIEZJWE1FICovCgpTVFJJTkdfTk9URVBBRCwJCQkJCSJOb3RlcGFkIgpTVFJJTkdfRVJST1IsCQkJCQkiQVJPS0UiClNUUklOR19XQVJOSU5HLAkJCQkJIkFEVkVSVElYSE1JTlQiClNUUklOR19JTkZPLAkJCQkJIkluZm9ybeVjaW9uIgoKU1RSSU5HX1VOVElUTEVELAkJCQkiKHNpbiB0aXRlKSIKClNUUklOR19BTExfRklMRVMsCQkJCSJUb3MgbGVzIGZpdGNo7nMgKCouKikiClNUUklOR19URVhUX0ZJTEVTX1RYVCwJCQkiRml0Y2jucyB0ZWtzZSAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLAkJCQkiTGkgZml0Y2juICclcycgZXN0IHRyb3AgZ3JvcyBwb2wgbm90ZXBhZC5cbiBcCkVwbG95b3ogb24g9HRlIGFzcG91Z25ldSBkaSB0ZWtzZS4iClNUUklOR19OT1RFWFQsCQkJCQkiVm9zIG4nIGF2b3ogculuIHNpY3LudC4gXApcblRhcGV6IGVuZSBzYWN3ZSDodCByYXNheWV6IgpTVFJJTkdfRE9FU05PVEVYSVNULAkJCQkiRmlsZSAnJXMnXG5kb2VzIG5vdCBleGlzdFxuXG4gXApEbyB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgZmlsZSA/IgpTVFJJTkdfTk9UU0FWRUQsCQkJCSJMaSBmaXRjaO4gJyVzJ1xuYSBjYW5kau5cblxuIFwKRWwgdm9sb3ogc2NoYXBlciA/IgpTVFJJTkdfTk9URk9VTkQsCQkJCQkiJyVzJyBwb3V0IG7pbiBlc3NlIHRyb3bpLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksCQkJIkxpIG1lbXdlcmUgZXN0IHBsaW5uZS4gXG5cCkNsb3lveiBvbiBwcm9ncmFtZSBvdSBwdXMgcG8gbW9udGVyIGxpIG1lbXdlcmUgbGliZS4iCgp9Cg==