LyoKICogIE5vdGVwYWQgKEh1bmdhcmlhbiByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5Nyw5OCBNYXJjZWwgQmF1cgogKiAgUHJvb2ZyZWFkIDE5OTggYnkgRGF2aWQgTGVlIExhbWJlcnQKICogIENvcHlyaWdodCAyMDAyIFN5bHZhaW4gUGV0cmVvbGxlCiAqICBDb3B5cmlnaHQgMjAwMiBab2x5IE5hZ3kKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwoKTUFJTl9NRU5VIE1FTlUgTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJkbhamwiIHsKICBNRU5VSVRFTSAi2iZqIiwgICAgICAgICAgIENNRF9ORVcKICBNRU5VSVRFTSAiTWVnJm55aXThcy4uLiIsICAgICAgICAgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZNZW506XMiLCAgICAgICAgICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJNZW506XMgbeEmc2vpbnQuLi4iLCAgICAgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImT2xkYWxiZeFsbO104XMuLi4iLCAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJOeW9tJnRhdOFzLi4uIiwgICAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiTnlvbXRhdPMgJmJl4Wxs7XThcy4uLiIsIENNRF9QUklOVEVSX1NFVFVQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZLaWzpcOlzIiwgICAgICAgICAgICAgQ01EX0VYSVQKIH0KUE9QVVAgIlMmemVya2VzenTpcyIgewogIE1FTlVJVEVNICImVmlzc3phdm9u4XNcdEN0cmwrWiIsICAgICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJLaXbhJmfhc1x0Q3RybCtYIiwgICAgICBDTURfQ1VUCiAgTUVOVUlURU0gIiZN4XNvbOFzXHRDdHJsK0MiLCAgICAgQ01EX0NPUFkKICBNRU5VSVRFTSAiJkJlaWxsZXN6dOlzXHRDdHJsK1YiLCAgICBDTURfUEFTVEUKICBNRU5VSVRFTSAiVPZyJmzpc1x0RGVsIiwgICAgICBDTURfREVMRVRFCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZBeiD2c3N6ZXMga2lqZWz2bOlzZSIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIiZJZPUvZOF0dW1cdEY1IiwgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImSG9zc3r6IHNvcm9rIHT2cmRlbOlzZSIsICBDTURfV1JBUAogfQpQT1BVUCAiJktlcmVz6XMiIHsKICBNRU5VSVRFTSAiJktlcmVz6XMuLi4iLCAgICAgICAgICAgQ01EX1NFQVJDSAogIE1FTlVJVEVNICJL9nZlJnRrZXr1IGtlcmVz6XNlXHRGMyIsICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIiZT+mfzIiB7CiAgTUVOVUlURU0gIiZU6W1ha/Zy9msiLCAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZLZXJlc+lzLi4uIiwgICAgICAgIENNRF9IRUxQX1NFQVJDSAogIE1FTlVJVEVNICImSGFzem7hbGF0IiwgICAgIENNRF9IRUxQX09OX0hFTFAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBQT1BVUCAiSW5mJm9ybeFjafMuLi4iIHsKICAgTUVOVUlURU0gIiZMaWNlbmMiLCAgICAgICAgIENNRF9MSUNFTlNFCiAgIE1FTlVJVEVNICImU0VNTUkgR0FSQU5DSUEiLCAgICAgQ01EX05PX1dBUlJBTlRZCiAgIE1FTlVJVEVNICImV2luZSBu6XZqZWd5IiwgICAgICBDTURfQUJPVVRfV0lORQogIH0KIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpMQU5HVUFHRSBMQU5HX0hVTkdBUklBTiwgU1VCTEFOR19ERUZBVUxUClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJIZWx2IgpDQVBUSU9OICJPbGRhbGJl4Wxs7XThcyIKewpMVEVYVCAgICAiJkZlamzpYzoiLCAgMHgxNDAsICAgMTAsIDA3LCA0MCwgMTUKRURJVFRFWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEsICAgICAgIDYwLCAwNSwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImTOFibOljOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MywgICAgICAgNjAsIDIyLDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkdST1VQQk9YICImTWFyZ/NrOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJkJhbDoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsKi8gICAweDE0NywgICAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkZlbHP1OiIsICAgICAgICAgMHgxNDgsICAgIDIwLCA3MywgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfVE9QVkFMVUUsKi8gICAgMHgxNEEsICAgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSm9iYjoiLCAgICAgICAweDE0QiwgMTAwLCA1NSwgMzAsIDEwLCBXU19DSElMRApFRElUVEVYVCAvKlNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwqLyAgMHgxNEQsICAgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJkFsc/M6IiwgICAgICAweDE0RSwxMDAsIDczLCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIC8qU1RSSU5HX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwqLyAweDE1MCwgICAgMTMwLCA3MywgMzUsIDExLCBXU19DSElMRCB8IFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKCkRFRlBVU0hCVVRUT04gIk9LIiwgICAgICAgICAweDE1MSwgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIk3pZ3NlIiwgICAgIDB4MTUyLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImU/pn8yIsICAgICAgIDB4MTUzLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUgRElTQ0FSREFCTEUgTEFOR1VBR0UgTEFOR19IVU5HQVJJQU4sIFNVQkxBTkdfREVGQVVMVAp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZuIiAgICAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiT2xkYWxzeuFtOiAmcy4iICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9MRUZUVkFMVUUsICAgICAgICAgICAgICIyMCBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAgIjIwIG1tIiAgICAgLyogRklYTUUgKi8KU1RSSU5HX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICAgICAgICAgICIyNSBtbSIgICAgIC8qIEZJWE1FICovClNUUklOR19QQUdFU0VUVVBfQk9UVE9NVkFMVUUsICAgIjI1IG1tIiAgICAgLyogRklYTUUgKi8KClNUUklOR19OT1RFUEFELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJKZWd5emV0dPZtYiIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhJQkEiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGSUdZRUxNRVpURVTJUyIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybeFjafMiCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKG7pdnRlbGVuKSIKClNUUklOR19BTExfRklMRVMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaW5kZW4gZuFqbCAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJTevZ2ZWdm4Wpsb2sgKCoudHh0KSIKClNUUklOR19UT09MQVJHRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGbhamwgdPpsIG5hZ3kgbelyZXT7LlxuIFwKS+lyZW0gaGFzem7hbGpvbiBt4XNpayBzevZ2ZWdzemVya2VzenT1IHByb2dyYW1vdC4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBIHN69nZlZyBuZW0gdGFydGFsbWF6IGthcmFrdGVydCEgXApcbkvpcmVtIGfpcGVsamVuIGJlIG7paOFueSBrYXJha3RlcnQg6XMgcHLzYuFsamEg+mpyYSEiClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBIG1lZ2Fkb3R0ICclcydcbmbhamwgbmVtIGzpdGV6aWshXG5cbiBcCkvtduFuIGzpdHJlaG96bmkg+mogZuFqbHQ/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBm4WpsXG5t82Rvc3VsdFxuXG4gXApTemVyZXRu6SBtZW50ZW5pIGEgduFsdG964XNva2F0PyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBuZW0gdGFs4WxoYXTzISIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJOaW5jcyBlbGVnZW5k9SBzemFiYWQgbWVt83JpYSFcClxuWuFyam9uIGJlIG7paOFueSBhbGthbG1heuFzdCwgZXp6ZWwgbvZ2ZWx2ZSBhIHN6YWJhZCBtZW3zcmlhIG3pcmV06XRcCiEiCgp9Cg==