LyoKICogU2hlbGwzMgogKiBGcmVuY2ggbGFuZ3VhZ2Ugc3VwcG9ydAogKgogKiBDb3B5cmlnaHQgMTk5OCBKdWVyZ2VuIFNjaG1pZWQKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKTUVOVV8wMDEgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJTUVOVUlURU0gIiZHcmFuZHMgaWP0bmVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCU1FTlVJVEVNICImUGV0aXRzIGlj9G5lcyIsCUZDSURNX1NIVklFV19TTUFMTElDT04KCU1FTlVJVEVNICImTGlzdGUiLAkJRkNJRE1fU0hWSUVXX0xJU1RWSUVXCglNRU5VSVRFTSAiJkTpdGFpbHMiLAkJRkNJRE1fU0hWSUVXX1JFUE9SVFZJRVcKRU5ECgovKgogc2hlbGx2aWV3IGJhY2tncm91bmQgbWVudQoqLwpNRU5VXzAwMiBNRU5VIERJU0NBUkRBQkxFCkJFR0lOCglQT1BVUCAiIgoJQkVHSU4KCSAgUE9QVVAgIiZBZmZpY2hhZ2UiCgkgIEJFR0lOCgkgICAgTUVOVUlURU0gIiZHcmFuZHMgaWP0bmVzIiwJRkNJRE1fU0hWSUVXX0JJR0lDT04KCSAgICBNRU5VSVRFTSAiJlBldGl0cyBpY/RuZXMiLAlGQ0lETV9TSFZJRVdfU01BTExJQ09OCgkgICAgTUVOVUlURU0gIiZMaXN0ZSIsCQlGQ0lETV9TSFZJRVdfTElTVFZJRVcKCSAgICBNRU5VSVRFTSAiJkTpdGFpbHMiLAlGQ0lETV9TSFZJRVdfUkVQT1JUVklFVwoJICBFTkQKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJUcmllciBsZXMgJmlj9G5lcyIKCSAgQkVHSU4KCSAgICBNRU5VSVRFTSAiUGFyICZub20iLAkweDMwCS8qIGNvbHVtbiAwICovCgkgICAgTUVOVUlURU0gIlBhciAmdHlwZSIsCTB4MzIJLyogY29sdW1uIDIgKi8KCSAgICBNRU5VSVRFTSAiUGFyIHQmYWlsbGUiLAkweDMxCS8qIC4uLiAqLwoJICAgIE1FTlVJVEVNICJQYXIgJmRhdGUiLAkweDMzCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgICAgTUVOVUlURU0gIlQmcmkgYXV0b21hdGlxdWUiLAlGQ0lETV9TSFZJRVdfQVVUT0FSUkFOR0UKCSAgRU5ECgkgIE1FTlVJVEVNICJBbGlnbmVyIGxlcyBpY/RuZXMiLAlGQ0lETV9TSFZJRVdfU05BUFRPR1JJRAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlJhZnJh7mNoaXIiLAkJRkNJRE1fU0hWSUVXX1JFRlJFU0gKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJDb2xsZXIiLAkJCUZDSURNX1NIVklFV19JTlNFUlQKCSAgTUVOVUlURU0gIkNvbGxlciBjb21tZSB1biBsaWVuIiwJRkNJRE1fU0hWSUVXX0lOU0VSVExJTksKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIFBPUFVQICJOb3V2ZWF1IgoJICBCRUdJTgoJICAgIE1FTlVJVEVNICJOb3V2ZWF1IGQmb3NzaWVyIiwJRkNJRE1fU0hWSUVXX05FV0ZPTERFUgoJICAgIE1FTlVJVEVNICJOb3V2ZWF1ICZsaWVuIiwJCUZDSURNX1NIVklFV19ORVdMSU5LCgkgICAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIEVORAoJICBNRU5VSVRFTSBTRVBBUkFUT1IKCSAgTUVOVUlURU0gIlByb3Byael06XMiLAkJRkNJRE1fU0hWSUVXX1BST1BFUlRJRVMKCUVORApFTkQKCi8qCiBzaGVsbHZpZXcgaXRlbSBtZW51CiovCk1FTlVfU0hWX0ZJTEUgTUVOVSBESVNDQVJEQUJMRQpCRUdJTgoJUE9QVVAgIiIKCUJFR0lOCgkgIE1FTlVJVEVNICJFJnhwbG9yZXIiLAkJRkNJRE1fU0hWSUVXX0VYUExPUkUKCSAgTUVOVUlURU0gIiZPdXZyaXIiLAkJRkNJRE1fU0hWSUVXX09QRU4KCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJDJm91cGVyIiwJCUZDSURNX1NIVklFV19DVVQKCSAgTUVOVUlURU0gIiZDb3BpZXIiLAkJRkNJRE1fU0hWSUVXX0NPUFkKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICJDcullciB1biAmbGllbiIsCUZDSURNX1NIVklFV19DUkVBVEVMSU5LCgkgIE1FTlVJVEVNICImU3VwcHJpbWVyIiwJRkNJRE1fU0hWSUVXX0RFTEVURQoJICBNRU5VSVRFTSAiJlJlbm9tbWVyIiwJCUZDSURNX1NIVklFV19SRU5BTUUKCSAgTUVOVUlURU0gU0VQQVJBVE9SCgkgIE1FTlVJVEVNICImUHJvcHJp6XTpcyIsCUZDSURNX1NIVklFV19QUk9QRVJUSUVTCglFTkQKRU5ECgpTSEJSU0ZPUkZPTERFUl9NU0dCT1ggRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMTUsIDQwLCAxODgsIDE5MgpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUgfCBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9OVCB8IERTXzNETE9PSwpDQVBUSU9OICJQYXJjb3VyaXIiCkZPTlQgOCwgIkhlbHYiCnsKIERFRlBVU0hCVVRUT04gIk9LIiwgMSwgODAsIDE3NiwgNTAsIDEyLCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJBbm51bGVyIiwgMiwgMTM0LCAxNzYsIDUwLCAxMiwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiBMVEVYVCAiIiwgSUREX1RJVExFLCA0LCA0LCAxODAsIDEyCiBMVEVYVCAiIiwgSUREX1NUQVRVUywgNCwgMjUsIDE4MCwgMTIKIENPTlRST0wgIiIsIElERF9UUkVFVklFVywgIlN5c1RyZWVWaWV3MzIiLAogCVRWU19IQVNCVVRUT05TIHwgVFZTX0hBU0xJTkVTIHwgVFZTX0xJTkVTQVRST09UIHwKCVdTX0JPUkRFUiB8IFdTX1RBQlNUT1AsCgk0LCA0MCwgMTgwLCAxMjAKfQoKU0hFTExfQUJPVVRfTVNHQk9YIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDE1LCA0MCwgMjEwLCAxNTIKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIsAgcHJvcG9zIGRlICVzIgpGT05UIDEwLCAiSGVsdiIKewogREVGUFVTSEJVVFRPTiAiT0siLCAxLCAxNTMsIDEzMCwgNTAsIDEyCiBMSVNUQk9YIDk5LCA4LCA2NSwgMTM3LCA4MiwgTEJTX05PVElGWSB8IFdTX1ZTQ1JPTEwgfCBXU19CT1JERVIKIElDT04gIiIsIDEwODgsIDE4OSwgMTAsIDE0LCAxNgogTFRFWFQgIiIsIDEwMCwgOCwgMTAsIDEzNywgMzMKIExURVhUICJXaW5lIGVzdCB1bmUgculhbGlzYXRpb24gZGUgOiIsIDk4LCA4LCA1NSwgMTM3LCAxMAp9CgpTSEVMTF9SVU5fRExHIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDAsIDAsIDIyNywgOTUKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiIKRk9OVCA4LCAiSGVsdiIKewogSUNPTiAiIiwgMTIyOTcsIDcsIDExLCAxOCwgMjAsIFdTX1ZJU0lCTEUKIExURVhUICJFbnRyZXogbGUgbm9tIGQndW4gcHJvZ3JhbW1lLCBkJ3VuIGRvc3NpZXIsIGQndW4gZG9jdW1lbnQgb3UgZCd1bmUgcmVzc291cmNlIEludGVybmV0LCBldCBXaW5lIGwnb3V2cmlyYSBwb3VyIHZvdXMuIiwgMTIyODksIDM2LCAxMSwgMTgyLCAxOAogTFRFWFQgIiZPdXZyaXIgOiIsIDEyMzA1LCA3LCAzOSwgMjQsIDEwCiBDT05UUk9MICIiLCAxMjI5OCwgIkNPTUJPQk9YIiwgV1NfVEFCU1RPUCB8IFdTX0dST1VQIHwgV1NfVlNDUk9MTCB8IFdTX1ZJU0lCTEUgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwgQ0JTX0FVVE9IU0NST0xMIHwgQ0JTX0RST1BET1dOLCAzNiwgMzcsIDE4MywgMTAwCiBERUZQVVNIQlVUVE9OICJPSyIsIElET0ssIDYyLCA2MywgNTAsIDE0LCBXU19UQUJTVE9QCiBQVVNIQlVUVE9OICJBbm51bGVyIiwgSURDQU5DRUwsIDExNiwgNjMsIDUwLCAxNCwgV1NfVEFCU1RPUAogUFVTSEJVVFRPTiAiJlBhcmNvdXJpci4uLiIsIDEyMjg4LCAxNzAsIDYzLCA1MCwgMTQsIFdTX1RBQlNUT1AKfQoKLyoKCXNwZWNpYWwgZm9sZGVycwoqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7CglJRFNfREVTS1RPUAkJIkJ1cmVhdSIKCUlEU19NWUNPTVBVVEVSCQkiUG9zdGUgZGUgdHJhdmFpbCIKfQoKLyoKCWNvbnRleHQgbWVudXMKKi8KU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUKewoJSURTX1ZJRVdfTEFSR0UJCSImR3JhbmRzIGlj9G5lcyIKCUlEU19WSUVXX1NNQUxMCQkiJlBldGl0cyBpY/RuZXMiCglJRFNfVklFV19MSVNUCQkiJkxpc3RlIgoJSURTX1ZJRVdfREVUQUlMUwkiJkTpdGFpbHMiCglJRFNfU0VMRUNUCQkiU+lsZWN0aW9ubmVyIgoJSURTX09QRU4JCSJPdXZyaXIiCn0KClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKCUlEU19DUkVBVEVGT0xERVJfREVOSUVEICJJbXBvc3NpYmxlIGRlIGNy6WVyIGxlIG5vdXZlYXUgZG9zc2llciA6IHBlcm1pc3Npb24gcmVmdXPpZS4iCglJRFNfQ1JFQVRFRk9MREVSX0NBUFRJT04gIkVycmV1ciBsb3JzIGRlIGxhIGNy6WF0aW9uIGR1IG5vdXZlYXUgZG9zc2llciIKCUlEU19ERUxFVEVJVEVNX0NBUFRJT04gIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkdSBmaWNoaWVyIgoJSURTX0RFTEVURUZPTERFUl9DQVBUSU9OICJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZHUgZG9zc2llciIKCUlEU19ERUxFVEVJVEVNX1RFWFQgIsp0ZXMtdm91cyBz+3IgZGUgdm91bG9pciBzdXBwcmltZXIgJyUxJz8iCglJRFNfREVMRVRFTVVMVElQTEVfVEVYVCAiynRlcy12b3VzIHP7dCBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXMgJTEgaXRlbXMgPyIKCUlEU19PVkVSV1JJVEVGSUxFX1RFWFQgIsljcmFzZXIgbGUgZmljaGllciAlMT8iCglJRFNfT1ZFUldSSVRFRklMRV9DQVBUSU9OICJDb25maXJtZXIgbCfpY3Jhc2VtZW50IGR1IGZpY2hpZXIiCn0KCi8qCWNvbHVtbnMgaW4gdGhlIHNoZWxsdmlldwkqLwpTVFJJTkdUQUJMRQpCRUdJTgoJSURTX1NIVl9DT0xVTU4xCQkiRmljaGllciIKCUlEU19TSFZfQ09MVU1OMgkJIlRhaWxsZSIKCUlEU19TSFZfQ09MVU1OMwkJIlR5cGUiCglJRFNfU0hWX0NPTFVNTjQJCSJNb2RpZmnpIgoJSURTX1NIVl9DT0xVTU41CQkiQXR0cmlidXRzIgoJSURTX1NIVl9DT0xVTU42CQkiQ2FwYWNpdOkiCglJRFNfU0hWX0NPTFVNTjcJCSJFc3BhY2UgZGlzcG9uaWJsZSIKCUlEU19TSFZfQ09MVU1OOAkJIk5vbSIKCUlEU19TSFZfQ09MVU1OOQkJIkNvbW1lbnRhaXJlcyIKRU5ECgovKiBtZXNzYWdlIGJveCBzdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFCnsKICAgICAgIElEU19SRVNUQVJUX1RJVExFICAgICAgICJSZWTpbWFycmVyIgogICAgICAgSURTX1JFU1RBUlRfUFJPTVBUICAgICAgIlZvdWxlei12b3VzIHNpbXVsZXIgbGUgcmVk6W1hcnJhZ2UgZGUgV2luZG93cz8iCiAgICAgICBJRFNfU0hVVERPV05fVElUTEUgICAgICAiQXJy6nRlciIKICAgICAgIElEU19TSFVURE9XTl9QUk9NUFQgICAgICJWb3VsZXotdm91cyBmZXJtZXIgbGEgc2Vzc2lvbiBXaW5lPyIKfQo=