LyoKICogIE5vdGVwYWQgKERhbmlzaCByZXNvdXJjZXMpCiAqCiAqICBDb3B5cmlnaHQgMTk5OCBIZW5yaWsgT2xzZW4gPGhlbnJpa0BpYWVzdGUuZGs+CiAqICBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICogIENvcHlyaWdodCAyMDA4IEplbnMgQWxicmV0c2VuIDxqZW5zQGFsYnJldHNlbi5kaz4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm5vdGVwYWRfcmVzLmgiCgpMQU5HVUFHRSBMQU5HX0RBTklTSCwgU1VCTEFOR19ERUZBVUxUCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkZpbGVyIiB7CiAgTUVOVUlURU0gIiZOeVx0Q3RybCtOIiwgICAgICAgICAgICBDTURfTkVXCiAgTUVOVUlURU0gIsUmYm4uLi5cdEN0cmwrTyIsICAgICAgIENNRF9PUEVOCiAgTUVOVUlURU0gIiZHZW1cdEN0cmwrUyIsICAgICAgICAgICAgICBDTURfU0FWRQogIE1FTlVJVEVNICJHZW0gc28mbS4uLiIsICAgICAgIENNRF9TQVZFX0FTCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZVZHNrcml2Li4uXHRDdHJsK1AiLCAgICAgICAgICBDTURfUFJJTlQKICBNRU5VSVRFTSAiU2lkZSZvcHPmdG5pbmcuLi4iLCBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICImSW5kc3RpbCBwcmludGVyLi4uIiwgICAgICAgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJkFmc2x1dCIsICAgICAgICAgICBDTURfRVhJVAogfQpQT1BVUCAiJlJlZGlnZXIiIHsKICBNRU5VSVRFTSAiJkZvcnRyeWRcdEN0cmwrWiIsICBDTURfVU5ETwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImS2xpcFx0Q3RybCtYIiwgICAgIENNRF9DVVQKICBNRU5VSVRFTSAiSyZvcGllclx0Q3RybCtDIiwgICBDTURfQ09QWQogIE1FTlVJVEVNICImSW5kc+Z0XHRDdHJsK1YiLCAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZTbGV0XHREZWwiLCAgICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJNYXJrZXIgJmFsdCIsICAgICAgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIiZEYXRvL3RpZFx0RjUiLCAgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJBdXRvbWF0aXNrICZsaW5qZXNraWZ0IiwgICAgQ01EX1dSQVAKICBNRU5VSVRFTSAiJkZvbnQuLi4iLCAgICAgICAgICBDTURfRk9OVAogfQpQT1BVUCAiJlP4ZyIgewogIE1FTlVJVEVNICImU/hnLi4uIiwgICAgICAgICAgIENNRF9TRUFSQ0gKICBNRU5VSVRFTSAiJkZpbmQgbuZzdGVcdEYzIiwgICBDTURfU0VBUkNIX05FWFQKIH0KUE9QVVAgIiZIauZscCIgewogIE1FTlVJVEVNICImSW5kaG9sZCIsICAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZT+GcgZWZ0ZXIgaGrmbHAgb20uLi4iLCAgICBDTURfSEVMUF9TRUFSQ0gKICBNRU5VSVRFTSAiJkJydWcgYWYgSGrmbHAiLCAgICBDTURfSEVMUF9PTl9IRUxQCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZPbSBOb3RlcGFkIiwgQ01EX0hFTFBfQUJPVVRfTk9URVBBRAogfQp9CgovKiBEaWFsb2cgYFBhZ2Ugc2V0dXAnICovCgpESUFMT0dfUEFHRVNFVFVQIERJQUxPRyAwLCAwLCAyMjUsIDk1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpGT05UIDgsICJNUyBTaGVsbCBEbGciCkNBUFRJT04gIlNpZGVvcHPmdG5pbmciCnsKTFRFWFQgICAgIiZTaWRlaG92ZWQ6IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIlNpZGUmZm9kOiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiTWFyZ2VuZXI6IiwgICAgICAweDE0NCwgICAgIDEwLCA0MywxNjAsIDQ1CkxURVhUICAgICImVmVuc3RyZToiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJlRvcDoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImSPhqcmU6IiwgICAgICAgMHgxNEIsIDEwMCwgNTUsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9SSUdIVFZBTFVFLCAgIDEzMCwgNTUsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICImQnVuZDoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJPSyIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIkFubnVsbGVyIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImSGrmbHAiLCAgICAgICBJREhFTFAsICAgICAgICAgICAgICAgIDE4MCwgMzksIDQwLCAxNSwgV1NfVEFCU1RPUAp9CgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRQp7ClNUUklOR19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgIiZmIgpTVFJJTkdfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgICJQYWdlICZwIgoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdGVzYmxvayIKU1RSSU5HX0VSUk9SLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZFSkwiClNUUklOR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBRFZBUlNFTCIKU1RSSU5HX0lORk8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZm9ybWF0aW9uIgoKU1RSSU5HX1VOVElUTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihpa2tlLW5hdm5naXZldCkiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxsZSBmaWxlciAoKi4qKSIKU1RSSU5HX1RFWFRfRklMRVNfVFhULCAgICAgICAgICAgICAgICAgICJUZWtzdCBmaWxlciAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuICclcycgZXIgZm9yIHN0b3IgdGlsIE5vdGVzYmxvay4gXApcbkJydWcgZW4gYW5kZW4gZWRpdG9yIHRpbCBhdCByZWRpZ2VyZSBmaWxlbi4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEdSBoYXIgaWtrZSBza3JldmV0IG5vZ2V0IHRla3N0LiBcClxuU2tyaXYgbm9nZXQgdGVrc3QsIG9nIHBy+HYgc+UgaWdlbiIKU1RSSU5HX0RPRVNOT1RFWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGVuICclcydcbmZpbmRlcyBpa2tlXG5cbiBcCthuc2tlciBkdSBhdCBvcHJldHRlIGVuIG55IGZpbCA/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsZW4gJyVzJ1xuZXIgYmxldmV0IOZuZHJldFxuXG4gXApWaWwgZHUgZ2VtbWUg5m5kcmluZ2VybmUgPyIKU1RSSU5HX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiS2FuIGlra2UgZmluZGUgJyVzJy4iClNUUklOR19PVVRfT0ZfTUVNT1JZLCAgICAgICAgICAgICAgICAgICAiRGVyIGVyIGlra2Ugbm9rIGh1a29tbWVsc2UgdGlsIGF0IHVkZvhyZSBcCmRlbm5lIG9wZXJhdGlvbi5cbkFmc2x1dCBldCBlbGxlciBmbGVyZSBha3RpdmUgcHJvZ3JhbW1lciBmb3IgYXQgZnJpZ/hyZSBcCmh1a29tbWVsc2UsIG9nIHBy+HYgaWdlbi4iCgp9Cg==