{"id":"ssc-mainnet-hive","json":{"contractName":"contract","contractAction":"deploy","contractPayload":{"name":"crittermanager","params":"","code":"LyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqLw0KLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqLw0KLyogZ2xvYmFsIGFjdGlvbnMsIGFwaSAqLw0KDQovLyB0ZXN0IGNvbnRyYWN0IHRvIGRlbW9uc3RyYXRlIFNwbGludGVybGFuZHMgc3R5bGUNCi8vIHBhY2sgaXNzdWFuY2Ugb2YgY29sbGVjdGFibGUgY3JpdHRlcnMNCmNvbnN0IENPTlRSQUNUX05BTUUgPSAnY3JpdHRlcm1hbmFnZXInOw0KDQovLyBub3JtYWxseSB3ZSB3b3VsZCB1c2UgYXBpLm93bmVyIHRvIHJlZmVyIHRvIHRoZSBjb250cmFjdA0KLy8gb3duZXIgKHRoZSBhY2NvdW50IHRoYXQgZGVwbG95ZWQgdGhlIGNvbnRyYWN0KSwgYnV0IGZvciBub3cNCi8vIGNvbnRyYWN0IGRlcGxveW1lbnQgaXMgcmVzdHJpY3RlZCwgc28gd2UgbmVlZCBhbm90aGVyIHdheQ0KLy8gdG8gcmVjb2duaXplIHRoZSBDcml0dGVyIGFwcCBvd25lcg0KY29uc3QgQ1JJVFRFUl9DUkVBVE9SID0gJ2NyeXB0b21hbmNlcic7DQoNCi8vIHRoaXMgcGxhY2Vob2xkZXIgcmVwcmVzZW50cyBCRUUgdG9rZW5zIG9uIHRoZSBtYWlubmV0IGFuZCBTU0Mgb24gdGhlIHRlc3RuZXQNCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcNCmNvbnN0IFVUSUxJVFlfVE9LRU5fU1lNQk9MID0gIkJFRSI7DQoNCi8vIHdlIHdpbGwgaXNzdWUgY3JpdHRlcnMgaW4gInBhY2tzIiBvZiA1IGF0IGEgdGltZQ0KY29uc3QgQ1JJVFRFUlNfUEVSX1BBQ0sgPSA1Ow0KDQphY3Rpb25zLmNyZWF0ZVNTQyA9IGFzeW5jICgpID0+IHsNCiAgY29uc3QgdGFibGVFeGlzdHMgPSBhd2FpdCBhcGkuZGIudGFibGVFeGlzdHMoJ3BhcmFtcycpOw0KICBpZiAodGFibGVFeGlzdHMgPT09IGZhbHNlKSB7DQogICAgYXdhaXQgYXBpLmRiLmNyZWF0ZVRhYmxlKCdwYXJhbXMnKTsNCg0KICAgIC8vIFRoaXMgdGFibGUgd2lsbCBzdG9yZSBjb250cmFjdCBjb25maWd1cmF0aW9uIHNldHRpbmdzLg0KICAgIC8vIEZvciB0aGlzIHRlc3QsIHdlIGhhdmUgMyBDUklUVEVSIGVkaXRpb25zIHRoYXQgeW91IGNhbiBidXkNCiAgICAvLyB3aXRoIGRpZmZlcmVudCB0b2tlbnMuIFRoZSBjb250cmFjdCBvd25lciBjYW4gYWRkIG1vcmUNCiAgICAvLyBlZGl0aW9ucyB2aWEgdGhlIHVwZGF0ZVBhcmFtcyBhY3Rpb24uDQogICAgY29uc3QgcGFyYW1zID0ge307DQogICAgcGFyYW1zLmVkaXRpb25NYXBwaW5nID0gew0KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZw0KICAgICAgIkJFRSI6IDEsDQogICAgICBBTFBIQTogMiwNCiAgICAgIEJFVEE6IDMsDQogICAgfTsNCiAgICBhd2FpdCBhcGkuZGIuaW5zZXJ0KCdwYXJhbXMnLCBwYXJhbXMpOw0KICB9DQp9Ow0KDQovLyBoZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGhhdCB0b2tlbiB0cmFuc2ZlcnMgc3VjY2VlZGVkDQpjb25zdCBpc1Rva2VuVHJhbnNmZXJWZXJpZmllZCA9IChyZXN1bHQsIGZyb20sIHRvLCBzeW1ib2wsIHF1YW50aXR5LCBldmVudFN0cikgPT4gew0KICBpZiAocmVzdWx0LmVycm9ycyA9PT0gdW5kZWZpbmVkDQogICAgJiYgcmVzdWx0LmV2ZW50cyAmJiByZXN1bHQuZXZlbnRzLmZpbmQoZWwgPT4gZWwuY29udHJhY3QgPT09ICd0b2tlbnMnICYmIGVsLmV2ZW50ID09PSBldmVudFN0cg0KICAgICYmIGVsLmRhdGEuZnJvbSA9PT0gZnJvbSAmJiBlbC5kYXRhLnRvID09PSB0byAmJiBlbC5kYXRhLnF1YW50aXR5ID09PSBxdWFudGl0eSAmJiBlbC5kYXRhLnN5bWJvbCA9PT0gc3ltYm9sKSAhPT0gdW5kZWZpbmVkKSB7DQogICAgcmV0dXJuIHRydWU7DQogIH0NCiAgcmV0dXJuIGZhbHNlOw0KfTsNCg0KLy8gVGhlIGNvbnRyYWN0IG93bmVyIGNhbiB1c2UgdGhpcyBhY3Rpb24gdG8gdXBkYXRlIHNldHRpbmdzDQovLyB3aXRob3V0IGhhdmluZyB0byBjaGFuZ2UgJiByZWRlcGxveSB0aGUgY29udHJhY3Qgc291cmNlIGNvZGUuDQphY3Rpb25zLnVwZGF0ZVBhcmFtcyA9IGFzeW5jIChwYXlsb2FkKSA9PiB7DQogIGlmIChhcGkuc2VuZGVyICE9PSBDUklUVEVSX0NSRUFUT1IpIHJldHVybjsNCg0KICBjb25zdCB7DQogICAgZWRpdGlvbk1hcHBpbmcsDQogIH0gPSBwYXlsb2FkOw0KDQogIGNvbnN0IHBhcmFtcyA9IGF3YWl0IGFwaS5kYi5maW5kT25lKCdwYXJhbXMnLCB7fSk7DQoNCiAgaWYgKGVkaXRpb25NYXBwaW5nICYmIHR5cGVvZiBlZGl0aW9uTWFwcGluZyA9PT0gJ29iamVjdCcpIHsNCiAgICBwYXJhbXMuZWRpdGlvbk1hcHBpbmcgPSBlZGl0aW9uTWFwcGluZzsNCiAgfQ0KDQogIGF3YWl0IGFwaS5kYi51cGRhdGUoJ3BhcmFtcycsIHBhcmFtcyk7DQp9Ow0KDQovLyBUaGUgY29udHJhY3Qgb3duZXIgY2FuIGNhbGwgdGhpcyBhY3Rpb24gb25lIHRpbWUgb25seSwgdG8NCi8vIGNyZWF0ZSB0aGUgQ1JJVFRFUiBORlQgZGVmaW5pdGlvbi4gTm9ybWFsbHkgeW91IHdvdWxkIHByb2JhYmx5DQovLyBkbyB0aGlzIHRocm91Z2ggdGhlIFN0ZWVtIEVuZ2luZSB3ZWIgc2l0ZSwgYnV0IHdlIGluY2x1ZGUgaXQNCi8vIGhlcmUgdG8gaWxsdXN0cmF0ZSBwcm9ncmFtbWF0aWMgTkZUIGNyZWF0aW9uLCBhbmQgdG8gbWFrZSBpdA0KLy8gY2xlYXIgd2hhdCBkYXRhIHByb3BlcnRpZXMgd2UgbmVlZC4gTm90ZTogdGhlIGNvbnRyYWN0IG93bmVyDQovLyBtdXN0IGhhdmUgZW5vdWdoIEJFRS9TU0MgdG8gcGF5IHRoZSBjcmVhdGlvbiBmZWVzLiBGb3Igc2ltcGxpY2l0eQ0KLy8gd2UgZG9uJ3QgZG8gY2hlY2tzIG9uIHRoZSBvd25lcidzIGJhbGFuY2UgaGVyZSwgYnV0IGluIGENCi8vIHByb2R1Y3Rpb24gcmVhZHkgc21hcnQgY29udHJhY3Qgd2UgZGVmaW5pdGVseSBzaG91bGQgZG8gc28NCi8vIGJlZm9yZSB0YWtpbmcgYW55IGFjdGlvbiB0aGF0IHNwZW5kcyB0b2tlbnMgYXMgYSBzaWRlIGVmZmVjdC4NCmFjdGlvbnMuY3JlYXRlTmZ0ID0gYXN5bmMgKHBheWxvYWQpID0+IHsNCiAgaWYgKGFwaS5zZW5kZXIgIT09IENSSVRURVJfQ1JFQVRPUikgcmV0dXJuOw0KDQogIC8vIHRoaXMgYWN0aW9uIHJlcXVpcmVzIGFjdGl2ZSBrZXkgYXV0aG9yaXphdGlvbg0KICBjb25zdCB7DQogICAgaXNTaWduZWRXaXRoQWN0aXZlS2V5LA0KICB9ID0gcGF5bG9hZDsNCg0KICAvLyB2ZXJpZnkgQ1JJVFRFUiBkb2VzIG5vdCBleGlzdCB5ZXQNCiAgY29uc3QgbmZ0ID0gYXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCduZnQnLCAnbmZ0cycsIHsgc3ltYm9sOiAnQ1JJVFRFUicgfSk7DQogIGlmIChhcGkuYXNzZXJ0KG5mdCA9PT0gbnVsbCwgJ0NSSVRURVIgYWxyZWFkeSBleGlzdHMnKQ0KICAgICYmIGFwaS5hc3NlcnQoaXNTaWduZWRXaXRoQWN0aXZlS2V5ID09PSB0cnVlLCAneW91IG11c3QgdXNlIGEgY3VzdG9tX2pzb24gc2lnbmVkIHdpdGggeW91ciBhY3RpdmUga2V5JykpIHsNCiAgICAvLyBjcmVhdGUgQ1JJVFRFUg0KICAgIC8vIE5vdGUgMTogd2UgZG9uJ3Qgc3BlY2lmeSBtYXhTdXBwbHksIHdoaWNoIG1lYW5zIHRoZSBzdXBwbHkgb2YgQ1JJVFRFUg0KICAgIC8vIHdpbGwgYmUgdW5saW1pdGVkLiBCdXQgaW5kaXJlY3RseSB0aGUgc3VwcGx5IGlzIGxpbWl0ZWQgYnkgdGhlDQogICAgLy8gc3VwcGx5IG9mIHRoZSB0b2tlbnMgeW91IGNhbiB1c2UgdG8gYnV5IENSSVRURVJTLg0KICAgIC8vIE5vdGUgMjogd2Ugd2FudCB0aGlzIGNvbnRyYWN0IHRvIGJlIHRoZSBvbmx5IGF1dGhvcml6ZWQgdG9rZW4gaXNzdWVyDQogICAgYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCduZnQnLCAnY3JlYXRlJywgew0KICAgICAgbmFtZTogJ01pc2NoaWV2b3VzIENyeXB0byBDcml0dGVycycsDQogICAgICBzeW1ib2w6ICdDUklUVEVSJywNCiAgICAgIGF1dGhvcml6ZWRJc3N1aW5nQWNjb3VudHM6IFtdLA0KICAgICAgYXV0aG9yaXplZElzc3VpbmdDb250cmFjdHM6IFtDT05UUkFDVF9OQU1FXSwNCiAgICAgIGlzU2lnbmVkV2l0aEFjdGl2ZUtleSwNCiAgICB9KTsNCg0KICAgIC8vIE5vdyBhZGQgc29tZSBkYXRhIHByb3BlcnRpZXMgKG5vdGUgdGhhdCBvbmx5IHRoaXMgY29udHJhY3QgaXMNCiAgICAvLyBhdXRob3JpemVkIHRvIGVkaXQgZGF0YSBwcm9wZXJ0aWVzKS4gV2UgY291bGQgaGF2ZSBjaG9zZW4gYSBtb3JlDQogICAgLy8gZWNvbm9taWNhbCBkZXNpZ24gYnkgZm9ybWF0dGluZyB0aGVzZSBpbiBzb21lIGN1c3RvbSB3YXkgdG8gZml0DQogICAgLy8gd2l0aGluIGEgc2luZ2xlIHN0cmluZyBkYXRhIHByb3BlcnR5LCB3aGljaCB3b3VsZCBjdXQgZG93biBvbg0KICAgIC8vIHRva2VuIGlzc3VhbmNlIGZlZXMuIFRoZSBkcmF3YmFjayBpcyB0aGVuIHdlIGxvc2UgdGhlIGFiaWxpdHkgdG8NCiAgICAvLyBlYXNpbHkgcXVlcnkgdG9rZW5zIGJ5IHByb3BlcnRpZXMgKGZvciBleGFtcGxlLCBnZXQgYSBsaXN0IG9mIGFsbA0KICAgIC8vIHJhcmUgY3JpdHRlcnMgb3IgYWxsIGNyaXR0ZXJzIGJlbG9uZ2luZyB0byBhIGNlcnRhaW4gZWRpdGlvbiwgZXRjKS4NCg0KICAgIC8vIEVkaXRpb24gb25seSBnZXRzIHNldCBvbmNlIGF0IGlzc3VhbmNlIGFuZCBuZXZlciBjaGFuZ2VzLCBzbyB3ZQ0KICAgIC8vIGNhbiBtYWtlIGl0IHJlYWQgb25seS4NCiAgICBhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoJ25mdCcsICdhZGRQcm9wZXJ0eScsIHsNCiAgICAgIHN5bWJvbDogJ0NSSVRURVInLA0KICAgICAgbmFtZTogJ2VkaXRpb24nLA0KICAgICAgdHlwZTogJ251bWJlcicsDQogICAgICBpc1JlYWRPbmx5OiB0cnVlLA0KICAgICAgYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czogW10sDQogICAgICBhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0czogW0NPTlRSQUNUX05BTUVdLA0KICAgICAgaXNTaWduZWRXaXRoQWN0aXZlS2V5LA0KICAgIH0pOw0KDQogICAgLy8gVHlwZSAod2hpY2ggYWxzbyBuZXZlciBjaGFuZ2VzIG9uY2Ugc2V0KSByZXByZXNlbnRzIHRoZSBraW5kIG9mDQogICAgLy8gY3JpdHRlciB3aXRoaW4gYW4gZWRpdGlvbi4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgdmFsdWUgaXMNCiAgICAvLyBoYW5kbGVkIGJ5IHdoYXRldmVyIGFwcCB1c2VzIHRoZXNlIHRva2VuczsgZm9yIGV4YW1wbGUgbWF5YmUNCiAgICAvLyAwID0gZHJhZ29uLCAxID0gdHJvbGwsIDIgPSBnb2JsaW4sIGV0Yw0KICAgIGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgnbmZ0JywgJ2FkZFByb3BlcnR5Jywgew0KICAgICAgc3ltYm9sOiAnQ1JJVFRFUicsDQogICAgICBuYW1lOiAndHlwZScsDQogICAgICB0eXBlOiAnbnVtYmVyJywNCiAgICAgIGlzUmVhZE9ubHk6IHRydWUsDQogICAgICBhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOiBbXSwNCiAgICAgIGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOiBbQ09OVFJBQ1RfTkFNRV0sDQogICAgICBpc1NpZ25lZFdpdGhBY3RpdmVLZXksDQogICAgfSk7DQoNCiAgICAvLyBIb3cgcmFyZSBpcyB0aGlzIGNyaXR0ZXI/IDAgPSBjb21tb24sIDEgPSB1bmNvbW1vbiwNCiAgICAvLyAyID0gcmFyZSwgMyA9IGxlZ2VuZGFyeQ0KICAgIGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgnbmZ0JywgJ2FkZFByb3BlcnR5Jywgew0KICAgICAgc3ltYm9sOiAnQ1JJVFRFUicsDQogICAgICBuYW1lOiAncmFyaXR5JywNCiAgICAgIHR5cGU6ICdudW1iZXInLA0KICAgICAgaXNSZWFkT25seTogdHJ1ZSwNCiAgICAgIGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM6IFtdLA0KICAgICAgYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6IFtDT05UUkFDVF9OQU1FXSwNCiAgICAgIGlzU2lnbmVkV2l0aEFjdGl2ZUtleSwNCiAgICB9KTsNCg0KICAgIC8vIERvIHdlIGhhdmUgYSBzdXBlciByYXJlIGdvbGQgZm9pbD8NCiAgICBhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoJ25mdCcsICdhZGRQcm9wZXJ0eScsIHsNCiAgICAgIHN5bWJvbDogJ0NSSVRURVInLA0KICAgICAgbmFtZTogJ2lzR29sZEZvaWwnLA0KICAgICAgdHlwZTogJ2Jvb2xlYW4nLA0KICAgICAgaXNSZWFkT25seTogdHJ1ZSwNCiAgICAgIGF1dGhvcml6ZWRFZGl0aW5nQWNjb3VudHM6IFtdLA0KICAgICAgYXV0aG9yaXplZEVkaXRpbmdDb250cmFjdHM6IFtDT05UUkFDVF9OQU1FXSwNCiAgICAgIGlzU2lnbmVkV2l0aEFjdGl2ZUtleSwNCiAgICB9KTsNCg0KICAgIC8vIFdlIHdpbGwgYWxsb3cgcGVvcGxlIHRvIGN1c3RvbWl6ZSB0aGVpciBjcml0dGVycw0KICAgIC8vIGJ5IG5hbWluZyB0aGVtIChub3RlIHRoaXMgaXMgTk9UIHJlYWQgb25seSEpDQogICAgYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCduZnQnLCAnYWRkUHJvcGVydHknLCB7DQogICAgICBzeW1ib2w6ICdDUklUVEVSJywNCiAgICAgIG5hbWU6ICduYW1lJywNCiAgICAgIHR5cGU6ICdzdHJpbmcnLA0KICAgICAgYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czogW10sDQogICAgICBhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0czogW0NPTlRSQUNUX05BTUVdLA0KICAgICAgaXNTaWduZWRXaXRoQWN0aXZlS2V5LA0KICAgIH0pOw0KDQogICAgLy8gYWRkIHNvbWUgb3RoZXIgbWlzY2VsbGFuZW91cyBwcm9wZXJ0aWVzIGZvciB0aGUgc2FrZSBvZg0KICAgIC8vIGNvbXBsZXRlbmVzcw0KICAgIGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgnbmZ0JywgJ2FkZFByb3BlcnR5Jywgew0KICAgICAgc3ltYm9sOiAnQ1JJVFRFUicsDQogICAgICBuYW1lOiAneHAnLCAvLyBleHBlcmllbmNlIHBvaW50cw0KICAgICAgdHlwZTogJ251bWJlcicsDQogICAgICBhdXRob3JpemVkRWRpdGluZ0FjY291bnRzOiBbXSwNCiAgICAgIGF1dGhvcml6ZWRFZGl0aW5nQ29udHJhY3RzOiBbQ09OVFJBQ1RfTkFNRV0sDQogICAgICBpc1NpZ25lZFdpdGhBY3RpdmVLZXksDQogICAgfSk7DQogICAgYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCduZnQnLCAnYWRkUHJvcGVydHknLCB7DQogICAgICBzeW1ib2w6ICdDUklUVEVSJywNCiAgICAgIG5hbWU6ICdocCcsIC8vIGhlYWx0aCBwb2ludHMNCiAgICAgIHR5cGU6ICdudW1iZXInLA0KICAgICAgYXV0aG9yaXplZEVkaXRpbmdBY2NvdW50czogW10sDQogICAgICBhdXRob3JpemVkRWRpdGluZ0NvbnRyYWN0czogW0NPTlRSQUNUX05BTUVdLA0KICAgICAgaXNTaWduZWRXaXRoQWN0aXZlS2V5LA0KICAgIH0pOw0KICB9DQp9Ow0KDQovLyBUaGlzIGFjdGlvbiBjYW4gYmUgY2FsbGVkIGJ5IGEgdG9rZW4gaG9sZGVyIHRvIGNoYW5nZQ0KLy8gdGhlaXIgY3JpdHRlcidzIG5hbWUuDQphY3Rpb25zLnVwZGF0ZU5hbWUgPSBhc3luYyAocGF5bG9hZCkgPT4gew0KICBjb25zdCB7IGlkLCBuYW1lIH0gPSBwYXlsb2FkOw0KDQogIGlmIChhcGkuYXNzZXJ0KGlkICYmIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycNCiAgICAmJiAhYXBpLkJpZ051bWJlcihpZCkuaXNOYU4oKSAmJiBhcGkuQmlnTnVtYmVyKGlkKS5ndCgwKQ0KICAgICYmIG5hbWUgJiYgdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnLCAnaW52YWxpZCBwYXJhbXMnKQ0KICAgICYmIGFwaS5hc3NlcnQoYXBpLnZhbGlkYXRvci5pc0FscGhhbnVtZXJpYyhhcGkudmFsaWRhdG9yLmJsYWNrbGlzdChuYW1lLCAnICcpKSAmJiBuYW1lLmxlbmd0aCA+IDAgJiYgbmFtZS5sZW5ndGggPD0gMjUsICdpbnZhbGlkIG5hbWU6IGxldHRlcnMsIG51bWJlcnMsIHdoaXRlc3BhY2VzIG9ubHksIG1heCBsZW5ndGggb2YgMjUnKSkgew0KICAgIC8vIGZldGNoIHRoZSB0b2tlbiB3ZSB3YW50IHRvIGVkaXQNCiAgICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IGFwaS5kYi5maW5kT25lSW5UYWJsZSgnbmZ0JywgJ0NSSVRURVJpbnN0YW5jZXMnLCB7IF9pZDogYXBpLkJpZ051bWJlcihpZCkudG9OdW1iZXIoKSB9KTsNCg0KICAgIGlmIChpbnN0YW5jZSkgew0KICAgICAgLy8gbWFrZSBzdXJlIHRoaXMgdG9rZW4gaXMgb3duZWQgYnkgdGhlIGNhbGxlcg0KICAgICAgaWYgKGFwaS5hc3NlcnQoaW5zdGFuY2UuYWNjb3VudCA9PT0gYXBpLnNlbmRlciAmJiBpbnN0YW5jZS5vd25lZEJ5ID09PSAndScsICdtdXN0IGJlIHRoZSB0b2tlbiBob2xkZXInKSkgew0KICAgICAgICBhd2FpdCBhcGkuZXhlY3V0ZVNtYXJ0Q29udHJhY3QoJ25mdCcsICdzZXRQcm9wZXJ0aWVzJywgew0KICAgICAgICAgIHN5bWJvbDogJ0NSSVRURVInLA0KICAgICAgICAgIGZyb21UeXBlOiAnY29udHJhY3QnLA0KICAgICAgICAgIG5mdHM6IFt7DQogICAgICAgICAgICBpZCwgcHJvcGVydGllczogeyBuYW1lIH0sDQogICAgICAgICAgfV0sDQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfTsNCg0KLy8gZ2VuZXJhdGUgaXNzdWFuY2UgZGF0YSBmb3IgYSByYW5kb20gY3JpdHRlciBvZiB0aGUgZ2l2ZW4gZWRpdGlvbg0KY29uc3QgZ2VuZXJhdGVSYW5kb21Dcml0dGVyID0gKGVkaXRpb24sIHRvKSA9PiB7DQogIC8vIGVhY2ggcmFyaXR5IGhhcyAxMCB0eXBlcyBvZiBjcml0dGVycw0KICBjb25zdCB0eXBlID0gTWF0aC5mbG9vcihhcGkucmFuZG9tKCkgKiAxMCkgKyAxOw0KDQogIC8vIGRldGVybWluZSByYXJpdHkNCiAgbGV0IHJhcml0eSA9IDA7DQogIGxldCByYXJpdHlSb2xsID0gTWF0aC5mbG9vcihhcGkucmFuZG9tKCkgKiAxMDAwKSArIDE7DQogIGlmIChyYXJpdHlSb2xsID4gOTk1KSB7IC8vIDAuNSUgY2hhbmNlIG9mIGxlZ2VuZGFyeQ0KICAgIHJhcml0eSA9IDM7DQogIH0gZWxzZSBpZiAocmFyaXR5Um9sbCA+IDkwMCkgeyAvLyAxMCUgY2hhbmNlIG9mIHJhcmUgb3IgaGlnaGVyDQogICAgcmFyaXR5ID0gMjsNCiAgfSBlbHNlIGlmIChyYXJpdHlSb2xsID4gNzAwKSB7IC8vIDMwJSBvZiB1bmNvbW1vbiBvciBoaWdoZXINCiAgICByYXJpdHkgPSAxOw0KICB9DQoNCiAgLy8gZGV0ZXJtaW5lIGdvbGQgZm9pbA0KICBsZXQgaXNHb2xkRm9pbCA9IGZhbHNlOw0KICByYXJpdHlSb2xsID0gTWF0aC5mbG9vcihhcGkucmFuZG9tKCkgKiAxMDApICsgMTsNCiAgaWYgKHJhcml0eVJvbGwgPiA5NSkgeyAvLyA1JSBjaGFuY2Ugb2YgYmVpbmcgZ29sZA0KICAgIGlzR29sZEZvaWwgPSB0cnVlOw0KICB9DQoNCiAgY29uc3QgcHJvcGVydGllcyA9IHsNCiAgICBlZGl0aW9uLA0KICAgIHR5cGUsDQogICAgcmFyaXR5LA0KICAgIGlzR29sZEZvaWwsDQogICAgbmFtZTogJycsDQogICAgeHA6IDAsDQogICAgaHA6IDEwMCwNCiAgfTsNCg0KICBjb25zdCBpbnN0YW5jZSA9IHsNCiAgICBzeW1ib2w6ICdDUklUVEVSJywNCiAgICBmcm9tVHlwZTogJ2NvbnRyYWN0JywNCiAgICB0bywNCiAgICBmZWVTeW1ib2w6IFVUSUxJVFlfVE9LRU5fU1lNQk9MLA0KICAgIHByb3BlcnRpZXMsDQogIH07DQoNCiAgcmV0dXJuIGluc3RhbmNlOw0KfTsNCg0KLy8gaXNzdWUgc29tZSByYW5kb20gY3JpdHRlcnMhDQphY3Rpb25zLmhhdGNoID0gYXN5bmMgKHBheWxvYWQpID0+IHsNCiAgLy8gdGhpcyBhY3Rpb24gcmVxdWlyZXMgYWN0aXZlIGtleSBhdXRob3JpemF0aW9uDQogIGNvbnN0IHsNCiAgICBwYWNrU3ltYm9sLCAvLyB0aGUgdG9rZW4gd2Ugd2FudCB0byBidXkgd2l0aCBkZXRlcm1pbmVzIHdoaWNoIGVkaXRpb24gdG8gaXNzdWUNCiAgICBwYWNrcywgLy8gaG93IG1hbnkgY3JpdHRlcnMgdG8gaGF0Y2ggKDEgcGFjayA9IDUgY3JpdHRlcnMpDQogICAgaXNTaWduZWRXaXRoQWN0aXZlS2V5LA0KICB9ID0gcGF5bG9hZDsNCg0KICAvLyBnZXQgY29udHJhY3QgcGFyYW1zDQogIGNvbnN0IHBhcmFtcyA9IGF3YWl0IGFwaS5kYi5maW5kT25lKCdwYXJhbXMnLCB7fSk7DQogIGNvbnN0IHsgZWRpdGlvbk1hcHBpbmcgfSA9IHBhcmFtczsNCg0KICBpZiAoYXBpLmFzc2VydChpc1NpZ25lZFdpdGhBY3RpdmVLZXkgPT09IHRydWUsICd5b3UgbXVzdCB1c2UgYSBjdXN0b21fanNvbiBzaWduZWQgd2l0aCB5b3VyIGFjdGl2ZSBrZXknKQ0KICAgICYmIGFwaS5hc3NlcnQocGFja1N5bWJvbCAmJiB0eXBlb2YgcGFja1N5bWJvbCA9PT0gJ3N0cmluZycgJiYgcGFja1N5bWJvbCBpbiBlZGl0aW9uTWFwcGluZywgJ2ludmFsaWQgcGFjayBzeW1ib2wnKQ0KICAgICYmIGFwaS5hc3NlcnQocGFja3MgJiYgdHlwZW9mIHBhY2tzID09PSAnbnVtYmVyJyAmJiBwYWNrcyA+PSAxICYmIHBhY2tzIDw9IDEwICYmIE51bWJlci5pc0ludGVnZXIocGFja3MpLCAncGFja3MgbXVzdCBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMSBhbmQgMTAnKSkgew0KICAgIC8vIHZlcmlmeSB1c2VyIGhhcyBlbm91Z2ggYmFsYW5jZSB0byBwYXkgZm9yIGFsbCB0aGUgcGFja3MNCiAgICBjb25zdCBwYXltZW50VG9rZW5CYWxhbmNlID0gYXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCd0b2tlbnMnLCAnYmFsYW5jZXMnLCB7IGFjY291bnQ6IGFwaS5zZW5kZXIsIHN5bWJvbDogcGFja1N5bWJvbCB9KTsNCiAgICBjb25zdCBhdXRob3JpemVkID0gcGF5bWVudFRva2VuQmFsYW5jZSAmJiBhcGkuQmlnTnVtYmVyKHBheW1lbnRUb2tlbkJhbGFuY2UuYmFsYW5jZSkuZ3RlKHBhY2tzKTsNCiAgICBpZiAoYXBpLmFzc2VydChhdXRob3JpemVkLCAneW91IG11c3QgaGF2ZSBlbm91Z2ggcGFjayB0b2tlbnMnKSkgew0KICAgICAgLy8gdmVyaWZ5IHRoaXMgY29udHJhY3QgaGFzIGVub3VnaCBiYWxhbmNlIHRvIHBheSB0aGUgTkZUIGlzc3VhbmNlIGZlZXMNCiAgICAgIGNvbnN0IGNyaXR0ZXJzVG9IYXRjaCA9IHBhY2tzICogQ1JJVFRFUlNfUEVSX1BBQ0s7DQogICAgICBjb25zdCBuZnRQYXJhbXMgPSBhd2FpdCBhcGkuZGIuZmluZE9uZUluVGFibGUoJ25mdCcsICdwYXJhbXMnLCB7fSk7DQogICAgICBjb25zdCB7IG5mdElzc3VhbmNlRmVlIH0gPSBuZnRQYXJhbXM7DQogICAgICBjb25zdCBvbmVUb2tlbklzc3VhbmNlRmVlID0gYXBpLkJpZ051bWJlcihuZnRJc3N1YW5jZUZlZVtVVElMSVRZX1RPS0VOX1NZTUJPTF0pLm11bHRpcGxpZWRCeSg4KTsgLy8gYmFzZSBmZWUgKyA3IGRhdGEgcHJvcGVydGllcw0KICAgICAgY29uc3QgdG90YWxJc3N1YW5jZUZlZSA9IG9uZVRva2VuSXNzdWFuY2VGZWUubXVsdGlwbGllZEJ5KGNyaXR0ZXJzVG9IYXRjaCk7DQogICAgICBjb25zdCB1dGlsaXR5VG9rZW5CYWxhbmNlID0gYXdhaXQgYXBpLmRiLmZpbmRPbmVJblRhYmxlKCd0b2tlbnMnLCAnY29udHJhY3RzQmFsYW5jZXMnLCB7IGFjY291bnQ6IENPTlRSQUNUX05BTUUsIHN5bWJvbDogVVRJTElUWV9UT0tFTl9TWU1CT0wgfSk7DQogICAgICBjb25zdCBjYW5BZmZvcmRJc3N1YW5jZSA9IHV0aWxpdHlUb2tlbkJhbGFuY2UgJiYgYXBpLkJpZ051bWJlcih1dGlsaXR5VG9rZW5CYWxhbmNlLmJhbGFuY2UpLmd0ZSh0b3RhbElzc3VhbmNlRmVlKTsNCiAgICAgIGlmIChhcGkuYXNzZXJ0KGNhbkFmZm9yZElzc3VhbmNlLCAnY29udHJhY3QgY2Fubm90IGFmZm9yZCBpc3N1YW5jZScpKSB7DQogICAgICAgIC8vIGJ1cm4gdGhlIHBhY2sgdG9rZW5zDQogICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGFwaS5leGVjdXRlU21hcnRDb250cmFjdCgndG9rZW5zJywgJ3RyYW5zZmVyJywgew0KICAgICAgICAgIHRvOiAnbnVsbCcsIHN5bWJvbDogcGFja1N5bWJvbCwgcXVhbnRpdHk6IHBhY2tzLnRvU3RyaW5nKCksIGlzU2lnbmVkV2l0aEFjdGl2ZUtleSwNCiAgICAgICAgfSk7DQogICAgICAgIGlmICghYXBpLmFzc2VydChpc1Rva2VuVHJhbnNmZXJWZXJpZmllZChyZXMsIGFwaS5zZW5kZXIsICdudWxsJywgcGFja1N5bWJvbCwgcGFja3MudG9TdHJpbmcoKSwgJ3RyYW5zZmVyJyksICd1bmFibGUgdG8gdHJhbnNmZXIgcGFjayB0b2tlbnMnKSkgew0KICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIHdlIHdpbGwgaXNzdWUgY3JpdHRlcnMgaW4gcGFja3Mgb2YgNSBhdCBvbmNlDQogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFja3M7IGkgKz0gMSkgew0KICAgICAgICAgIGNvbnN0IGluc3RhbmNlcyA9IFtdOw0KICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgQ1JJVFRFUlNfUEVSX1BBQ0s7IGogKz0gMSkgew0KICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goZ2VuZXJhdGVSYW5kb21Dcml0dGVyKGVkaXRpb25NYXBwaW5nW3BhY2tTeW1ib2xdLCBhcGkuc2VuZGVyKSk7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgYXdhaXQgYXBpLmV4ZWN1dGVTbWFydENvbnRyYWN0KCduZnQnLCAnaXNzdWVNdWx0aXBsZScsIHsNCiAgICAgICAgICAgIGluc3RhbmNlcywNCiAgICAgICAgICAgIGlzU2lnbmVkV2l0aEFjdGl2ZUtleSwNCiAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgIH0NCiAgICB9DQogIH0NCiAgcmV0dXJuIGZhbHNlOw0KfTsNCg=="}}}