LyoKICogIE5vdGVwYWQgKFRoYWkgUmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDMgSm9uIEdyaWZmaXRocwogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAibm90ZXBhZF9yZXMuaCIKCkxBTkdVQUdFIExBTkdfVEhBSSwgU1VCTEFOR19ERUZBVUxUCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAi4b/pwSIgewogIE1FTlVJVEVNICLKw+nSp+PLwehcdEN0cmwrTiIsICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIuC71LQuLi5cdEN0cmwrTyIsICAgQ01EX09QRU4KICBNRU5VSVRFTSAiutG5t9ehXHRDdHJsK1MiLCAgICAgQ01EX1NBVkUKICBNRU5VSVRFTSAiutG5t9eh4LvnuS4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIr7Uwb7sXHRDdHJsK1AiLCAgICAgICAgICAgIENNRF9QUklOVAogIE1FTlVJVEVNICK7w9G64bXop8u56dIuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICK7w9G64bXop+Ckw9fozae+1MG+7C4uLiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIs3NoSIsICAgICAgICAgICAgIENNRF9FWElUCiB9CiBQT1BVUCAi4aHp5KIiIHsKICBNRU5VSVRFTSAi4MPVwqGk17lcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICK10bRcdEN0cmwrWCIsICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICK10bTFzaFcdEN0cmwrQyIsICAgICBDTURfQ09QWQogIE1FTlVJVEVNICLH0qdcdEN0cmwrViIsICAgIENNRF9QQVNURQogIE1FTlVJVEVNICLFulx0RGVsIiwgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIuDF182ht9Hpp8vBtFx0Q3RybCtBIiwgICAgICAgQ01EX1NFTEVDVF9BTEwKICBNRU5VSVRFTSAix9G5t9XoL1x0RjUiLCAgICBDTURfVElNRV9EQVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIsvozbrDw7fRtMLSxyIsICBDTURfV1JBUAogIE1FTlVJVEVNICLD2bvhurq00cfN0aHJwy4uLiIsICAgICAgICAgIENNRF9GT05UCiB9CiBQT1BVUCAipNG5y9IiIHsKICBNRU5VSVRFTSAipOm5y9JcdEN0cmwrRiIsICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICKk6bnL0rXozeS7XHRGMyIsICBDTURfU0VBUkNIX05FWFQKIH0KIFBPUFVQICKq6MfC4MvF1c0iIHsKICBNRU5VSVRFTSAi4LnX6c3L0iIsICAgICAgICAgQ01EX0hFTFBfQ09OVEVOVFMKICBNRU5VSVRFTSAipOm5y9IuLi4iLCAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIuCh1ejCx6HRuqrox8Lgy8XVzSIsICAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBYm91dCBOb3RlcGFkIiwgQ01EX0hFTFBfQUJPVVRfTk9URVBBRAogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIrvD0brhteiny7np0iIKewpMVEVYVCAgICAiy9HHOiIsICAweDE0MCwgICAxMCwgMDcsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImRm9vdGVyOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAios26ocPQtNLJOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAio+nSwjoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiurk6IiwgICAgICAgICAweDE0OCwgICAgMjAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfVE9QVkFMVUUsICAgICAgNTAsIDczLCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiosfSOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAixejSpzoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICK1ocWnIiwgICAgICAgICBJRE9LLCAgICAgICAgICAgICAgICAgICAxODAsICAzLCA0MCwgMTUsIFdTX1RBQlNUT1AKUFVTSEJVVFRPTiAgICAiwqHgxdShIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICKq6MfC4MvF1c0iLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgIsu56dIgJnAiCgpTVFJJTkdfTk9URVBBRCwgICAgICAgIk5vdGVwYWQiClNUUklOR19FUlJPUiwgICAgICAgICAipMfSwbvUtCIKU1RSSU5HX1dBUk5JTkcsICAgICAgICKk7dK11825IgpTVFJJTkdfSU5GTywgICAgICAgICAgIsPSwsXQ4M3VwrQiCgpTVFJJTkdfVU5USVRMRUQsICAgICAgIuTB6KHt0su5tKrW6M0iCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAit9ih4b/pwSAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgIuG/6cG17dLD0iAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgIuG/6cEgJyVzJyDjy63o4KHUueS7IgpTVFJJTkdfTk9URVhULCAgICAipNiz5MHo47TgotXCuc3Q5MNcbqHD2LPSxc2n48vB6CIKU1RSSU5HX0RPRVNOT1RFWElTVCwgIuTB6L664b/pwSAnJXMnILfV6LXpzaeh0sPgu9S0XG6k2LO16c2nodLDysPp0qfjy8Ho5MHoID8iClNUUklOR19OT1RTQVZFRCwgICLB1aHSw+C7xdXowrnhu8WnodG64M2hytLDXG5cbiclcydcblxupNiztenNp6HSw7rRubfWocHRucvD183kweggPyIKU1RSSU5HX05PVEZPVU5ELCAgIuTB6L66ounNpMfSwSAnJXMnILfV6LXpzaeh0sOk6bnL0iIKU1RSSU5HX09VVF9PRl9NRU1PUlksICKkx9LBqO3Sy8G0XG6hw9iz0sXNp+PLwegiCgp9Cg==