LyoKICogQ29weXJpZ2h0IDE5OTggSnVlcmdlbiBTY2htaWVkCiAqIENvcHlyaWdodCAyMDAzIEl2YW4gTGVvIE11cnJheS1TbWl0aAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX0lUQUxJQU4sIFNVQkxBTkdfREVGQVVMVAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZJY29uZSBHcmFuZGkiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJTUVOVUlURU0gIiZJY29uZSBQaWNjb2xlIiwJRkNJRE1fU0hWSUVXX1NNQUxMSUNPTgoJTUVOVUlURU0gIiZMaXN0YSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCU1FTlVJVEVNICImRGV0dGFnbGkiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCIiCglCRUdJTgoJICBQT1BVUCAiJlZpc3VhbGl6emEiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZJY29uZSBHcmFuZGkiLAlGQ0lETV9TSFZJRVdfQklHSUNPTgoJICAgIE1FTlVJVEVNICImSWNvbmUgUGljY29sZSIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCSAgICBNRU5VSVRFTSAiJkxpc3RhIiwJCUZDSURNX1NIVklFV19MSVNUVklFVwoJICAgIE1FTlVJVEVNICImRGV0dGFnbGkiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJEaXNwb25pICZJY29uZSIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiUGVyICZOb21lIiwJMHgzMAkvKiBjb2x1bW4gMCAqLwoJICAgIE1FTlVJVEVNICJQZXIgJlRpcG8iLAkweDMyCS8qIGNvbHVtbiAyICovCgkgICAgTUVOVUlURU0gIlBlciAmRGltZW5zaW9uZSIsCTB4MzEJLyogLi4uICovCgkgICAgTUVOVUlURU0gIlBlciAmRGF0YSIsCTB4MzMKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgICBNRU5VSVRFTSAiJkRpc3BvbmkgQXV0b21hdGljYW1lbnRlIiwJRkNJRE1fU0hWSUVXX0FVVE9BUlJBTkdFCgkgIEVORAoJICBNRU5VSVRFTSAiQWxsaW5lYSBJY29uZSIsCUZDSURNX1NIVklFV19TTkFQVE9HUklECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiQWdnaW9ybmEiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJJbmNvbGxhIiwJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIkNyZWEgQ29sbGVnYW1lbnRvIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJOdW92byIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiTnVvdmEgJkNhcnRlbGxhIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOdW92byAmQ29sbGVnYW1lbnRvIiwJRkNJRE1fU0hWSUVXX05FV0xJTksKCSAgICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgRU5ECgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiUHJvcHJpZXTgIiwJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAiIgoJQkVHSU4KCSAgTUVOVUlURU0gIkUmc3Bsb3JhIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZBcHJpIiwJCUZDSURNX1NIVklFV19DT1BZCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJlRhZ2xpYSIsCQlGQ0lETV9TSFZJRVdfQ1VUCgkgIE1FTlVJVEVNICImQ29waWEiLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImQ3JlYSBDb2xsZWdhbWVudG8iLAlGQ0lETV9TSFZJRVdfQ1JFQVRFTElOSwoJICBNRU5VSVRFTSAiJkNhbmNlbGxhIiwJCUZDSURNX1NIVklFV19ERUxFVEUKCSAgTUVOVUlURU0gIiZSaW5vbWluYSIsCQlGQ0lETV9TSFZJRVdfUkVOQU1FCgkgIE1FTlVJVEVNIFNFUEFSQVRPUgoJICBNRU5VSVRFTSAiJlByb3ByaWV04CIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJTZm9nbGlhIENhcnRlbGxhIgpGT05UIDgsICJIZWx2Igp7CiBERUZQVVNIQlVUVE9OICJPSyIsIDEsIDgwLCAxNzYsIDUwLCAxMiwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiQW5udWxsYSIsIDIsIDEzNCwgMTc2LCA1MCwgMTIsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogTFRFWFQgIiIsIElERF9USVRMRSwgNCwgNCwgMTgwLCAxMgogTFRFWFQgIiIsIElERF9TVEFUVVMsIDQsIDI1LCAxODAsIDEyCiBDT05UUk9MICIiLCBJRERfVFJFRVZJRVcsICJTeXNUcmVlVmlldzMyIiwKIAlUVlNfSEFTQlVUVE9OUyB8IFRWU19IQVNMSU5FUyB8IFRWU19MSU5FU0FUUk9PVCB8CglXU19CT1JERVIgfCBXU19UQUJTVE9QLAoJNCwgNDAsIDE4MCwgMTIwCn0KClNIRUxMX0FCT1VUX01TR0JPWCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAxNSwgNDAsIDIxMCwgMTUyClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICJJbmZvcm1hemlvbmkgc3UgJXMiCkZPTlQgMTAsICJIZWx2Igp7CiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDE1MywgMTMwLCA1MCwgMTIsIFdTX1RBQlNUT1AKIExJU1RCT1ggOTksIDgsIDY1LCAxMzcsIDgyLCBMQlNfTk9USUZZIHwgV1NfVlNDUk9MTCB8IFdTX0JPUkRFUgogSUNPTiAiIiwgMTA4OCwgMTg5LCAxMCwgMTQsIDE2CiBMVEVYVCAiIiwgMTAwLCA4LCAxMCwgMTM3LCAzMwogTFRFWFQgIldpbmUg6CBkaXNwb25pYmlsZSBncmF6aWUgYToiLCA5OCwgOCwgNTUsIDEzNywgMTAKfQoKU0hFTExfUlVOX0RMRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAwLCAwLCAyMjcsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX1ZJU0lCTEUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIiCkZPTlQgOCwgIkhlbHYiCnsKIElDT04gIiIsIDEyMjk3LCA3LCAxMSwgMTgsIDIwLCBXU19WSVNJQkxFCiBMVEVYVCAiRGlnaXRhcmUgaWwgbm9tZSBkZWwgcHJvZ3JhbW1hLCBkZWxsYSBjYXJ0ZWxsYSwgZGVsIGRvY3VtZW50byBvIGRlbGxhIHJpc29yc2EgaW50ZXJuZXQsIGUgV2luZSBsYSBhcHJpcuAuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIiZBcHJpOiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfR1JPVVAgfCBXU19WU0NST0xMIHwgV1NfVklTSUJMRSB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfRFJPUERPV04sIDM2LCAzNywgMTgzLCAxMDAKIERFRlBVU0hCVVRUT04gIk9LIiwgSURPSywgNjIsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKIFBVU0hCVVRUT04gIkFubnVsbGEiLCBJRENBTkNFTCwgMTE2LCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICImRXNwbG9yYS4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJIkRlc2t0b3AiCglJRFNfTVlDT01QVVRFUgkJIlJpc29yc2UgZGVsIENvbXB1dGVyIgp9CgovKgoJY29udGV4dCBtZW51cwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfVklFV19MQVJHRQkJIiZJY29uZSBHcmFuZGkiCglJRFNfVklFV19TTUFMTAkJIkkmY29uZSBQaWNjb2xlIgoJSURTX1ZJRVdfTElTVAkJIiZMaXN0YSIKCUlEU19WSUVXX0RFVEFJTFMJIiZEZXR0YWdsaSIKCUlEU19TRUxFQ1QJCSJTZWxlemlvbmUiCglJRFNfT1BFTgkJIkFwcmkiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICJJbXBvc3NpYmlsZSBjcmVhcmUgbGEgY2FydGVsbGE6IEFjY2Vzc28gbmVnYXRvLiIKCUlEU19DUkVBVEVGT0xERVJfQ0FQVElPTiAiRXJyb3JlIGR1cmFudGUgbGEgY3JlYXppb25lIGRlbGxhIGNhcnRlbGxhIgoJSURTX0RFTEVURUlURU1fQ0FQVElPTiAiQ29uZmVybWFyZSBsYSBjYW5jYWxsYXppb25lIGRlbCBmaWxlIgoJSURTX0RFTEVURUZPTERFUl9DQVBUSU9OICJDb25mZXJtYXJlIGxhIGNhbmNlbGxhemlvbmUgZGVsbGEgY2FydGVsbGEiCglJRFNfREVMRVRFSVRFTV9URVhUICJTZWkgc2ljdXJvIGRpIHZvbGVyIGNhbmNlbGxhcmUgJyUxJz8iCglJRFNfREVMRVRFTVVMVElQTEVfVEVYVCAiU2VpIHNpY3VybyBkaSB2b2xlciBjYW5jZWxsYXJlIHF1ZXN0aSAlMSBlbGVtZW50aT8iCglJRFNfT1ZFUldSSVRFRklMRV9URVhUICJTb3ZyYXNjcml2ZXJlIGlsIEZpbGUgJTE/IgoJSURTX09WRVJXUklURUZJTEVfQ0FQVElPTiAiQ29uZmVybWFyZSBsYSBzb3ZyYXNjcml6aW9uZSBkZWwgRmlsZSIKfQoKLyoJY29sdW1ucyBpbiB0aGUgc2hlbGx2aWV3CSovClNUUklOR1RBQkxFCkJFR0lOCglJRFNfU0hWX0NPTFVNTjEJCSJGaWxlIgoJSURTX1NIVl9DT0xVTU4yCQkiRGltZW5zaW9uZSIKCUlEU19TSFZfQ09MVU1OMwkJIlRpcG8iCglJRFNfU0hWX0NPTFVNTjQJCSJNb2RpZmljYXRvIgoJSURTX1NIVl9DT0xVTU41CQkiQXR0cmlidXRpIgoJSURTX1NIVl9DT0xVTU42CQkiRGltZW5zaW9uZSIKCUlEU19TSFZfQ09MVU1ONwkJIkRpbWVuc2lvbmUgZGlzcG9uaWJpbGUiCkVORAo=