LyoKICogIE5vdGVwYWQgKFR1cmtpc2ggcmVzb3VyY2VzKQogKgogKiAgQ29weXJpZ2h0IDIwMDYgRmF0aWggQf79Y/0gPGZhdGloLmFzaWNpQGdtYWlsLmNvbT4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgIm5vdGVwYWRfcmVzLmgiCgpMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAoKTUFJTl9NRU5VIE1FTlUKewogUE9QVVAgIiZEb3N5YSIgewogIE1FTlVJVEVNICImWWVuaVx0Q3RybCtOIiwgICAgQ01EX05FVwogIE1FTlVJVEVNICImQecuLi5cdEN0cmwrTyIsICAgICAgICAgQ01EX09QRU4KICBNRU5VSVRFTSAiJktheWRldFx0Q3RybCtTIiwgICAgIENNRF9TQVZFCiAgTUVOVUlURU0gIiZGYXJrbP0gS2F5ZGV0Li4uIiwgICBDTURfU0FWRV9BUwogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICJZYSZ6ZP1yLi4uXHRDdHJsK1AiLCAgICAgQ01EX1BSSU5UCiAgTUVOVUlURU0gIlNhJnlmYSBBeWFy/S4uLiIsICAgICBDTURfUEFHRV9TRVRVUAogIE1FTlVJVEVNICJZYXr9Y/0gJkF5YXJsYXL9Li4uIiwgQ01EX1BSSU5URVJfU0VUVVAKICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJsf9a/3+IiwgICAgICAgICAgICAgIENNRF9FWElUCiB9ClBPUFVQICJEJvx6ZW5sZSIgewogIE1FTlVJVEVNICImR2VyaSBBbFx0Q3RybCtaIiwgICAgIENNRF9VTkRPCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIiZLZXNcdEN0cmwrWCIsICAgICAgICAgQ01EX0NVVAogIE1FTlVJVEVNICJLJm9weWFsYVx0Q3RybCtDIiwgICAgIENNRF9DT1BZCiAgTUVOVUlURU0gIllhJnD9/nT9clx0Q3RybCtWIiwgICAgQ01EX1BBU1RFCiAgTUVOVUlURU0gIiZTaWxcdERlbCIsICAgICAgICAgICAgQ01EX0RFTEVURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImVPxt/G78IHNl51x0Q3RybCtBIiwgIENNRF9TRUxFQ1RfQUxMCiAgTUVOVUlURU0gIlMmYWF0L1RhcmloXHRGNSIsICAgICAgQ01EX1RJTUVfREFURQogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImVXp1biBzYXT9cmxhcv0ga/1ycCIsIENNRF9XUkFQCiAgTUVOVUlURU0gIiZZYXr9IFRpcGkuLi4iLCAgICAgICAgQ01EX0ZPTlQKIH0KUE9QVVAgIiZCdWwiIHsKICBNRU5VSVRFTSAiJkJ1bC4uLlx0Q3RybCtGIiwgICAgICAgICBDTURfU0VBUkNICiAgTUVOVUlURU0gIiZTb25yYWtpbmkgYnVsXHRGMyIsICAgQ01EX1NFQVJDSF9ORVhUCiAgTUVOVUlURU0gIiZSZXBsYWNlLi4uXHRDdHJsK0giLCAgQ01EX1JFUExBQ0UKIH0KUE9QVVAgIiZZYXJk/W0iIHsKICBNRU5VSVRFTSAiJt3naW5kZWtpbGVyIiwgICAgICAgICAgICAgIENNRF9IRUxQX0NPTlRFTlRTCiAgTUVOVUlURU0gIiZBcmEuLi4iLCAgICAgICAgICAgICAgQ01EX0hFTFBfU0VBUkNICiAgTUVOVUlURU0gIiZZYXJk/W0ga3VsbGFu/W39IiwgICAgQ01EX0hFTFBfT05fSEVMUAogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImQWJvdXQgTm90ZXBhZCIsIENNRF9IRUxQX0FCT1VUX05PVEVQQUQKIH0KfQoKLyogRGlhbG9nIGBQYWdlIHNldHVwJyAqLwoKRElBTE9HX1BBR0VTRVRVUCBESUFMT0cgMCwgMCwgMjI1LCA5NQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgpDQVBUSU9OICJTYXlmYSBBeWFybGFy/SIKewpMVEVYVCAgICAiJlNheWZhIEJh/v06IiwgIDB4MTQwLCAgIDEwLCAwNywgNDAsIDE1CkVESVRURVhUIElEQ19QQUdFU0VUVVBfSEVBREVSVkFMVUUsICAgNjAsIDA1LDExMCwgMTIsIFdTX0JPUkRFUiB8IFdTX1RBQlNUT1AKTFRFWFQgICAgIiZTYXlmYSBTb251OiIsICAweDE0MiwgICAxMCwgMjQsIDQwLCAxNQpFRElUVEVYVCBJRENfUEFHRVNFVFVQX0ZPT1RFUlZBTFVFLCAgIDYwLCAyMiwxMTAsIDEyLCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpHUk9VUEJPWCAiJktlbmFybP1rbGFyOiIsICAgICAgMHgxNDQsICAgICAxMCwgNDMsMTYwLCA0NQpMVEVYVCAgICAiJlNvbDoiLCAgICAgICAgMHgxNDUsICAgMjAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfTEVGVFZBTFVFLCAgICAgNTAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiJtxzdDoiLCAgICAgICAgIDB4MTQ4LCAgICAyMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9UT1BWQUxVRSwgICAgICA1MCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCkxURVhUICAgICJTJmHwOiIsICAgICAgIDB4MTRCLCAxMDAsIDU1LCAzMCwgMTAsIFdTX0NISUxECkVESVRURVhUIElEQ19QQUdFU0VUVVBfUklHSFRWQUxVRSwgICAxMzAsIDU1LCAzNSwgMTEsIFdTX0NISUxEIHwgV1NfQk9SREVSIHwgV1NfVEFCU1RPUApMVEVYVCAgICAiQSZsdDoiLCAgICAgIDB4MTRFLDEwMCwgNzMsIDMwLCAxMCwgV1NfQ0hJTEQKRURJVFRFWFQgSURDX1BBR0VTRVRVUF9CT1RUT01WQUxVRSwgIDEzMCwgNzMsIDM1LCAxMSwgV1NfQ0hJTEQgfCBXU19CT1JERVIgfCBXU19UQUJTVE9QCgpERUZQVVNIQlVUVE9OICJUYW1hbSIsICAgICAgICAgSURPSywgICAgICAgICAgICAgICAgICAgMTgwLCAgMywgNDAsIDE1LCBXU19UQUJTVE9QClBVU0hCVVRUT04gICAgIt1wdGFsIiwgICAgIElEQ0FOQ0VMLCAgICAgICAgICAgICAgIDE4MCwgMjEsIDQwLCAxNSwgV1NfVEFCU1RPUApQVVNIQlVUVE9OICAgICImWWFyZP1tIiwgICAgICAgSURIRUxQLCAgICAgICAgICAgICAgICAxODAsIDM5LCA0MCwgMTUsIFdTX1RBQlNUT1AKfQoKU1RSSU5HVEFCTEUKewpTVFJJTkdfUEFHRVNFVFVQX0hFQURFUlZBTFVFLCAgICImZiIKU1RSSU5HX1BBR0VTRVRVUF9GT09URVJWQUxVRSwgICAiJnAuIFNheWZhIgoKU1RSSU5HX05PVEVQQUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdCBEZWZ0ZXJpIgpTVFJJTkdfRVJST1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFUQSIKU1RSSU5HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVZQVJJIgpTVFJJTkdfSU5GTywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmlsZ2kiCgpTVFJJTkdfVU5USVRMRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWRz/XoiCgpTVFJJTkdfQUxMX0ZJTEVTLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVPxtIGRvc3lhbGFyICgqLiopIgpTVFJJTkdfVEVYVF9GSUxFU19UWFQsICAgICAgICAgICAgICAgICAgIk1ldGluIERvc3lhbGFy/SAoKi50eHQpIgoKU1RSSU5HX1RPT0xBUkdFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclcycgZG9zeWFz/SBub3QgZGVmdGVyaSBp52luIOdvayBi/Hn8ay5cbiBcCkz8dGZlbiBkZfBp/mlrIGJpciBk/HplbmxleWljaSBrdWxsYW79bi4iClNUUklOR19OT1RFWFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIaediaXIgbWV0aW4geWF6bWFk/W79ei4gXApcbkz8dGZlbiBiaXL+ZXkgeWF6/W4gdmUgdGVrcmFyIGRlbmV5aW4iClNUUklOR19ET0VTTk9URVhJU1QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGRvc3lhc/1cbm1ldmN1dCBkZfBpbFxuXG4gXApZZW5pIGJpciBkb3N5YSBvbHX+dHVybWFrIGlzdGVyIG1pc2luaXo/IgpTVFJJTkdfTk9UU0FWRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyVzJyBkb3N5YXP9XG5kZfBp/nRpcmlsZGlcblxuIFwKRGXwaf5pa2xpa2xlcmkga2F5ZGV0bWVrIGlzdGVyIG1pc2luaXo/IgpTVFJJTkdfTk9URk9VTkQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGJ1bHVuYW39eW9yLiIKU1RSSU5HX09VVF9PRl9NRU1PUlksICAgICAgICAgICAgICAgICAgICJCdSBp/mxlbWkgdGFtYW1sYW1hayBp52luIHlldGVybGkgYmVsbGVrXAphbGFu/SB5b2suXG5CaXIgdmV5YSBkYWhhIGZhemxhIHV5Z3VsYW1hef0ga2FwYXRhcmFrIGJv/iBiZWxsZWsgbWlrdGFy/W79XG5hcnR0/XJtYXn9IFwKZGVuZXlpbi4iCgp9Cg==