UNPKG

cc-zos-vouching

Version:

Vouching logic for the EVM packages of the ZeppelinOS smart contract platform

281 lines 508 kB
{ "contractName": "Vouching", "abi": [ { "anonymous": false, "inputs": [ { "indexed": true, "name": "oldOwner", "type": "address" }, { "indexed": true, "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "nameHash", "type": "bytes32" }, { "indexed": false, "name": "name", "type": "string" }, { "indexed": true, "name": "owner", "type": "address" }, { "indexed": true, "name": "dependencyAddress", "type": "address" }, { "indexed": false, "name": "initialStake", "type": "uint256" } ], "name": "DependencyCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "nameHash", "type": "bytes32" }, { "indexed": false, "name": "amount", "type": "uint256" } ], "name": "Vouched", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "nameHash", "type": "bytes32" }, { "indexed": false, "name": "amount", "type": "uint256" } ], "name": "Unvouched", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "nameHash", "type": "bytes32" } ], "name": "DependencyRemoved", "type": "event" }, { "constant": false, "inputs": [ { "name": "minimumStake", "type": "uint256" }, { "name": "token", "type": "address" } ], "name": "initialize", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "minimumStake", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token", "outputs": [ { "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "name": "name", "type": "string" } ], "name": "getDependency", "outputs": [ { "name": "", "type": "address" }, { "name": "", "type": "address" }, { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "name", "type": "string" }, { "name": "owner", "type": "address" }, { "name": "dependencyAddress", "type": "address" }, { "name": "initialStake", "type": "uint256" } ], "name": "create", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "name", "type": "string" }, { "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "name", "type": "string" }, { "name": "amount", "type": "uint256" } ], "name": "vouch", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "name", "type": "string" }, { "name": "amount", "type": "uint256" } ], "name": "unvouch", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "name": "name", "type": "string" } ], "name": "remove", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b50611db3806100206000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635be17b001461009e5780635ec7ad01146100e35780636c6f82131461016857806380599e4b146101ad5780639c91e9ae146101e8578063c0e793c2146102cb578063da35a26f14610326578063ec5ffac214610373578063fc0c546a1461039e575b600080fd5b3480156100aa57600080fd5b506100e1600480360381019080803590602001908201803590602001919091929391929390803590602001909291905050506103f5565b005b3480156100ef57600080fd5b50610166600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107a3565b005b34801561017457600080fd5b506101ab60048036038101908080359060200190820180359060200191909192939192939080359060200190929190505050610dc4565b005b3480156101b957600080fd5b506101e66004803603810190808035906020019082018035906020019190919293919293905050506110ce565b005b3480156101f457600080fd5b5061024f600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611423565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b3480156102d757600080fd5b50610324600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115c2565b005b34801561033257600080fd5b5061037160048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b8565b005b34801561037f57600080fd5b50610388611adc565b6040518082815260200191505060405180910390f35b3480156103aa57600080fd5b506103b3611ae6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b602083101515610462578051825260208201915060208101905060208303925061043d565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6105bc836033878760405180838380828437820191505092505050908152602001604051809103902060020154611b1090919063ffffffff16565b9150603554821015151561065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f52656d61696e696e67207374616b65206d75737420626520657175616c206f7281526020017f2067726561746572207468616e206d696e696d756d207374616b65000000000081525060400191505060405180910390fd5b8160338686604051808383808284378201915050925050509081526020016040518091039020600201819055506106d83384603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b319092919063ffffffff16565b8484604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515610734578051825260208201915060208101905060208303925061070f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f219161330e013c572dbddc7c784c23154d4e615598fd17809bbce82941f1d306846040518082815260200191505060405180910390a25050505050565b6035548110151515610843576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f496e697469616c207374616b65206d75737420626520657175616c206f72206781526020017f726561746572207468616e206d696e696d756d207374616b650000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4f776e657220616464726573732063616e6e6f74206265207a65726f0000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f446570656e64656e637920616464726573732063616e6e6f74206265207a657281526020017f6f0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6109d28273ffffffffffffffffffffffffffffffffffffffff16611c1f565b1515610a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f446570656e64656e63696573206d75737420626520636f6e747261637473000081525060200191505060405180910390fd5b6034858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151515610b14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f476976656e20646570656e64656e6379206e616d6520697320616c726561647981526020017f207265676973746572656400000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016034868660405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055506060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152506033868660405180838380828437820191505092505050908152602001604051809103902060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155905050610ca9833083603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c32909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168686604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515610d335780518252602082019150602081019050602083039250610d0e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f9ad577319e73a6c105cbd07282c1a2572ebcd5f837ec8c9117e3d8cbe6b91cc488888660405180806020018381526020018281038252858582818152602001925080828437820191505094505050505060405180910390a45050505050565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b602083101515610e2f5780518252602082019150602081019050602083039250610e0a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610f89826033868660405180838380828437820191505092505050908152602001604051809103902060020154611d5590919063ffffffff16565b6033858560405180838380828437820191505092505050908152602001604051809103902060020181905550611004333084603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c32909392919063ffffffff16565b8383604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515611060578051825260208201915060208101905060208303925061103b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167fb48d012f027da23dbfacea42893bc20fb21482de1eb9d1737697eb3622557bd6836040518082815260200191505060405180910390a250505050565b600082828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b60208310151561113b5780518252602082019150602081019050602083039250611116565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6112976035546033868660405180838380828437820191505092505050908152602001604051809103902060020154611b1090919063ffffffff16565b915060338484604051808383808284378201915050925050509081526020016040518091039020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600282016000905550506113643383603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b319092919063ffffffff16565b8383604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b6020831015156113c0578051825260208201915060208101905060208303925061139b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7260405160405180910390a250505050565b60008060006033846040518082805190602001908083835b602083101515611460578051825260208201915060208101905060208303925061143b565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166033856040518082805190602001908083835b6020831015156114ef57805182526020820191506020810190506020830392506114ca565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166033866040518082805190602001908083835b60208310151561157e5780518252602082019150602081019050602083039250611559565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600201549250925092509193909250565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b60208310151561162d5780518252602082019150602081019050602083039250611608565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6577206f776e657220616464726573732063616e6e6f74206265207a65726f81525060200191505060405180910390fd5b816033858560405180838380828437820191505092505050908152602001604051809103902060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350505050565b60008060019054906101000a900460ff16806118d857506118d7611d76565b5b806118ef57506000809054906101000a900460ff16155b1515611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff1690506001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e20616464726573732063616e6e6f74206265207a65726f0000000081525060200191505060405180910390fd5b8260358190555081603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060016101000a81548160ff021916908315150217905550505050565b6000603554905090565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080838311151515611b2257600080fd5b82840390508091505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611bd457600080fd5b505af1158015611be8573d6000803e3d6000fd5b505050506040513d6020811015611bfe57600080fd5b81019080805190602001909291905050501515611c1a57600080fd5b505050565b600080823b905060008111915050919050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b505050506040513d6020811015611d3357600080fd5b81019080805190602001909291905050501515611d4f57600080fd5b50505050565b6000808284019050838110151515611d6c57600080fd5b8091505092915050565b600080303b905060008114915050905600a165627a7a72305820c53efe3cf602378f0896c96e521166623f9b7ed32023e2b8f31e4151f4aaafec0029", "deployedBytecode": "0x608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635be17b001461009e5780635ec7ad01146100e35780636c6f82131461016857806380599e4b146101ad5780639c91e9ae146101e8578063c0e793c2146102cb578063da35a26f14610326578063ec5ffac214610373578063fc0c546a1461039e575b600080fd5b3480156100aa57600080fd5b506100e1600480360381019080803590602001908201803590602001919091929391929390803590602001909291905050506103f5565b005b3480156100ef57600080fd5b50610166600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107a3565b005b34801561017457600080fd5b506101ab60048036038101908080359060200190820180359060200191909192939192939080359060200190929190505050610dc4565b005b3480156101b957600080fd5b506101e66004803603810190808035906020019082018035906020019190919293919293905050506110ce565b005b3480156101f457600080fd5b5061024f600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050611423565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390f35b3480156102d757600080fd5b50610324600480360381019080803590602001908201803590602001919091929391929390803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115c2565b005b34801561033257600080fd5b5061037160048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118b8565b005b34801561037f57600080fd5b50610388611adc565b6040518082815260200191505060405180910390f35b3480156103aa57600080fd5b506103b3611ae6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b600083838080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b602083101515610462578051825260208201915060208101905060208303925061043d565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610581576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6105bc836033878760405180838380828437820191505092505050908152602001604051809103902060020154611b1090919063ffffffff16565b9150603554821015151561065e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f52656d61696e696e67207374616b65206d75737420626520657175616c206f7281526020017f2067726561746572207468616e206d696e696d756d207374616b65000000000081525060400191505060405180910390fd5b8160338686604051808383808284378201915050925050509081526020016040518091039020600201819055506106d83384603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b319092919063ffffffff16565b8484604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515610734578051825260208201915060208101905060208303925061070f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f219161330e013c572dbddc7c784c23154d4e615598fd17809bbce82941f1d306846040518082815260200191505060405180910390a25050505050565b6035548110151515610843576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f496e697469616c207374616b65206d75737420626520657175616c206f72206781526020017f726561746572207468616e206d696e696d756d207374616b650000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156108e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4f776e657220616464726573732063616e6e6f74206265207a65726f0000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f446570656e64656e637920616464726573732063616e6e6f74206265207a657281526020017f6f0000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6109d28273ffffffffffffffffffffffffffffffffffffffff16611c1f565b1515610a46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f446570656e64656e63696573206d75737420626520636f6e747261637473000081525060200191505060405180910390fd5b6034858560405180838380828437820191505092505050908152602001604051809103902060009054906101000a900460ff16151515610b14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f476976656e20646570656e64656e6379206e616d6520697320616c726561647981526020017f207265676973746572656400000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016034868660405180838380828437820191505092505050908152602001604051809103902060006101000a81548160ff0219169083151502179055506060604051908101604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152506033868660405180838380828437820191505092505050908152602001604051809103902060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155905050610ca9833083603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c32909392919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168686604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515610d335780518252602082019150602081019050602083039250610d0e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f9ad577319e73a6c105cbd07282c1a2572ebcd5f837ec8c9117e3d8cbe6b91cc488888660405180806020018381526020018281038252858582818152602001925080828437820191505094505050505060405180910390a45050505050565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b602083101515610e2f5780518252602082019150602081019050602083039250610e0a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b610f89826033868660405180838380828437820191505092505050908152602001604051809103902060020154611d5590919063ffffffff16565b6033858560405180838380828437820191505092505050908152602001604051809103902060020181905550611004333084603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c32909392919063ffffffff16565b8383604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b602083101515611060578051825260208201915060208101905060208303925061103b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167fb48d012f027da23dbfacea42893bc20fb21482de1eb9d1737697eb3622557bd6836040518082815260200191505060405180910390a250505050565b600082828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b60208310151561113b5780518252602082019150602081019050602083039250611116565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561125a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6112976035546033868660405180838380828437820191505092505050908152602001604051809103902060020154611b1090919063ffffffff16565b915060338484604051808383808284378201915050925050509081526020016040518091039020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600282016000905550506113643383603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b319092919063ffffffff16565b8383604051602001808383808284378201915050925050506040516020818303038152906040526040518082805190602001908083835b6020831015156113c0578051825260208201915060208101905060208303925061139b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020600019167f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7260405160405180910390a250505050565b60008060006033846040518082805190602001908083835b602083101515611460578051825260208201915060208101905060208303925061143b565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166033856040518082805190602001908083835b6020831015156114ef57805182526020820191506020810190506020830392506114ca565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166033866040518082805190602001908083835b60208310151561157e5780518252602082019150602081019050602083039250611559565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600201549250925092509193909250565b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506033816040518082805190602001908083835b60208310151561162d5780518252602082019150602081019050602083039250611608565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561174c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f53656e646572206d7573742062652074686520646570656e64656e6379206f7781526020017f6e6572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156117f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6577206f776e657220616464726573732063616e6e6f74206265207a65726f81525060200191505060405180910390fd5b816033858560405180838380828437820191505092505050908152602001604051809103902060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350505050565b60008060019054906101000a900460ff16806118d857506118d7611d76565b5b806118ef57506000809054906101000a900460ff16155b1515611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f436f6e747261637420696e7374616e63652068617320616c726561647920626581526020017f656e20696e697469616c697a656400000000000000000000000000000000000081525060400191505060405180910390fd5b600060019054906101000a900460ff1690506001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611a75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e20616464726573732063616e6e6f74206265207a65726f0000000081525060200191505060405180910390fd5b8260358190555081603660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600060016101000a81548160ff021916908315150217905550505050565b6000603554905090565b6000603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080838311151515611b2257600080fd5b82840390508091505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611bd457600080fd5b505af1158015611be8573d6000803e3d6000fd5b505050506040513d6020811015611bfe57600080fd5b81019080805190602001909291905050501515611c1a57600080fd5b505050565b600080823b905060008111915050919050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611d0957600080fd5b505af1158015611d1d573d6000803e3d6000fd5b505050506040513d6020811015611d3357600080fd5b81019080805190602001909291905050501515611d4f57600080fd5b50505050565b6000808284019050838110151515611d6c57600080fd5b8091505092915050565b600080303b905060008114915050905600a165627a7a72305820c53efe3cf602378f0896c96e521166623f9b7ed32023e2b8f31e4151f4aaafec0029", "sourceMap": "306:3770:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;306:3770:0;;;;;;;", "deployedSourceMap": "306:3770:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3193:413;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3193:413:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:812;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1844:812:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2926:263;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2926:263:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3610:463;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3610:463:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1634:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1634:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2660:262;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2660:262:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1271:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1271:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1474:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1474:84:0;;;;;;;;;;;;;;;;;;;;;;;1562:68;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1562:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3193:413;3280:22;3268:4;;1124:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:9;1204:4;1194:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1194:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1180:35;;:10;:35;;;1172:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3305:33;3331:6;3305:9;3315:4;;3305:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:25;;:33;;;;:::i;:::-;3280:58;;3370:13;;3352:14;:31;;3344:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3478:14;3454:9;3464:4;;3454:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;:38;;;;3498:39;3518:10;3530:6;3498;;;;;;;;;;;:19;;;;:39;;;;;:::i;:::-;3586:4;;3569:22;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3569:22:0;;;3559:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3559:33:0;;;;;;;;;;;;;;;;3549:52;;;;3594:6;3549:52;;;;;;;;;;;;;;;;;;3193:413;;;;;:::o;1844:812::-;1976:13;;1960:12;:29;;1952:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2082:1;2065:19;;:5;:19;;;;2057:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2160:1;2131:31;;:17;:31;;;;2123:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2214:30;:17;:28;;;:30::i;:::-;2206:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2294:21;2316:4;;2294:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:28;2285:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2406:4;2376:21;2398:4;;2376:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;2434:50;;;;;;;;;2445:5;2434:50;;;;;;2452:17;2434:50;;;;;;2471:12;2434:50;;;2416:9;2426:4;;2416:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:50;2515:5;2522:4;2528:12;2491:6;;;;;;;;;;;:23;;;;:50;;;;;;:::i;:::-;2619:17;2553:98;;2612:5;2553:98;;2598:4;;2581:22;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2581:22:0;;;2571:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2571:33:0;;;;;;;;;;;;;;;;2553:98;;;;2606:4;;2638:12;2553:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1844:812;;;;;:::o;2926:263::-;2999:4;;1124:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:9;1204:4;1194:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1194:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1180:35;;:10;:35;;;1172:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3035:33;3061:6;3035:9;3045:4;;3035:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:25;;:33;;;;:::i;:::-;3011:9;3021:4;;3011:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;:57;;;;3074:49;3098:10;3110:4;3116:6;3074;;;;;;;;;;;:23;;;;:49;;;;;;:::i;:::-;3169:4;;3152:22;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3152:22:0;;;3142:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3142:33:0;;;;;;;;;;;;;;;;3134:50;;;;3177:6;3134:50;;;;;;;;;;;;;;;;;;2926:263;;;;:::o;3610:463::-;3732:24;3668:4;;1124:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:9;1204:4;1194:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1194:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1180:35;;:10;:35;;;1172:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3759:40;3785:13;;3759:9;3769:4;;3759:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:25;;:40;;;;:::i;:::-;3732:67;;3934:9;3944:4;;3934:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3927:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3956:49;3976:10;3988:16;3956:6;;;;;;;;;;;:19;;;;:49;;;;;:::i;:::-;4061:4;;4044:22;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4044:22:0;;;4034:33;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4034:33:0;;;;;;;;;;;;;;;;4016:52;;;;;;;;;;;;;3610:463;;;;:::o;1634:206::-;1690:7;1699;1708;1738:9;1748:4;1738:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1738:15:0;;;;;;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;1779:9;1789:4;1779:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1779:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1808:9;1818:4;1808:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1808:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;1723:112;;;;;;1634:206;;;;;:::o;2660:262::-;2747:4;;1124:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1194:9;1204:4;1194:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1194:15:0;;;;;;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;1180:35;;:10;:35;;;1172:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:1;2767:22;;:8;:22;;;;2759:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2856:8;2832:9;2842:4;;2832:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;:32;;;;;;;;;;;;;;;;;;2908:8;2875:42;;2896:10;2875:42;;;;;;;;;;;;2660:262;;;;:::o;1271:199::-;1121:20:16;1016:12;;;;;;;;;;;:31;;;;1032:15;:13;:15::i;:::-;1016:31;:47;;;;1052:11;;;;;;;;;;;1051:12;1016:47;1008:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:12;;;;;;;;;;;1121:35;;1177:4;1162:12;;:19;;;;;;;;;;;;;;;;;;1201:4;1187:11;;:18;;;;;;;;;;;;;;;;;;1376:1:0;1359:19;;:5;:19;;;;1351:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1433:12;1417:13;:28;;;;1460:5;1451:6;;:14;;;;;;;;;;;;;;;;;;1235:15:16;1220:12;;:30;;;;;;;;;;;;;;;;;;1271:199:0;;;:::o;1474:84::-;1518:7;1540:13;;1533:20;;1474:84;:::o;1562:68::-;1599:5;1619:6;;;;;;;;;;;1612:13;;1562:68;:::o;1079:131:6:-;1137:7;1173:9;1165:1;1160;:6;;1152:15;;;;;;;;1189:1;1185;:5;1173:17;;1204:1;1197:8;;1079:131;;;;;:::o;364:139:11:-;472:5;:14;;;487:2;491:5;472:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;472:25:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;472:25:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;472:25:11;;;;;;;;;;;;;;;;464:34;;;;;;;;364:139;;;:::o;450:582:12:-;510:4;522:12;997:7;985:20;977:28;;1026:1;1019:4;:8;1012:15;;450:582;;;;:::o;507:171:11:-;637:5;:18;;;656:4;662:2;666:5;637:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;637:35:11;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;637:35:11;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;637:35:11;;;;;;;;;;;;;;;;629:44;;;;;;;;507:171;;;;:::o;1273:131:6:-;1331:7;1346:9;1362:1;1358;:5;1346:17;;1382:1;1377;:6;;1369:15;;;;;;;;1398:1;1391:8;;1273:131;;;;;:::o;1341:467:16:-;1388:4;1729:10;1774:7;1762:20;1756:26;;1802:1;1796:2;:7;1789:14;;1341:467;;:::o", "source": "pragma solidity ^0.4.24;\n\n\nimport \"zos-lib/contracts/Initializable.sol\";\nimport \"openzeppelin-eth/contracts/token/ERC20/ERC20.sol\";\nimport \"openzeppelin-eth/contracts/token/ERC20/SafeERC20.sol\";\nimport \"openzeppelin-eth/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-eth/contracts/utils/Address.sol\";\n\ncontract Vouching is Initializable {\n event OwnershipTransferred(address indexed oldOwner, address indexed newOwner);\n event DependencyCreated(\n bytes32 indexed nameHash,\n string name,\n address indexed owner,\n address indexed dependencyAddress,\n uint256 initialStake\n );\n event Vouched(bytes32 indexed nameHash, uint256 amount);\n event Unvouched(bytes32 indexed nameHash, uint256 amount);\n event DependencyRemoved(bytes32 indexed nameHash);\n\n using SafeMath for uint256;\n using SafeERC20 for ERC20;\n using Address for address;\n\n struct Dependency {\n address owner;\n address dependencyAddress;\n uint256 stake;\n }\n\n mapping (string => Dependency) private _registry;\n mapping (string => bool) private _takenDependencyNames;\n uint256 private _minimumStake;\n ERC20 private _token;\n\n modifier onlyDependencyOwner(string name) {\n require(msg.sender == _registry[name].owner, \"Sender must be the dependency owner\");\n _;\n }\n\n function initialize(uint256 minimumStake, ERC20 token) initializer public {\n require(token != address(0), \"Token address cannot be zero\");\n _minimumStake = minimumStake;\n _token = token;\n }\n\n function minimumStake() public view returns(uint256) {\n return _minimumStake;\n }\n\n function token() public view returns(ERC20) {\n return _token;\n }\n\n function getDependency(string name) public view returns(address, address, uint256) {\n return (\n _registry[name].dependencyAddress,\n _registry[name].owner,\n _registry[name].stake\n );\n }\n\n function create(string name, address owner, address dependencyAddress, uint256 initialStake) external {\n require(initialStake >= _minimumStake, \"Initial stake must be equal or greater than minimum stake\");\n require(owner != address(0), \"Owner address cannot be zero\");\n require(dependencyAddress != address(0), \"Dependency address cannot be zero\");\n require(dependencyAddress.isContract(), \"Dependencies must be contracts\");\n require(!_takenDependencyNames[name], \"Given dependency name is already registered\");\n\n _takenDependencyNames[name] = true;\n _registry[name] = Dependency(owner, dependencyAddress, initialStake);\n\n _token.safeTransferFrom(owner, this, initialStake);\n\n emit DependencyCreated(keccak256(abi.encodePacked(name)), name, owner, dependencyAddress, initialStake);\n }\n\n function transferOwnership(string name, address newOwner) external onlyDependencyOwner(name) {\n require(newOwner != address(0), \"New owner address cannot be zero\");\n _registry[name].owner = newOwner;\n emit OwnershipTransferred(msg.sender, newOwner);\n }\n\n function vouch(string name, uint256 amount) external onlyDependencyOwner(name) {\n _registry[name].stake = _registry[name].stake.add(amount);\n _token.safeTransferFrom(msg.sender, this, amount);\n emit Vouched(keccak256(abi.encodePacked(name)), amount);\n }\n\n function unvouch(string name, uint256 amount) external onlyDependencyOwner(name) {\n uint256 remainingStake = _registry[name].stake.sub(amount);\n require(remainingStake >= _minimumStake, \"Remaining stake must be equal or greater than minimum stake\");\n\n _registry[name].stake = remainingStake;\n _token.safeTransfer(msg.sender, amount);\n\n emit Unvouched(keccak256(abi.encodePacked(name)), amount);\n }\n\n function remove(string name) external onlyDependencyOwner(name) {\n // Owner surrenders _minimumStake to the system\n uint256 reimbursedAmount = _registry[name].stake.sub(_minimumStake);\n\n // The entry is not removed from _takenDependencyNames, to prevent a new dependecy\n // from reusing the same name\n delete _registry[name];\n\n _token.safeTransfer(msg.sender, reimbursedAmount);\n emit DependencyRemoved(keccak256(abi.encodePacked(name)));\n }\n\n}\n\n", "sourcePath": "/Users/connor/Documents/git/zos/packages/vouching/contracts/Vouching.sol", "ast": { "absolutePath": "/Users/connor/Documents/git/zos/packages/vouching/contracts/Vouching.sol", "exportedSymbols": { "Vouching": [ 416 ] }, "id": 417, "nodeType": "SourceU