LyoKICogQ29weXJpZ2h0IDIwMDEgRXJpYyBQb3VlY2gKICogQ29weXJpZ2h0IDIwMDYgSm9uYXRoYW4gRXJuc3QKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKTEFOR1VBR0UgTEFOR19GUkVOQ0gsIFNVQkxBTkdfTkVVVFJBTAoKU1RSSU5HVEFCTEUKQkVHSU4KSURTX0VESVQsCQkiySZkaXRpb24iCklEU19ERUZBVUxULAkJIlBhciAmZOlmYXV0IgpJRFNfUFJPUEVSVElFUywJCSImUHJvcHJp6XTpcyIKSURTX01BUkssCQkiJk1hcnF1ZXIiCklEU19DT1BZLAkJIiZDb3BpZXIiCklEU19QQVNURSwJCSJDJm9sbGVyIgpJRFNfU0VMRUNUQUxMLAkJIiZT6WxlY3Rpb25uZXIgdG91dCIKSURTX1NDUk9MTCwJCSImROlmaWxlciIKSURTX1NFQVJDSCwJCSJDJmhlcmNoZXIiCklEU19GTlRfRElTUExBWSwJIkNoYXF1ZSBjYXJhY3TocmUgYSAlbGQgcG9pbnRzIGVuIGxhcmdldXIgZXQgJWxkIHBvaW50cyBlbiBoYXV0ZXVyIgpJRFNfRk5UX1BSRVZJRVdfMSwJIkNlY2kgZXN0IHVuIHRlc3QiCklEU19GTlRfUFJFVklFV18yLAki6ejg9OsiCklEU19ETEdfVElUX0RFRkFVTFQsICAgICJDb25maWd1cmF0aW9uIHBhciBk6WZhdXQiCklEU19ETEdfVElUX0NVUlJFTlQsICAgICJDb25maWd1cmF0aW9uIGNvdXJhbnRlIgpJRFNfRExHX1RJVF9FUlJPUiwJIkVycmV1ciBkZSBjb25maWd1cmF0aW9uIgpJRFNfRExHX0VSUl9TQldJTlNJWkUsCSJMYSB0YWlsbGUgZHUgdGFtcG9uIOljcmFuIGRvaXQg6nRyZSBwbHVzIGdyYW5kZSBxdWUgY2VsbGUgZGUgbGEgZmVu6nRyZSIKCklEU19DTURfSU5WQUxJRF9FVkVOVF9JRCAgICJ3aW5lY29uc29sZSA6IEltcG9zc2libGUgZCdhbmFseXNlciBsJ+l26W5lbWVudFxuIgpJRFNfQ01EX0lOVkFMSURfQkFDS0VORCAgICAid2luZWNvbnNvbGUgOiBNb3RldXIgaW52YWxpZGVcbiIKSURTX0NNRF9JTlZBTElEX09QVElPTiAgICAgIndpbmVjb25zb2xlIDogT3B0aW9uIGRlIGxhIGxpZ25lIGRlIGNvbW1hbmRlIG5vbiByZWNvbm51ZVxuIgpJRFNfQ01EX0FCT1VUICAgICAgICAgICAgICAiROltYXJyZSB1biBwcm9ncmFtbWUgZGFucyB1bmUgY29uc29sZSBXaW5lXG4iCklEU19DTURfTEFVTkNIX0ZBSUxFRCAgICAgICJ3aW5lY29uc29sZSA6IMljaGVjIGxvcnMgZHUgZOltYXJyYWdlIGR1IHByb2dyYW1tZSAlcy5cbiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJMYSBjb21tYW5kZSBlc3QgaW52YWxpZGUuXG4iCgpJRFNfVVNBR0VfSEVBREVSICAgICAgICAgICAiXG5Vc2FnZSA6XG4gIHdpbmVjb25zb2xlIFtvcHRpb25zXSA8Y29tbWFuZGU+XG5cbk9wdGlvbnMgOlxuIgpJRFNfVVNBR0VfQkFDS0VORCAgICAgICAgICAiICAtLWJhY2tlbmQ9e3VzZXJ8Y3Vyc2VzfSAgRW4gY2hvaXNpc3NhbnQgqyB1c2VyILsgdW5lIG5vdXZlbGxlIGZlbup0cmUgc2VyYSBjcunpZSwgqyBjdXJzZXMgu1xuIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3NhaWVyYSBkZSBjb252ZXJ0aXIgbGUgdGVybWluYWwgY291cmFudCBlbiBjb25zb2xlIFdpbmVcbiIKSURTX1VTQUdFX0NPTU1BTkQgICAgICAgICAgIiAgPGNvbW1hbmQ+ICAgICAgICAgICAgICAgICBMZSBwcm9ncmFtbWUgV2luZSDgIGV46WN1dGVyIGRhbnMgbGEgY29uc29sZVxuIgpJRFNfVVNBR0VfRk9PVEVSICAgICAgICAgICAiXG5FeGVtcGxlIDpcbiAgd2luZWNvbnNvbGUgY21kXG5E6W1hcnJlIGwnaW50ZXJwcul0ZXVyIGRlIGNvbW1hbmRlcyBkZSBXaW5lIGRhbnMgdW5lIGNvbnNvbGUgV2luZVxuXG4iCgpFTkQKCklERF9PUFRJT04gRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgT3B0aW9ucyAiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKewoJR1JPVVBCT1ggIlRhaWxsZSBkdSBjdXJzZXVyIiwgLTEsIDEwLCAxMSwgNjAsIDQ0LCBCU19HUk9VUEJPWAoJQVVUT1JBRElPQlVUVE9OICImUGV0aXQiLCBJRENfT1BUX0NVUlNPUl9TTUFMTCwgMTQsIDIzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCUFVVE9SQURJT0JVVFRPTiAiJk1veWVuIiwgSURDX09QVF9DVVJTT1JfTUVESVVNLCAxNCwgMzMsIDQ0LCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICImR3JhbmQiLCBJRENfT1BUX0NVUlNPUl9MQVJHRSwgMTQsIDQzLCA0NCwgMTAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiQ29udHL0bGUiLCAtMSwgNzUsIDExLCAxMjUsIDQ0LCBCU19HUk9VUEJPWAoJTFRFWFQgIlBvcHVwIG1lbnUiLCAtMSwgNzksIDIzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAiJkNvbnRyb2wiLCBJRENfT1BUX0NPTkZfQ1RSTCwgMTI5LCAyMywgNjAsIDEwLCBXU19UQUJTVE9QCglBVVRPQ0hFQ0tCT1ggIlMmaGlmdCIsIElEQ19PUFRfQ09ORl9TSElGVCwgMTI5LCAzMywgNjAsIDEwLCBXU19UQUJTVE9QCglMVEVYVCAiyWRpdGlvbiByYXBpZGUiLCAtMSwgNzksIDQzLCA1MCwgMTAKCUFVVE9DSEVDS0JPWCAiJmFjdGl2ZXIiLCBJRENfT1BUX1FVSUNLX0VESVQsIDEyOSwgNDMsIDYwLCAxMCwgV1NfVEFCU1RPUAoKCUdST1VQQk9YICJIaXN0b3JpcXVlIGRlcyBjb21tYW5kZXMiLCAtMSwgMTAsIDU3LCAxOTAsIDM1LCBCU19HUk9VUEJPWAoJTFRFWFQgIiZUYWlsbGUgZGUgbGEgbeltb2lyZSB0YW1wb24gOiIsIC0xLCAxNCwgNjcsIDc4LCAxOAoJRURJVFRFWFQgSURDX09QVF9ISVNUX1NJWkUsIDkyLCA2OSwgMzEsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19PUFRfSElTVF9TSVpFX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCUFVVE9DSEVDS0JPWCAiJlN1cHByaW1lciBsZXMgZG91YmxvbnMiLCBJRENfT1BUX0hJU1RfTk9ET1VCTEUsIDEzMCwgNjcsIDYwLCAxOCwgV1NfVEFCU1RPUHxCU19NVUxUSUxJTkUKfQoKSUREX0ZPTlQgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAxNDAsIDEwNQpTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OIHwgV1NfU1lTTUVOVQpDQVBUSU9OICIgUG9saWNlICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglMVEVYVCAiJlBvbGljZSIsIC0xLCA1LCA1LCAyNCwgOAoJTElTVEJPWCBJRENfRk5UX0xJU1RfRk9OVCwgNSwgMTgsIDkwLCA0MiwgTEJTX1NPUlR8V1NfVlNDUk9MTAoJTFRFWFQgIiZDb3VsZXVyIiwgLTEsIDEwMCwgNSwgNTAsIDgKCUNPTlRST0wgIiIsIElEQ19GTlRfQ09MT1JfRkcsICJXaW5lQ29uQ29sb3JQcmV2aWV3IiwgMEwsIDEwMCwgMTgsIDQ4LCAxNgoJQ09OVFJPTCAiIiwgSURDX0ZOVF9DT0xPUl9CSywgIldpbmVDb25Db2xvclByZXZpZXciLCAwTCwgMTAwLCA0MCwgNDgsIDE2CglMVEVYVCAiJlRhaWxsZSIsIC0xLCAxNTgsIDUsIDQwLCA4CglMSVNUQk9YIElEQ19GTlRfTElTVF9TSVpFLCAxNTgsIDE4LCA0MCwgNjAsIFdTX1ZTQ1JPTEwKCUNPTlRST0wgIiIsIElEQ19GTlRfUFJFVklFVywgIldpbmVDb25Gb250UHJldmlldyIsIDBMLCA1LCA2MCwgMTA5LCA0MAoJTFRFWFQgIiIsIElEQ19GTlRfRk9OVF9JTkZPLCAxMjgsIDc2LCA4MCwgMTgKfQoKSUREX0NPTkZJRyBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDE0MCwgMTA1ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIiBDb25maWd1cmF0aW9uICIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiVGFpbGxlIG3pbW9pcmUgdGFtcG9uIOljcmFuIiwgLTEsIDEwLCAxMSwgMTAwLCA0MiwgQlNfR1JPVVBCT1gKCUxURVhUICImTGFyZ2V1ciA6IiwgLTEsIDE0LCAyNSwgNTQsIDkKCUVESVRURVhUIElEQ19DTkZfU0JfV0lEVEgsIDY4LCAyMywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIkhhJnV0ZXVyIDoiLCAtMSwgMTQsIDM5LCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9TQl9IRUlHSFQsIDY4LCAzNywgMzYsIDEyLCBXU19UQUJTVE9QfFdTX0JPUkRFUnxFU19OVU1CRVIKCUNPTlRST0wgIiIsIElEQ19DTkZfU0JfSEVJR0hUX1VELCAibXNjdGxzX3VwZG93bjMyIiwgVURTX1NFVEJVRERZSU5UfFVEU19BTElHTlJJR0hUfFVEU19BVVRPQlVERFl8VURTX0FSUk9XS0VZU3xVRFNfTk9USE9VU0FORFMsIDAsIDAsIDAsIDAKCglHUk9VUEJPWCAiVGFpbGxlIGRlIGxhIGZlbup0cmUiLCAtMSwgMTAsIDU1LCAxMDAsIDQyCglMVEVYVCAiTGEmcmdldXIgOiIsIC0xLCAxNCwgNjksIDU0LCA5CglFRElUVEVYVCBJRENfQ05GX1dJTl9XSURUSCwgNjgsIDY3LCAzNiwgMTIsIFdTX1RBQlNUT1B8V1NfQk9SREVSfEVTX05VTUJFUgoJQ09OVFJPTCAiIiwgSURDX0NORl9XSU5fV0lEVEhfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoJTFRFWFQgIkhhdSZ0ZXVyIDoiLCAtMSwgMTQsIDgzLCA1NCwgOQoJRURJVFRFWFQgSURDX0NORl9XSU5fSEVJR0hULCA2OCwgODEsIDM2LCAxMiwgV1NfVEFCU1RPUHxXU19CT1JERVJ8RVNfTlVNQkVSCglDT05UUk9MICIiLCBJRENfQ05GX1dJTl9IRUlHSFRfVUQsICJtc2N0bHNfdXBkb3duMzIiLCBVRFNfU0VUQlVERFlJTlR8VURTX0FMSUdOUklHSFR8VURTX0FVVE9CVUREWXxVRFNfQVJST1dLRVlTfFVEU19OT1RIT1VTQU5EUywgMCwgMCwgMCwgMAoKCUdST1VQQk9YICJGaW4gZHUgcHJvZ3JhbW1lIiwgLTEsIDExNSwgMTEsIDgwLCA0MiwgQlNfR1JPVVBCT1gKCUFVVE9DSEVDS0JPWCAiJkZlcm1lciBsYSBjb25zb2xlIiwgSURDX0NORl9DTE9TRV9FWElULCAxMTksIDI1LCA3NSwgMjAsIFdTX1RBQlNUT1AKCglHUk9VUEJPWCAiyWRpdGlvbiIsIC0xLCAxMTUsIDU1LCA4MCwgNDIKCUNPTUJPQk9YIElEQ19DTkZfRURJVElPTl9NT0RFLCAxMTksIDY5LCA3NSwgMjAsIENCU19EUk9QRE9XTkxJU1R8V1NfVlNDUk9MTHxXU19UQUJTVE9QCn0KCklERF9TQVZFX1NFVFRJTkdTIERJQUxPRyBMT0FET05DQUxMIE1PVkVBQkxFIERJU0NBUkRBQkxFIDIwLCAyMCwgMjAwLCA2MApTVFlMRSBEU19NT0RBTEZSQU1FIHwgV1NfUE9QVVAgfCBXU19DQVBUSU9OCkNBUFRJT04gIlBhcmFt6HRyZXMgZGUgbGEgY29uc29sZSIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglHUk9VUEJPWCAiIiwgLTEsIDEwLCAxMCwgMTgwLCAzMSwgQlNfR1JPVVBCT1gKCUFVVE9SQURJT0JVVFRPTiAiU2F1dmVyIGxlcyBwYXJhbeh0cmVzIHBvdXIgbGVzIHByb2NoYWluZXMgc2Vzc2lvbnMiLCBJRENfU0FWX1NBVkUsIDE0LCAxNSwgMTcwLCAxMCwgV1NfVEFCU1RPUAoJQVVUT1JBRElPQlVUVE9OICJBcHBsaXF1ZXIgdW5pcXVlbWVudCDgIGxhIHNlc3Npb24gY291cmFudGUiLCBJRENfU0FWX1NFU1NJT04sIDE0LCAyNywgMTcwLCAxMCwgV1NfVEFCU1RPUAoKCVBVU0hCVVRUT04gIk9LIiwgSURPSywgNTAsIDQ1LCAzNSwgMTIKCVBVU0hCVVRUT04gIkFubnVsZXIiLCBJRENBTkNFTCwgMTE1LCA0NSwgMzUsIDEyCn0K