LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBQb3J0dWd1ZXNlIHRyYW5zbGF0aW9uIGJ5IEd1c3Rhdm8gSnVuaW9yIEFsdmVzIDxhbHZlc0Bjb3JyZWlvbmV0LmNvbS5icj4KICogQ29weXJpZ2h0IDIwMDIgU3lsdmFpbiBQZXRyZW9sbGUgPHNwZXRyZW9sbGVAeWFob28uZnI+CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfUE9SVFVHVUVTRSwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImQXJxdWl2IiB7CiAgTUVOVUlURU0gIkEmYnJpci4uLiIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZJbXByaW1pciIsIE1OSURfRklMRV9QUklOVAogIE1FTlVJVEVNICImQ29uZmlndXJhciBJbXByZXNzb3JhLi4uIiwgTU5JRF9GSUxFX1NFVFVQCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2FpciIsIE1OSURfRklMRV9FWElUCiB9CiBQT1BVUCAiJkVkaXRhciIgewogICBNRU5VSVRFTSAiJkNvcGlhci4uLiIsIE1OSURfRURJVF9DT1BZRExHCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkFub3Rhci4uLiIsIE1OSURfRURJVF9BTk5PVEFURQogfQogUE9QVVAgIiZNYXJjYWRvciIgewogICBNRU5VSVRFTSAiJkRlZmluaXIuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJkFqdWRhIiB7CiAgIE1FTlVJVEVNICJBanVkYSAmbmEgYWp1ZGEiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICJTZW1wcmUgJnZpc+12ZWwiLCBNTklEX0hFTFBfSEVMUFRPUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZJbmZvLi4uIiwgTU5JRF9IRUxQX0FCT1VUCiNpZmRlZiBXSU5FTElCCiAgIE1FTlVJVEVNICImU29icmUgV0lORSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1BPUlRVR1VFU0UsIFNVQkxBTkdfREVGQVVMVAp7ClNUSURfV0lORV9IRUxQLCAJIkFqdWRhIFdJTkUiClNUSURfV0hFUlJPUiwgCQkiRVJSTyIKU1RJRF9XQVJOSU5HLCAgCQkiQVZJU08iClNUSURfSU5GTywgIAkJIkluZm9ybWHn42kiClNUSURfTk9UX0lNUExFTUVOVEVELCAJIk7jbyBpbXBsZW1lbnRhZG8iClNUSURfSExQRklMRV9FUlJPUl9zLCAJIkZvaSBlbmNvbnRyYWRvIHVtIGVycm8gZW5xdWFudG8gbGlhIGAlcyciClNUSURfQ09OVEVOVFMsIAkJIiZDb250ZfpkbyIKU1RJRF9TRUFSQ0gsIAkJIiZQcm9jdXJhciIKU1RJRF9CQUNLLCAJCSImVm9sdGFyIgpTVElEX0hJU1RPUlksIAkJIiZIaXN083JpY28iClNUSURfVE9QSUNTLAkJIiZUb3BpY3MiClNUSURfQUxMX0ZJTEVTLCAJIlRvZG9zIG9zIGFycXVpdm8gKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiQXJxdWl2b3MgZGUgYWp1ZGEgKCouaGxwKSIKfQo=