LyoKICogUmVnZWRpdCByZXNvdXJjZXMKICoKICogQ29weXJpZ2h0IDIwMDQgSGFqaW1lIFNlZ2F3YQogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0pBUEFORVNFLCBTVUJMQU5HX0RFRkFVTFQKCi8qCiAqIE1lbnUKICovCgpJRFJfUkVHRURJVF9NRU5VIE1FTlUgRElTQ0FSREFCTEUKQkVHSU4KICAgIFBPUFVQICKDjINXg1iDZ4OKKCZSKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIoOMg1eDWINng4qCzINDg5ODfIFbg2coJkkpLi4uIiwgICAgSURfUkVHSVNUUllfSU1QT1JUUkVHSVNUUllGSUxFCiAgICAgICAgTUVOVUlURU0gIoOMg1eDWINng4qCzINHg06DWIN8gVuDZygmRSkuLi4iLCAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAig2yDYoNng4+BW4NOg4yDV4NYg2eDioLJkNqRsSgmQykuLi4iLCBJRF9SRUdJU1RSWV9DT05ORUNUTkVUV09SS1JFR0lTVFJZLCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAig2yDYoNng4+BW4NOg4yDV4NYg2eDioKpgueQ2JJmKCZEKS4uLiIsIElEX1JFR0lTVFJZX0RJU0NPTk5FQ1RORVRXT1JLUkVHSVNUUlksIEdSQVlFRAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKI8438KCZQKVx0Q3RybCtQIiwgICAgICAgICAgICAgIElEX1JFR0lTVFJZX1BSSU5ULCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAij0mXuSgmeCkiLCAgICAgICAgICAgICAgICAgICAgICAgSURfUkVHSVNUUllfRVhJVAogICAgRU5ECiAgICBQT1BVUCAildKPVygmRSkiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKVz41YKCZNKSIsICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9NT0RJRlkKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBQT1BVUCAikFaLSygmTikiCiAgICAgICAgQkVHSU4KICAgICAgICAgICAgTUVOVUlURU0gIoNMgVsoJkspIiwgICAgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX05FV19LRVkKICAgICAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgICAgIE1FTlVJVEVNICKVto6al/EoJlMpIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAig2+DQ4Npg4ooJkIpIiwgICAgICAgICAgICAgICBJRF9FRElUX05FV19CSU5BUllWQUxVRQogICAgICAgICAgICBNRU5VSVRFTSAiRFdPUkSSbCgmRCkiLCAgICAgICAgICAgICAgICBJRF9FRElUX05FV19EV09SRFZBTFVFCiAgICAgICAgRU5ECiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIo3tj5woJkQpXHREZWwiLCAgICAgICAgICAgICAgICBJRF9FRElUX0RFTEVURQogICAgICAgIE1FTlVJVEVNICKWvJFPgsyVz41YKCZSKVx0RjIiLCAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAig0yBW5a8gvCDUoNzgVsoJkMpIiwgICAgICAgICAgICAgIElEX0VESVRfQ09QWUtFWU5BTUUKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAijJ+N9SgmRilcdEN0cmwrRiIsICAgICAgICAgICAgICAgSURfRURJVF9GSU5ELCBHUkFZRUQKICAgICAgICBNRU5VSVRFTSAijp+CzIyfjfWM85XiKCZ4KVx0RjMiLCAgICAgICAgICAgICAgSURfRURJVF9GSU5ETkVYVCwgR1JBWUVECiAgICBFTkQKICAgIFBPUFVQICKVXFyOpigmVikiCiAgICBCRUdJTgogICAgICAgIE1FTlVJVEVNICKDWINlgVuDXoNYg2+BWygmQikiLCAgICAgICAgICAgICAgICAgSURfVklFV19TVEFUVVNCQVIKICAgICAgICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgICAgICBNRU5VSVRFTSAilaqKhCgmbCkiLCAgICAgICAgICAgICAgICAgICAgICBJRF9WSUVXX1NQTElUCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIoOKg3SDjINig1aDhSgmUilcdEY1IiwgICAgICAgICAgICAgICAgSURfVklFV19SRUZSRVNICiAgICBFTkQKICAgIFBPUFVQICKCqItDgsmT/ILoKCZGKSIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIoKoi0OCyZP8guiCyZLHicEoJkEpIiwgICAgICAgICAgSURfRkFWT1JJVEVTX0FERFRPRkFWT1JJVEVTCiAgICAgICAgTUVOVUlURU0gIoKoi0OCyZP8guiCqYLnje2PnCgmUikiLCAgICAgICAgICAgSURfRkFWT1JJVEVTX1JFTU9WRUZBVk9SSVRFCiAgICBFTkQKICAgIFBPUFVQICKDd4OLg3YoJkgpIgogICAgQkVHSU4KICAgICAgICBNRU5VSVRFTSAig3eDi4N2KCZIKVx0RjEiLCAgICAgICAgICAgIElEX0hFTFBfSEVMUFRPUElDUwogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKDb4Fbg1eDh4OTj+6V8SgmQSkiLCAgICAgIElEX0hFTFBfQUJPVVQKICAgIEVORApFTkQKCklEUl9QT1BVUF9NRU5VUyBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCiAgUE9QVVAgIiIKICBCRUdJTgoJTUVOVUlURU0gIpXPjVgoJk0pIiwgICAgICAgICAgICAgICAgICAgICBJRF9FRElUX01PRElGWQoJTUVOVUlURU0gIoNvg0ODaYOKg2aBW4NegvCVz41YIiwgICAgICAgICAgSURfRURJVF9NT0RJRllfQklOCglNRU5VSVRFTSBTRVBBUkFUT1IKCU1FTlVJVEVNICKN7Y+cKCZEKVx0RGVsIiwgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKCU1FTlVJVEVNICKWvJFPgsyVz41YKCZSKSIsICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9SRU5BTUUKICBFTkQKICBQT1BVUCAiIgogIEJFR0lOCiAgICAgICAgUE9QVVAgIpBWi0soJk4pIgogICAgICAgIEJFR0lOCiAgICAgICAgICAgIE1FTlVJVEVNICKDTIFbKCZLKSIsICAgICAgICAgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfS0VZCiAgICAgICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgICAgICBNRU5VSVRFTSAilbaOmpfxKCZTKSIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfU1RSSU5HVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIoNvg0ODaYOKKCZCKSIsICAgICAgICAgICAgICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUKICAgICAgICAgICAgTUVOVUlURU0gIkRXT1JEkmwoJkQpIiwgICAgICAgICAgICAgICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRQogICAgICAgIEVORAogICAgICAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICAgICAgIE1FTlVJVEVNICKN7Y+cKCZEKVx0RGVsIiwgICAgICAgICAgICAgICAgSURfRURJVF9ERUxFVEUKICAgICAgICBNRU5VSVRFTSAilryRT4LMlc+NWCgmUilcdEYyIiwgICAgICAgICAgICAgICAgIElEX0VESVRfUkVOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIoNMgVuWvILwg1KDc4FbKCZDKSIsICAgICAgICAgICAgICBJRF9FRElUX0NPUFlLRVlOQU1FCiAgICAgICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgICAgICAgTUVOVUlURU0gIoyfjfUoJkYpXHRDdHJsK0YiLCAgICAgICAgICAgICAgIElEX0VESVRfRklORCwgR1JBWUVECiAgRU5ECkVORAoKCi8qCiAqIERpYWxvZwogKi8KCklERF9FRElUX1NUUklORyBESUFMT0cgRElTQ0FSREFCTEUgIDIyLCAxNywgMjEwLCA3NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAilbaOmpfxgsyV0o9XIgpGT05UIDksICJNUyBVSSBHb3RoaWMiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIpJsgsyWvJFPOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IEVTX0FVVE9IU0NST0xMIHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAig2aBW4NeOiIsSURDX1NUQVRJQyw1LDMwLDExOSw4CiAgICBFRElUVEVYVCAgICAgICAgSURDX1ZBTFVFX0RBVEEsNSw0MCwyMDAsMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AgfCBFU19BVVRPSFNDUk9MTAogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsSURPSywxNDAsNjAsMzAsMTEsV1NfR1JPVVAKICAgIFBVU0hCVVRUT04gICAig0yDg4OTg1qDiyIsSURDQU5DRUwsMTc1LDYwLDMwLDExLFdTX0dST1VQCkVORAoKSUREX0VESVRfRFdPUkQgRElBTE9HIERJU0NBUkRBQkxFICAyMiwgMTcsIDIxMCwgMTAwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU19OT0lETEVNU0cgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJEV09SRJJsgsyV0o9XIgpGT05UIDksICJNUyBVSSBHb3RoaWMiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIpJsgsyWvJFPOiIsSURDX1NUQVRJQyw1LDUsMTE5LDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfTkFNRSw1LDE1LDIwMCwxMiwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUCB8IEVTX0FVVE9IU0NST0xMIHwgV1NfRElTQUJMRUQKICAgIExURVhUICAgICAgICAgICAig2aBW4NeOiIsSURDX1NUQVRJQyw1LDMwLDkwLDgKICAgIEVESVRURVhUICAgICAgICBJRENfVkFMVUVfREFUQSw1LDQwLDkwLDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCiAgICBHUk9VUEJPWCAgICAgICAgIoN4gVuDWCIsIElEQ19EV09SRF9CQVNFLCAxMjAsIDMwLCA4NSwgMzcsIEJTX0dST1VQQk9YCiAgICBBVVRPUkFESU9CVVRUT04gIjE2kGmQlCIsIElEQ19EV09SRF9IRVgsIDEzMCwgNDAsIDYwLCAxMCwgV1NfVEFCU1RPUAogICAgQVVUT1JBRElPQlVUVE9OICIxMJBpkJQiLCBJRENfRFdPUkRfREVDLCAxMzAsIDUyLCA2MCwgMTAsIFdTX1RBQlNUT1AKICAgIERFRlBVU0hCVVRUT04gICAiT0siLElET0ssMTQwLDgwLDMwLDExLFdTX0dST1VQCiAgICBQVVNIQlVUVE9OICAgIoNMg4ODk4Nag4siLElEQ0FOQ0VMLDE3NSw4MCwzMCwxMSxXU19HUk9VUApFTkQKCi8qCiAqIFN0cmluZyBUYWJsZQogKi8KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfTElTVF9DT0xVTU5fTkFNRSAgICAilryRTyIKICAgIElEU19MSVNUX0NPTFVNTl9UWVBFICAgICKDXoNDg3YiCiAgICBJRFNfTElTVF9DT0xVTU5fREFUQSAgICAig2aBW4NeIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRFNfQVBQX1RJVExFICAgICAgICAgICAig4yDV4NYg2eDioNHg2aDQoNeIgpFTkQKClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCkJFR0lOCiAgICBJRF9SRUdJU1RSWV9NRU5VICAgICAgICAig4yDV4NYg2eDipFTkcyC8JGAjeyCt4Lpg1KDfYOTg2giCiAgICBJRF9FRElUX01FTlUgICAgICAgICAgICAikmyCxoNMgVuC8JXSj1eCt4Lpg1KDfYOTg2giCiAgICBJRF9WSUVXX01FTlUgICAgICAgICAgICAig4yDV4NYg2eDioNFg0KDk4Nog0WC8INKg1iDXoN9g0ODWYK3gumDUoN9g5ODaCIKICAgIElEX0ZBVk9SSVRFU19NRU5VICAgICAgICKC5oKtjmeCpINMgVuCyYNBg06DWoNYgreC6YNSg32Dk4NoIgogICAgSURfSEVMUF9NRU5VICAgICAgICAgICAgIoOMg1eDWINng4qDR4Nmg0KDXoLJgsKCooLEgsyDd4OLg3aC4o/ulfGC8JVcjqaCt4Lpg1KDfYOTg2giCiAgICBJRF9FRElUX05FV19NRU5VICAgICAgICAikFaCtYKig0yBW4LikmyC8I3skKyCt4Lpg1KDfYOTg2giCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX0VESVRfTU9ESUZZICAgICAgICAgICKSbILMg2aBW4NegvCVz41YIgogICAgSURfRURJVF9ORVdfS0VZICAgICAgICAgIpBWgrWCooNMgVuC8JLHicEiCiAgICBJRF9FRElUX05FV19TVFJJTkdWQUxVRSAikFaCtYKilbaOmpfxgvCSx4nBIgogICAgSURfRURJVF9ORVdfQklOQVJZVkFMVUUgIpBWgrWCooNvg0ODaYOKgvCSx4nBIgogICAgSURfRURJVF9ORVdfRFdPUkRWQUxVRSAgIpBWgrWCokRXT1JEkmyC8JLHicEiCiAgICBJRF9SRUdJU1RSWV9JTVBPUlRSRUdJU1RSWUZJTEUgIoNlg0yDWINng3SDQINDg4uC8IOMg1eDWINng4qCyYNDg5ODfIFbg2ciCiAgICBJRF9SRUdJU1RSWV9FWFBPUlRSRUdJU1RSWUZJTEUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICKDjINXg1iDZ4OKgsyI6pWUgtyCvYLNkVOVlILwg2WDTINYg2eDdINAg0ODi4LJg0eDToNYg3yBW4NnIgogICAgSURfUkVHSVNUUllfQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIoOKg4KBW4Nng1KDk4Nzg4WBW4NegsyDjINXg1iDZ4OKgsmQ2pGxIgogICAgSURfUkVHSVNUUllfRElTQ09OTkVDVE5FVFdPUktSRUdJU1RSWQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIoOKg4KBW4Nng1KDk4Nzg4WBW4NegsyDjINXg1iDZ4OKgqmC55DYkmYiCiAgICBJRF9SRUdJU1RSWV9QUklOVCAgICAgICAig4yDV4NYg2eDioLMiOqVlILcgr2CzZFTlZSC8IjzjfwiCi8qICAgIElEX0hFTFBfSEVMUFRPUElDUyAgICAgICKDjINXg1iDZ4OKg0eDZoNCg16CzIN3g4uDdoLwikqCrSIgKi8KICAgIElEX0hFTFBfQUJPVVQgICAgICAgICAgICKDdoONg0+DiYOAgsyP7pXxgUGDb4Fbg1eDh4OTgUGSmI3sjtKC8JVcjqYiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEX1JFR0lTVFJZX0VYSVQgICAgICAgICKDjINXg1iDZ4OKg0eDZoNCg16C8I9Jl7kiCiAgICBJRF9GQVZPUklURVNfQUREVE9GQVZPUklURVMgIoNMgVuC8IKoi0OCyZP8guiCyZLHicEiCiAgICBJRF9GQVZPUklURVNfUkVNT1ZFRkFWT1JJVEUgIoNMgVuC8IKoi0OCyZP8guiCqYLnje2PnCIKICAgIElEX1ZJRVdfU1RBVFVTQkFSICAgICAgICKDWINlgVuDXoNYg2+BW4LwlVyOpoFFiUKCtyIKICAgIElEX1ZJRVdfU1BMSVQgICAgICAgICAgICKDeYNDg5OK1ILMgrWCq4LogsyIypJ1gvCVz41YIgogICAgSURfVklFV19SRUZSRVNIICAgICAgICAgIoNFg0KDk4Nog0WC8IOKg3SDjINig1aDhSIKICAgIElEX0VESVRfREVMRVRFICAgICAgICAgICKRSZHwgrWCvY2AltqC8I3tj5wiCiAgICBJRF9FRElUX1JFTkFNRSAgICAgICAgICAikUmR8IK1gr2NgJbagsyWvJFPgvCVz41YIgogICAgSURfRURJVF9DT1BZS0VZTkFNRSAgICAgIpFJkfCCtYK9g0yBW4LMlryRT4Lwg06DioNig3aDe4Fbg2iCyYNSg3OBWyIKICAgIElEX0VESVRfRklORCAgICAgICAgICAgICKDTIFbgUGSbIFBg2aBW4NegqmC55W2jpqX8YLwjJ+N9SIKICAgIElEX0VESVRfRklORE5FWFQgICAgICAgICKIyJFPgsyMn431j/CMj4LJgqiCooLEjp+CzIzzleKC8IyfjfUiCkVORAoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKQkVHSU4KICAgIElEU19FUlJPUgkJICAgICKDR4OJgVsiCiAgICBJRFNfQkFEX0tFWQkJICAgICKDTIFbICclcyeCqo+Kk76CxYKrgtyCuYLxIgogICAgSURTX0JBRF9WQUxVRSAgICAgICAgICAgIpJsICclcyeCqo+Kk76CxYKrgtyCuYLxIgogICAgSURTX1VOU1VQUE9SVEVEX1RZUEUgICAgIoKxgsyDXoNDg3aCzINMgVuCzZXSj1eCxYKrgtyCuYLxICglbGQpIgogICAgSURTX1RPT19CSUdfVkFMVUUgICAgICAgIpJsgqqR5YKrgreCrILcgrcgKCVsZCkiCiAgICBJRFNfREVMRVRFX0JPWF9USVRMRSAgICAikmyCzI3tj5yKbZRGIgogICAgSURTX0RFTEVURV9CT1hfVEVYVCAgICAgIpZ7k5aCySAnJXMngvCN7Y+cgrWC3IK3gqk/IgogICAgSURTX05FV0tFWSAgICAgICAgICAgICAgIpBWgrWCooNMgVsgIyVkIgogICAgSURTX05FV1ZBTFVFICAgICAgICAgICAgIpBWgrWCopJsICMlZCIKRU5ECgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKgogKiBURVhUSU5DTFVERQogKi8KCjEgVEVYVElOQ0xVREUgRElTQ0FSREFCTEUKQkVHSU4KICAgICJyZXNvdXJjZS5oXDAiCkVORAoKCgovKgogKiBTdHJpbmcgVGFibGUKICovCgovKgogKlNUUklOR1RBQkxFIERJU0NBUkRBQkxFCiAqQkVHSU4KICogICAgSURfSEVMUF9IRUxQVE9QSUNTICAgICAgIoOMg1eDWINng4qDR4Nmg0KDXoLMg3eDi4N2gvCKSoKtIgogKiAgICBJRF9IRUxQX0FCT1VUICAgICAgICAgICAig3aDjYNPg4mDgILMj+6V8YFBg2+BW4NXg4eDk4FBkpiN7I7SgvCVXI6mIgogKkVORAogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K