Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- OracleDelegate
- Optimization enabled
- true
- Compiler version
- v0.4.26+commit.4563c3fc
- Optimization runs
- 200
- EVM Version
- byzantium
- Verified at
- 2023-04-19T10:19:43.917487Z
Contract source code
// File: contracts/lib/BasicStorageLib.sol pragma solidity ^0.4.24; library BasicStorageLib { struct UintData { mapping(bytes => mapping(bytes => uint)) _storage; } struct BoolData { mapping(bytes => mapping(bytes => bool)) _storage; } struct AddressData { mapping(bytes => mapping(bytes => address)) _storage; } struct BytesData { mapping(bytes => mapping(bytes => bytes)) _storage; } struct StringData { mapping(bytes => mapping(bytes => string)) _storage; } /* uintStorage */ function setStorage(UintData storage self, bytes memory key, bytes memory innerKey, uint value) internal { self._storage[key][innerKey] = value; } function getStorage(UintData storage self, bytes memory key, bytes memory innerKey) internal view returns (uint) { return self._storage[key][innerKey]; } function delStorage(UintData storage self, bytes memory key, bytes memory innerKey) internal { delete self._storage[key][innerKey]; } /* boolStorage */ function setStorage(BoolData storage self, bytes memory key, bytes memory innerKey, bool value) internal { self._storage[key][innerKey] = value; } function getStorage(BoolData storage self, bytes memory key, bytes memory innerKey) internal view returns (bool) { return self._storage[key][innerKey]; } function delStorage(BoolData storage self, bytes memory key, bytes memory innerKey) internal { delete self._storage[key][innerKey]; } /* addressStorage */ function setStorage(AddressData storage self, bytes memory key, bytes memory innerKey, address value) internal { self._storage[key][innerKey] = value; } function getStorage(AddressData storage self, bytes memory key, bytes memory innerKey) internal view returns (address) { return self._storage[key][innerKey]; } function delStorage(AddressData storage self, bytes memory key, bytes memory innerKey) internal { delete self._storage[key][innerKey]; } /* bytesStorage */ function setStorage(BytesData storage self, bytes memory key, bytes memory innerKey, bytes memory value) internal { self._storage[key][innerKey] = value; } function getStorage(BytesData storage self, bytes memory key, bytes memory innerKey) internal view returns (bytes memory) { return self._storage[key][innerKey]; } function delStorage(BytesData storage self, bytes memory key, bytes memory innerKey) internal { delete self._storage[key][innerKey]; } /* stringStorage */ function setStorage(StringData storage self, bytes memory key, bytes memory innerKey, string memory value) internal { self._storage[key][innerKey] = value; } function getStorage(StringData storage self, bytes memory key, bytes memory innerKey) internal view returns (string memory) { return self._storage[key][innerKey]; } function delStorage(StringData storage self, bytes memory key, bytes memory innerKey) internal { delete self._storage[key][innerKey]; } } // File: contracts/components/BasicStorage.sol pragma solidity ^0.4.24; contract BasicStorage { /************************************************************ ** ** VARIABLES ** ************************************************************/ //// basic variables using BasicStorageLib for BasicStorageLib.UintData; using BasicStorageLib for BasicStorageLib.BoolData; using BasicStorageLib for BasicStorageLib.AddressData; using BasicStorageLib for BasicStorageLib.BytesData; using BasicStorageLib for BasicStorageLib.StringData; BasicStorageLib.UintData internal uintData; BasicStorageLib.BoolData internal boolData; BasicStorageLib.AddressData internal addressData; BasicStorageLib.BytesData internal bytesData; BasicStorageLib.StringData internal stringData; } // File: contracts/oracle/OracleStorage.sol pragma solidity 0.4.26; contract OracleStorage is BasicStorage { /************************************************************ ** ** STRUCTURE DEFINATIONS ** ************************************************************/ struct StoremanGroupConfig { uint deposit; uint[2] chain; uint[2] curve; bytes gpk1; bytes gpk2; uint startTime; uint endTime; uint8 status; bool isDebtClean; } /************************************************************ ** ** VARIABLES ** ************************************************************/ /// @notice symbol -> price, mapping(bytes32 => uint) public mapPrices; /// @notice smgId -> StoremanGroupConfig mapping(bytes32 => StoremanGroupConfig) public mapStoremanGroupConfig; /// @notice owner and admin have the authority of admin address public admin; } // File: contracts/components/Owned.sol /* Copyright 2019 Wanchain Foundation. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ // _ _ _ // __ ____ _ _ __ ___| |__ __ _(_)_ __ __| | _____ __ // \ \ /\ / / _` | '_ \ / __| '_ \ / _` | | '_ \@/ _` |/ _ \ \ / / // \ V V / (_| | | | | (__| | | | (_| | | | | | (_| | __/\ V / // \_/\_/ \__,_|_| |_|\___|_| |_|\__,_|_|_| |_|\__,_|\___| \_/ // // pragma solidity ^0.4.24; /// @dev `Owned` is a base level contract that assigns an `owner` that can be /// later changed contract Owned { event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /// @dev `owner` is the only address that can call a function with this /// modifier modifier onlyOwner() { require(msg.sender == owner, "Not owner"); _; } address public owner; /// @notice The Constructor assigns the message sender to be `owner` constructor() public { owner = msg.sender; } address public newOwner; function transferOwner(address _newOwner) public onlyOwner { require(_newOwner != address(0), "New owner is the zero address"); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } /// @notice `owner` can step down and assign some other address to this role /// @param _newOwner The address of the new owner. 0x0 can be used to create /// an unowned neutral vault, however that cannot be undone function changeOwner(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { if (msg.sender == newOwner) { owner = newOwner; } } function renounceOwnership() public onlyOwner { owner = address(0); } } // File: contracts/oracle/OracleDelegate.sol pragma solidity 0.4.26; /** * Math operations with safety checks */ contract OracleDelegate is OracleStorage, Owned { /** * * EVENTS * */ event SetAdmin(address addr); event UpdatePrice(bytes32[] keys, uint[] prices); event SetDebtClean(bytes32 indexed id, bool isDebtClean); event SetStoremanGroupConfig(bytes32 indexed id, uint8 status, uint deposit, uint[2] chain, uint[2] curve, bytes gpk1, bytes gpk2, uint startTime, uint endTime); event SetStoremanGroupStatus(bytes32 indexed id, uint8 status); event UpdateDeposit(bytes32 indexed id, uint deposit); /** * * MODIFIERS * */ modifier onlyAdmin() { require((msg.sender == admin) || (msg.sender == owner), "not admin"); _; } /** * * MANIPULATIONS * */ function updatePrice( bytes32[] keys, uint[] prices ) external onlyAdmin { require(keys.length == prices.length, "length not same"); for (uint256 i = 0; i < keys.length; i++) { mapPrices[keys[i]] = prices[i]; } emit UpdatePrice(keys, prices); } function updateDeposit( bytes32 smgID, uint amount ) external onlyAdmin { mapStoremanGroupConfig[smgID].deposit = amount; emit UpdateDeposit(smgID, amount); } function setStoremanGroupStatus( bytes32 id, uint8 status ) external onlyAdmin { mapStoremanGroupConfig[id].status = status; emit SetStoremanGroupStatus(id, status); } function setStoremanGroupConfig( bytes32 id, uint8 status, uint deposit, uint[2] chain, uint[2] curve, bytes gpk1, bytes gpk2, uint startTime, uint endTime ) external onlyAdmin { mapStoremanGroupConfig[id].deposit = deposit; mapStoremanGroupConfig[id].status = status; mapStoremanGroupConfig[id].chain[0] = chain[0]; mapStoremanGroupConfig[id].chain[1] = chain[1]; mapStoremanGroupConfig[id].curve[0] = curve[0]; mapStoremanGroupConfig[id].curve[1] = curve[1]; mapStoremanGroupConfig[id].gpk1 = gpk1; mapStoremanGroupConfig[id].gpk2 = gpk2; mapStoremanGroupConfig[id].startTime = startTime; mapStoremanGroupConfig[id].endTime = endTime; emit SetStoremanGroupConfig(id, status, deposit, chain, curve, gpk1, gpk2, startTime, endTime); } function setDebtClean( bytes32 storemanGroupId, bool isClean ) external onlyAdmin { mapStoremanGroupConfig[storemanGroupId].isDebtClean = isClean; emit SetDebtClean(storemanGroupId, isClean); } function setAdmin( address addr ) external onlyOwner { admin = addr; emit SetAdmin(addr); } function getValue(bytes32 key) external view returns (uint) { return mapPrices[key]; } function getValues(bytes32[] keys) external view returns (uint[] values) { values = new uint[](keys.length); for(uint256 i = 0; i < keys.length; i++) { values[i] = mapPrices[keys[i]]; } } function getDeposit(bytes32 smgID) external view returns (uint) { return mapStoremanGroupConfig[smgID].deposit; } function getStoremanGroupConfig( bytes32 id ) external view returns(bytes32 groupId, uint8 status, uint deposit, uint chain1, uint chain2, uint curve1, uint curve2, bytes gpk1, bytes gpk2, uint startTime, uint endTime) { groupId = id; status = mapStoremanGroupConfig[id].status; deposit = mapStoremanGroupConfig[id].deposit; chain1 = mapStoremanGroupConfig[id].chain[0]; chain2 = mapStoremanGroupConfig[id].chain[1]; curve1 = mapStoremanGroupConfig[id].curve[0]; curve2 = mapStoremanGroupConfig[id].curve[1]; gpk1 = mapStoremanGroupConfig[id].gpk1; gpk2 = mapStoremanGroupConfig[id].gpk2; startTime = mapStoremanGroupConfig[id].startTime; endTime = mapStoremanGroupConfig[id].endTime; } function getStoremanGroupStatus(bytes32 id) public view returns(uint8 status, uint startTime, uint endTime) { status = mapStoremanGroupConfig[id].status; startTime = mapStoremanGroupConfig[id].startTime; endTime = mapStoremanGroupConfig[id].endTime; } function isDebtClean( bytes32 storemanGroupId ) external view returns (bool) { return mapStoremanGroupConfig[storemanGroupId].isDebtClean; } }
Contract ABI
[{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256[]","name":"values"}],"name":"getValues","inputs":[{"type":"bytes32[]","name":"keys"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"groupId"},{"type":"uint8","name":"status"},{"type":"uint256","name":"deposit"},{"type":"uint256","name":"chain1"},{"type":"uint256","name":"chain2"},{"type":"uint256","name":"curve1"},{"type":"uint256","name":"curve2"},{"type":"bytes","name":"gpk1"},{"type":"bytes","name":"gpk2"},{"type":"uint256","name":"startTime"},{"type":"uint256","name":"endTime"}],"name":"getStoremanGroupConfig","inputs":[{"type":"bytes32","name":"id"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"deposit"},{"type":"bytes","name":"gpk1"},{"type":"bytes","name":"gpk2"},{"type":"uint256","name":"startTime"},{"type":"uint256","name":"endTime"},{"type":"uint8","name":"status"},{"type":"bool","name":"isDebtClean"}],"name":"mapStoremanGroupConfig","inputs":[{"type":"bytes32","name":""}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwner","inputs":[{"type":"address","name":"_newOwner"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"isDebtClean","inputs":[{"type":"bytes32","name":"storemanGroupId"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setStoremanGroupConfig","inputs":[{"type":"bytes32","name":"id"},{"type":"uint8","name":"status"},{"type":"uint256","name":"deposit"},{"type":"uint256[2]","name":"chain"},{"type":"uint256[2]","name":"curve"},{"type":"bytes","name":"gpk1"},{"type":"bytes","name":"gpk2"},{"type":"uint256","name":"startTime"},{"type":"uint256","name":"endTime"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getValue","inputs":[{"type":"bytes32","name":"key"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setAdmin","inputs":[{"type":"address","name":"addr"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"renounceOwnership","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"acceptOwnership","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"getDeposit","inputs":[{"type":"bytes32","name":"smgID"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setDebtClean","inputs":[{"type":"bytes32","name":"storemanGroupId"},{"type":"bool","name":"isClean"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":"status"},{"type":"uint256","name":"startTime"},{"type":"uint256","name":"endTime"}],"name":"getStoremanGroupStatus","inputs":[{"type":"bytes32","name":"id"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"changeOwner","inputs":[{"type":"address","name":"_newOwner"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updatePrice","inputs":[{"type":"bytes32[]","name":"keys"},{"type":"uint256[]","name":"prices"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"mapPrices","inputs":[{"type":"bytes32","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"newOwner","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setStoremanGroupStatus","inputs":[{"type":"bytes32","name":"id"},{"type":"uint8","name":"status"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateDeposit","inputs":[{"type":"bytes32","name":"smgID"},{"type":"uint256","name":"amount"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"admin","inputs":[],"constant":true},{"type":"event","name":"SetAdmin","inputs":[{"type":"address","name":"addr","indexed":false}],"anonymous":false},{"type":"event","name":"UpdatePrice","inputs":[{"type":"bytes32[]","name":"keys","indexed":false},{"type":"uint256[]","name":"prices","indexed":false}],"anonymous":false},{"type":"event","name":"SetDebtClean","inputs":[{"type":"bytes32","name":"id","indexed":true},{"type":"bool","name":"isDebtClean","indexed":false}],"anonymous":false},{"type":"event","name":"SetStoremanGroupConfig","inputs":[{"type":"bytes32","name":"id","indexed":true},{"type":"uint8","name":"status","indexed":false},{"type":"uint256","name":"deposit","indexed":false},{"type":"uint256[2]","name":"chain","indexed":false},{"type":"uint256[2]","name":"curve","indexed":false},{"type":"bytes","name":"gpk1","indexed":false},{"type":"bytes","name":"gpk2","indexed":false},{"type":"uint256","name":"startTime","indexed":false},{"type":"uint256","name":"endTime","indexed":false}],"anonymous":false},{"type":"event","name":"SetStoremanGroupStatus","inputs":[{"type":"bytes32","name":"id","indexed":true},{"type":"uint8","name":"status","indexed":false}],"anonymous":false},{"type":"event","name":"UpdateDeposit","inputs":[{"type":"bytes32","name":"id","indexed":true},{"type":"uint256","name":"deposit","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false}]
Contract Creation Code
0x608060405260088054600160a060020a03191633179055611432806100256000396000f30060806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631b0522e8811461012157806344cefb69146101915780634af72234146102d45780634fb2e45d146103f75780635d8026c51461041a578063660b3439146104465780636984394014610490578063704b6c02146104ba578063715018a6146104db57806379ba5097146104f05780637a86983f146105055780637cf0f5cd1461051d5780638da5cb5b1461053a57806395e8d68a1461056b578063a6f9dae1146105a5578063b2bffcc3146105c6578063ba54a0e8146105f2578063d4ee1d901461060a578063e516ce691461061f578063ea872e1d1461063d578063f851a44014610658575b600080fd5b34801561012d57600080fd5b50610141600480356024810191013561066d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561017d578181015183820152602001610165565b505050509050019250505060405180910390f35b34801561019d57600080fd5b506101a96004356106ff565b604051808c600019166000191681526020018b60ff1660ff1681526020018a81526020018981526020018881526020018781526020018681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b8381101561022e578181015183820152602001610216565b50505050905090810190601f16801561025b5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b3480156102e057600080fd5b506102ec6004356108a3565b6040518088815260200180602001806020018781526020018681526020018560ff1660ff16815260200184151515158152602001838103835289818151815260200191508051906020019080838360005b8381101561035557818101518382015260200161033d565b50505050905090810190601f1680156103825780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b838110156103b557818101518382015260200161039d565b50505050905090810190601f1680156103e25780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561040357600080fd5b50610418600160a060020a03600435166109fb565b005b34801561042657600080fd5b50610432600435610b14565b604080519115158252519081900360200190f35b34801561045257600080fd5b5061041860048035906024803560ff16916044359160649160a49160e435808201929081013591610104359081019101356101243561014435610b31565b34801561049c57600080fd5b506104a8600435610cf0565b60408051918252519081900360200190f35b3480156104c657600080fd5b50610418600160a060020a0360043516610d02565b3480156104e757600080fd5b50610418610db3565b3480156104fc57600080fd5b50610418610e22565b34801561051157600080fd5b506104a8600435610e67565b34801561052957600080fd5b506104186004356024351515610e79565b34801561054657600080fd5b5061054f610f42565b60408051600160a060020a039092168252519081900360200190f35b34801561057757600080fd5b50610583600435610f51565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156105b157600080fd5b50610418600160a060020a0360043516610f77565b3480156105d257600080fd5b506104186024600480358281019290820135918135918201910135610ff6565b3480156105fe57600080fd5b506104a8600435611187565b34801561061657600080fd5b5061054f611199565b34801561062b57600080fd5b5061041860043560ff602435166111a8565b34801561064957600080fd5b5061041860043560243561126a565b34801561066457600080fd5b5061054f61131c565b606060008383905060405190808252806020026020018201604052801561069e578160200160208202803883390190505b509150600090505b828110156106f857600560008585848181106106be57fe5b602090810292909201358352508101919091526040016000205482518390839081106106e657fe5b602090810290910101526001016106a6565b5092915050565b60008181526006602090815260408083206009810154815460018084015460028086015460038701546004880154600590980180548a516000199782161561010002979097011693909304601f81018b90048b0286018b019099528885528b9a60ff909716999598939791969095919460609485949293849391908301828280156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b50505060008f8152600660208181526040928390209091018054835160026000196001841615610100020190921691909104601f810184900484028201840190945283815295995093509091508301828280156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b50505060009e8f52505060066020526040909c2060078101546008909101549b9d9a9c999b989a9799969895979496959094909350915050565b60066020908152600091825260409182902080546005820180548551601f60026000196101006001861615020190931692909204918201869004860281018601909652808652919492939091908301828280156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505060068301805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529495949350908301828280156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b50505050600783015460088401546009909401549293909290915060ff8082169161010090041687565b600854600160a060020a03163314610a4b576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b600160a060020a0381161515610aab576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b600854604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600090815260066020526040902060090154610100900460ff1690565b600754600160a060020a0316331480610b545750600854600160a060020a031633145b1515610b98576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b60008b81526006602090815260409091208a815560098101805460ff191660ff8e161790558935600182015589820135600282015588356003820155908801356004820155610beb90600501878761132b565b5060008b8152600660208190526040909120610c099101858561132b565b5060008b81526006602090815260409182902060078101859055600801839055815160ff8d1681529081018b90528c917f6c630ca4148e623628a03dca265004956b6e5f8780dd60718411c8aaaa9a5c4b918d918d918d918d918d918d918d918d918d918d9190818101908a90808284379091019050886040808284378201915050806020018060200185815260200184815260200183810383528989828181526020019250808284379091018481038352878152602001905087878082843760405192018290039e50909c50505050505050505050505050a25050505050505050505050565b60009081526005602052604090205490565b600854600160a060020a03163314610d52576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b60078054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19181900360200190a150565b600854600160a060020a03163314610e03576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff19169055565b600954600160a060020a0316331415610e65576009546008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b60009081526006602052604090205490565b600754600160a060020a0316331480610e9c5750600854600160a060020a031633145b1515610ee0576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b600082815260066020908152604091829020600901805461ff001916610100851515908102919091179091558251908152915184927fd8d967123b353fe621f065bf16a92912d1b28f5ca3202cba95e6962f7fe83ff892908290030190a25050565b600854600160a060020a031681565b60009081526006602052604090206009810154600782015460089092015460ff90911692565b600854600160a060020a03163314610fc7576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600090600160a060020a031633148061101c5750600854600160a060020a031633145b1515611060576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b8382146110b7576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206e6f742073616d650000000000000000000000000000000000604482015290519081900360640190fd5b5060005b8381101561110a578282828181106110cf57fe5b905060200201356005600087878581811015156110e857fe5b60209081029290920135835250810191909152604001600020556001016110bb565b7f6e65233ef2c857cd6bc5a40c516989c41a667fd5e3c0fa73e02414d179375216858585856040518080602001806020018381038352878782818152602001925060200280828437909101848103835285815260209081019150869086028082843760405192018290039850909650505050505050a15050505050565b60056020526000908152604090205481565b600954600160a060020a031681565b600754600160a060020a03163314806111cb5750600854600160a060020a031633145b151561120f576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b600082815260066020908152604091829020600901805460ff191660ff85169081179091558251908152915184927f444e160ab68acf79ea04c1b91f81237ea93afab2cdadfc4086e5ce5e93baeb2b92908290030190a25050565b600754600160a060020a031633148061128d5750600854600160a060020a031633145b15156112d1576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b6000828152600660209081526040918290208390558151838152915184927f50d6929552e90ba7b4193a743fc16c69e74fae125629e0957d1ed0c31627ae9d92908290030190a25050565b600754600160a060020a031681565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061136c5782800160ff19823516178555611399565b82800160010185558215611399579182015b8281111561139957823582559160200191906001019061137e565b506113a59291506113a9565b5090565b6113c391905b808211156113a557600081556001016113af565b9056004e6f74206f776e657200000000000000000000000000000000000000000000006e6f742061646d696e0000000000000000000000000000000000000000000000a165627a7a723058204d93cfff25563d1b444aae185221fc10f09fd4e1f0ab3764b024d2e7eb42c2370029
Deployed ByteCode
0x60806040526004361061011c5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631b0522e8811461012157806344cefb69146101915780634af72234146102d45780634fb2e45d146103f75780635d8026c51461041a578063660b3439146104465780636984394014610490578063704b6c02146104ba578063715018a6146104db57806379ba5097146104f05780637a86983f146105055780637cf0f5cd1461051d5780638da5cb5b1461053a57806395e8d68a1461056b578063a6f9dae1146105a5578063b2bffcc3146105c6578063ba54a0e8146105f2578063d4ee1d901461060a578063e516ce691461061f578063ea872e1d1461063d578063f851a44014610658575b600080fd5b34801561012d57600080fd5b50610141600480356024810191013561066d565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561017d578181015183820152602001610165565b505050509050019250505060405180910390f35b34801561019d57600080fd5b506101a96004356106ff565b604051808c600019166000191681526020018b60ff1660ff1681526020018a81526020018981526020018881526020018781526020018681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b8381101561022e578181015183820152602001610216565b50505050905090810190601f16801561025b5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561028e578181015183820152602001610276565b50505050905090810190601f1680156102bb5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b3480156102e057600080fd5b506102ec6004356108a3565b6040518088815260200180602001806020018781526020018681526020018560ff1660ff16815260200184151515158152602001838103835289818151815260200191508051906020019080838360005b8381101561035557818101518382015260200161033d565b50505050905090810190601f1680156103825780820380516001836020036101000a031916815260200191505b5083810382528851815288516020918201918a019080838360005b838110156103b557818101518382015260200161039d565b50505050905090810190601f1680156103e25780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561040357600080fd5b50610418600160a060020a03600435166109fb565b005b34801561042657600080fd5b50610432600435610b14565b604080519115158252519081900360200190f35b34801561045257600080fd5b5061041860048035906024803560ff16916044359160649160a49160e435808201929081013591610104359081019101356101243561014435610b31565b34801561049c57600080fd5b506104a8600435610cf0565b60408051918252519081900360200190f35b3480156104c657600080fd5b50610418600160a060020a0360043516610d02565b3480156104e757600080fd5b50610418610db3565b3480156104fc57600080fd5b50610418610e22565b34801561051157600080fd5b506104a8600435610e67565b34801561052957600080fd5b506104186004356024351515610e79565b34801561054657600080fd5b5061054f610f42565b60408051600160a060020a039092168252519081900360200190f35b34801561057757600080fd5b50610583600435610f51565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156105b157600080fd5b50610418600160a060020a0360043516610f77565b3480156105d257600080fd5b506104186024600480358281019290820135918135918201910135610ff6565b3480156105fe57600080fd5b506104a8600435611187565b34801561061657600080fd5b5061054f611199565b34801561062b57600080fd5b5061041860043560ff602435166111a8565b34801561064957600080fd5b5061041860043560243561126a565b34801561066457600080fd5b5061054f61131c565b606060008383905060405190808252806020026020018201604052801561069e578160200160208202803883390190505b509150600090505b828110156106f857600560008585848181106106be57fe5b602090810292909201358352508101919091526040016000205482518390839081106106e657fe5b602090810290910101526001016106a6565b5092915050565b60008181526006602090815260408083206009810154815460018084015460028086015460038701546004880154600590980180548a516000199782161561010002979097011693909304601f81018b90048b0286018b019099528885528b9a60ff909716999598939791969095919460609485949293849391908301828280156107cb5780601f106107a0576101008083540402835291602001916107cb565b820191906000526020600020905b8154815290600101906020018083116107ae57829003601f168201915b50505060008f8152600660208181526040928390209091018054835160026000196001841615610100020190921691909104601f810184900484028201840190945283815295995093509091508301828280156108695780601f1061083e57610100808354040283529160200191610869565b820191906000526020600020905b81548152906001019060200180831161084c57829003601f168201915b50505060009e8f52505060066020526040909c2060078101546008909101549b9d9a9c999b989a9799969895979496959094909350915050565b60066020908152600091825260409182902080546005820180548551601f60026000196101006001861615020190931692909204918201869004860281018601909652808652919492939091908301828280156109415780601f1061091657610100808354040283529160200191610941565b820191906000526020600020905b81548152906001019060200180831161092457829003601f168201915b5050505060068301805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529495949350908301828280156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b50505050600783015460088401546009909401549293909290915060ff8082169161010090041687565b600854600160a060020a03163314610a4b576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b600160a060020a0381161515610aab576040805160e560020a62461bcd02815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b600854604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600090815260066020526040902060090154610100900460ff1690565b600754600160a060020a0316331480610b545750600854600160a060020a031633145b1515610b98576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b60008b81526006602090815260409091208a815560098101805460ff191660ff8e161790558935600182015589820135600282015588356003820155908801356004820155610beb90600501878761132b565b5060008b8152600660208190526040909120610c099101858561132b565b5060008b81526006602090815260409182902060078101859055600801839055815160ff8d1681529081018b90528c917f6c630ca4148e623628a03dca265004956b6e5f8780dd60718411c8aaaa9a5c4b918d918d918d918d918d918d918d918d918d918d9190818101908a90808284379091019050886040808284378201915050806020018060200185815260200184815260200183810383528989828181526020019250808284379091018481038352878152602001905087878082843760405192018290039e50909c50505050505050505050505050a25050505050505050505050565b60009081526005602052604090205490565b600854600160a060020a03163314610d52576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b60078054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a19181900360200190a150565b600854600160a060020a03163314610e03576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b6008805473ffffffffffffffffffffffffffffffffffffffff19169055565b600954600160a060020a0316331415610e65576009546008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b60009081526006602052604090205490565b600754600160a060020a0316331480610e9c5750600854600160a060020a031633145b1515610ee0576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b600082815260066020908152604091829020600901805461ff001916610100851515908102919091179091558251908152915184927fd8d967123b353fe621f065bf16a92912d1b28f5ca3202cba95e6962f7fe83ff892908290030190a25050565b600854600160a060020a031681565b60009081526006602052604090206009810154600782015460089092015460ff90911692565b600854600160a060020a03163314610fc7576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113c7833981519152604482015290519081900360640190fd5b6009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600754600090600160a060020a031633148061101c5750600854600160a060020a031633145b1515611060576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b8382146110b7576040805160e560020a62461bcd02815260206004820152600f60248201527f6c656e677468206e6f742073616d650000000000000000000000000000000000604482015290519081900360640190fd5b5060005b8381101561110a578282828181106110cf57fe5b905060200201356005600087878581811015156110e857fe5b60209081029290920135835250810191909152604001600020556001016110bb565b7f6e65233ef2c857cd6bc5a40c516989c41a667fd5e3c0fa73e02414d179375216858585856040518080602001806020018381038352878782818152602001925060200280828437909101848103835285815260209081019150869086028082843760405192018290039850909650505050505050a15050505050565b60056020526000908152604090205481565b600954600160a060020a031681565b600754600160a060020a03163314806111cb5750600854600160a060020a031633145b151561120f576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b600082815260066020908152604091829020600901805460ff191660ff85169081179091558251908152915184927f444e160ab68acf79ea04c1b91f81237ea93afab2cdadfc4086e5ce5e93baeb2b92908290030190a25050565b600754600160a060020a031633148061128d5750600854600160a060020a031633145b15156112d1576040805160e560020a62461bcd02815260206004820152600960248201526000805160206113e7833981519152604482015290519081900360640190fd5b6000828152600660209081526040918290208390558151838152915184927f50d6929552e90ba7b4193a743fc16c69e74fae125629e0957d1ed0c31627ae9d92908290030190a25050565b600754600160a060020a031681565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061136c5782800160ff19823516178555611399565b82800160010185558215611399579182015b8281111561139957823582559160200191906001019061137e565b506113a59291506113a9565b5090565b6113c391905b808211156113a557600081556001016113af565b9056004e6f74206f776e657200000000000000000000000000000000000000000000006e6f742061646d696e0000000000000000000000000000000000000000000000a165627a7a723058204d93cfff25563d1b444aae185221fc10f09fd4e1f0ab3764b024d2e7eb42c2370029