Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
11197217 | 1550 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Tranche
Compiler Version
v0.5.15+commit.6a57276f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-10 */ // Verified using https://dapp.tools // hevm: flattened sources of src/lender/tranche.sol pragma solidity >=0.5.15 >=0.5.15 <0.6.0; pragma experimental ABIEncoderV2; ////// lib/tinlake-auth/lib/ds-note/src/note.sol /// note.sol -- the `note' modifier, for logging calls as events // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. /* pragma solidity >=0.5.15; */ contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint256 wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; uint256 wad; assembly { foo := calldataload(4) bar := calldataload(36) wad := callvalue() } _; emit LogNote(msg.sig, msg.sender, foo, bar, wad, msg.data); } } ////// lib/tinlake-auth/src/auth.sol // Copyright (C) Centrifuge 2020, based on MakerDAO dss https://github.com/makerdao/dss // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. /* pragma solidity >=0.5.15 <0.6.0; */ /* import "ds-note/note.sol"; */ contract Auth is DSNote { mapping (address => uint) public wards; function rely(address usr) public auth note { wards[usr] = 1; } function deny(address usr) public auth note { wards[usr] = 0; } modifier auth { require(wards[msg.sender] == 1); _; } } ////// lib/tinlake-math/src/math.sol // Copyright (C) 2018 Rain <[email protected]> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. /* pragma solidity >=0.5.15 <0.6.0; */ contract Math { uint256 constant ONE = 10 ** 27; function safeAdd(uint x, uint y) public pure returns (uint z) { require((z = x + y) >= x, "safe-add-failed"); } function safeSub(uint x, uint y) public pure returns (uint z) { require((z = x - y) <= x, "safe-sub-failed"); } function safeMul(uint x, uint y) public pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "safe-mul-failed"); } function safeDiv(uint x, uint y) public pure returns (uint z) { z = x / y; } function rmul(uint x, uint y) public pure returns (uint z) { z = safeMul(x, y) / ONE; } function rdiv(uint x, uint y) public pure returns (uint z) { require(y > 0, "division by zero"); z = safeAdd(safeMul(x, ONE), y / 2) / y; } function rdivup(uint x, uint y) internal pure returns (uint z) { require(y > 0, "division by zero"); // always rounds up z = safeAdd(safeMul(x, ONE), safeSub(y, 1)) / y; } } ////// src/fixed_point.sol // Copyright (C) 2020 Centrifuge // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. /* pragma solidity >=0.5.15 <0.6.0; */ contract FixedPoint { struct Fixed27 { uint value; } } ////// src/lender/tranche.sol // Copyright (C) 2020 Centrifuge // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. /* pragma solidity >=0.5.15 <0.6.0; */ /* pragma experimental ABIEncoderV2; */ /* import "tinlake-auth/auth.sol"; */ /* import "tinlake-math/math.sol"; */ /* import "./../fixed_point.sol"; */ interface ERC20Like_2 { function balanceOf(address) external view returns (uint); function transferFrom(address, address, uint) external returns (bool); function mint(address, uint) external; function burn(address, uint) external; function totalSupply() external view returns (uint); function approve(address usr, uint amount) external; } interface ReserveLike_3 { function deposit(uint amount) external; function payout(uint amount) external; function totalBalance() external returns (uint); } interface EpochTickerLike { function currentEpoch() external view returns (uint); function lastEpochExecuted() external view returns(uint); } contract Tranche is Math, Auth, FixedPoint { mapping(uint => Epoch) public epochs; struct Epoch { // denominated in 10^27 // percentage ONE == 100% Fixed27 redeemFulfillment; // denominated in 10^27 // percentage ONE == 100% Fixed27 supplyFulfillment; // tokenPrice after end of epoch Fixed27 tokenPrice; } struct UserOrder { uint orderedInEpoch; uint supplyCurrencyAmount; uint redeemTokenAmount; } mapping(address => UserOrder) public users; uint public totalSupply; uint public totalRedeem; ERC20Like_2 public currency; ERC20Like_2 public token; ReserveLike_3 public reserve; EpochTickerLike public epochTicker; address self; bool public waitingForUpdate = false; modifier orderAllowed(address usr) { require((users[usr].supplyCurrencyAmount == 0 && users[usr].redeemTokenAmount == 0) || users[usr].orderedInEpoch == epochTicker.currentEpoch(), "disburse required"); _; } constructor(address currency_, address token_) public { wards[msg.sender] = 1; token = ERC20Like_2(token_); currency = ERC20Like_2(currency_); self = address(this); } function balance() external view returns (uint) { return currency.balanceOf(self); } function tokenSupply() external view returns (uint) { return token.totalSupply(); } function depend(bytes32 contractName, address addr) public auth { if (contractName == "token") {token = ERC20Like_2(addr);} else if (contractName == "currency") {currency = ERC20Like_2(addr);} else if (contractName == "reserve") {reserve = ReserveLike_3(addr);} else if (contractName == "epochTicker") {epochTicker = EpochTickerLike(addr);} else revert(); } // supplyOrder function can be used to place or revoke an supply function supplyOrder(address usr, uint newSupplyAmount) public auth orderAllowed(usr) { users[usr].orderedInEpoch = epochTicker.currentEpoch(); uint currentSupplyAmount = users[usr].supplyCurrencyAmount; users[usr].supplyCurrencyAmount = newSupplyAmount; totalSupply = safeAdd(safeTotalSub(totalSupply, currentSupplyAmount), newSupplyAmount); if (newSupplyAmount > currentSupplyAmount) { uint delta = safeSub(newSupplyAmount, currentSupplyAmount); require(currency.transferFrom(usr, self, delta), "currency-transfer-failed"); return; } uint delta = safeSub(currentSupplyAmount, newSupplyAmount); if (delta > 0) { _safeTransfer(currency, usr, delta); } } // redeemOrder function can be used to place or revoke a redeem function redeemOrder(address usr, uint newRedeemAmount) public auth orderAllowed(usr) { users[usr].orderedInEpoch = epochTicker.currentEpoch(); uint currentRedeemAmount = users[usr].redeemTokenAmount; users[usr].redeemTokenAmount = newRedeemAmount; totalRedeem = safeAdd(safeTotalSub(totalRedeem, currentRedeemAmount), newRedeemAmount); if (newRedeemAmount > currentRedeemAmount) { uint delta = safeSub(newRedeemAmount, currentRedeemAmount); require(token.transferFrom(usr, self, delta), "token-transfer-failed"); return; } uint delta = safeSub(currentRedeemAmount, newRedeemAmount); if (delta > 0) { _safeTransfer(token, usr, delta); } } function calcDisburse(address usr) public view returns(uint payoutCurrencyAmount, uint payoutTokenAmount, uint remainingSupplyCurrency, uint remainingRedeemToken) { return calcDisburse(usr, epochTicker.lastEpochExecuted()); } /// calculates the current disburse of a user starting from the ordered epoch until endEpoch function calcDisburse(address usr, uint endEpoch) public view returns(uint payoutCurrencyAmount, uint payoutTokenAmount, uint remainingSupplyCurrency, uint remainingRedeemToken) { uint epochIdx = users[usr].orderedInEpoch; uint lastEpochExecuted = epochTicker.lastEpochExecuted(); // no disburse possible in this epoch if (users[usr].orderedInEpoch == epochTicker.currentEpoch()) { return (payoutCurrencyAmount, payoutTokenAmount, users[usr].supplyCurrencyAmount, users[usr].redeemTokenAmount); } if (endEpoch > lastEpochExecuted) { // it is only possible to disburse epochs which are already over endEpoch = lastEpochExecuted; } remainingSupplyCurrency = users[usr].supplyCurrencyAmount; remainingRedeemToken = users[usr].redeemTokenAmount; uint amount = 0; // calculates disburse amounts as long as remaining tokens or currency is left or the end epoch is reached while(epochIdx <= endEpoch && (remainingSupplyCurrency != 0 || remainingRedeemToken != 0 )){ if(remainingSupplyCurrency != 0) { amount = rmul(remainingSupplyCurrency, epochs[epochIdx].supplyFulfillment.value); // supply currency payout in token if (amount != 0) { payoutTokenAmount = safeAdd(payoutTokenAmount, safeDiv(safeMul(amount, ONE), epochs[epochIdx].tokenPrice.value)); remainingSupplyCurrency = safeSub(remainingSupplyCurrency, amount); } } if(remainingRedeemToken != 0) { amount = rmul(remainingRedeemToken, epochs[epochIdx].redeemFulfillment.value); // redeem token payout in currency if (amount != 0) { payoutCurrencyAmount = safeAdd(payoutCurrencyAmount, rmul(amount, epochs[epochIdx].tokenPrice.value)); remainingRedeemToken = safeSub(remainingRedeemToken, amount); } } epochIdx = safeAdd(epochIdx, 1); } return (payoutCurrencyAmount, payoutTokenAmount, remainingSupplyCurrency, remainingRedeemToken); } // the disburse function can be used after an epoch is over to receive currency and tokens function disburse(address usr) public auth returns (uint payoutCurrencyAmount, uint payoutTokenAmount, uint remainingSupplyCurrency, uint remainingRedeemToken) { return disburse(usr, epochTicker.lastEpochExecuted()); } function _safeTransfer(ERC20Like_2 erc20, address usr, uint amount) internal { uint max = erc20.balanceOf(self); if(amount > max) { amount = max; } require(erc20.transferFrom(self, usr, amount), "token-transfer-failed"); } // the disburse function can be used after an epoch is over to receive currency and tokens function disburse(address usr, uint endEpoch) public auth returns (uint payoutCurrencyAmount, uint payoutTokenAmount, uint remainingSupplyCurrency, uint remainingRedeemToken) { require(users[usr].orderedInEpoch <= epochTicker.lastEpochExecuted(), "epoch-not-executed-yet"); uint lastEpochExecuted = epochTicker.lastEpochExecuted(); if (endEpoch > lastEpochExecuted) { // it is only possible to disburse epochs which are already over endEpoch = lastEpochExecuted; } (payoutCurrencyAmount, payoutTokenAmount, remainingSupplyCurrency, remainingRedeemToken) = calcDisburse(usr, endEpoch); users[usr].supplyCurrencyAmount = remainingSupplyCurrency; users[usr].redeemTokenAmount = remainingRedeemToken; // if lastEpochExecuted is disbursed, orderInEpoch is at the current epoch again // which allows to change the order. This is only possible if all previous epochs are disbursed users[usr].orderedInEpoch = safeAdd(endEpoch, 1); if (payoutCurrencyAmount > 0) { _safeTransfer(currency, usr, payoutCurrencyAmount); } if (payoutTokenAmount > 0) { _safeTransfer(token, usr, payoutTokenAmount); } return (payoutCurrencyAmount, payoutTokenAmount, remainingSupplyCurrency, remainingRedeemToken); } // called by epoch coordinator in epoch execute method function epochUpdate(uint epochID, uint supplyFulfillment_, uint redeemFulfillment_, uint tokenPrice_, uint epochSupplyOrderCurrency, uint epochRedeemOrderCurrency) public auth { require(waitingForUpdate == true); waitingForUpdate = false; epochs[epochID].supplyFulfillment.value = supplyFulfillment_; epochs[epochID].redeemFulfillment.value = redeemFulfillment_; epochs[epochID].tokenPrice.value = tokenPrice_; // currency needs to be converted to tokenAmount with current token price uint redeemInToken = 0; uint supplyInToken = 0; if(tokenPrice_ > 0) { supplyInToken = rdiv(epochSupplyOrderCurrency, tokenPrice_); redeemInToken = safeDiv(safeMul(epochRedeemOrderCurrency, ONE), tokenPrice_); } // calculates the delta between supply and redeem for tokens and burn or mint them adjustTokenBalance(epochID, supplyInToken, redeemInToken); // calculates the delta between supply and redeem for currency and deposit or get them from the reserve adjustCurrencyBalance(epochID, epochSupplyOrderCurrency, epochRedeemOrderCurrency); // the unfulfilled orders (1-fulfillment) is automatically ordered totalSupply = safeAdd(safeTotalSub(totalSupply, epochSupplyOrderCurrency), rmul(epochSupplyOrderCurrency, safeSub(ONE, epochs[epochID].supplyFulfillment.value))); totalRedeem = safeAdd(safeTotalSub(totalRedeem, redeemInToken), rmul(redeemInToken, safeSub(ONE, epochs[epochID].redeemFulfillment.value))); } function closeEpoch() public auth returns (uint totalSupplyCurrency_, uint totalRedeemToken_) { require(waitingForUpdate == false); waitingForUpdate = true; return (totalSupply, totalRedeem); } function safeBurn(uint tokenAmount) internal { uint max = token.balanceOf(self); if(tokenAmount > max) { tokenAmount = max; } token.burn(self, tokenAmount); } function safePayout(uint currencyAmount) internal { uint max = reserve.totalBalance(); if(currencyAmount > max) { currencyAmount = max; } reserve.payout(currencyAmount); } // adjust token balance after epoch execution -> min/burn tokens function adjustTokenBalance(uint epochID, uint epochSupplyToken, uint epochRedeemToken) internal { // mint token amount for supply uint mintAmount = 0; if (epochs[epochID].tokenPrice.value > 0) { mintAmount = rmul(epochSupplyToken, epochs[epochID].supplyFulfillment.value); } // burn token amount for redeem uint burnAmount = rmul(epochRedeemToken, epochs[epochID].redeemFulfillment.value); // burn tokens that are not needed for disbursement if (burnAmount > mintAmount) { uint diff = safeSub(burnAmount, mintAmount); safeBurn(diff); return; } // mint tokens that are required for disbursement uint diff = safeSub(mintAmount, burnAmount); if (diff > 0) { token.mint(self, diff); } } // additional minting of tokens produces a dilution of all token holders // interface is required for adapters function mint(address usr, uint amount) public auth { token.mint(usr, amount); } // adjust currency balance after epoch execution -> receive/send currency from/to reserve function adjustCurrencyBalance(uint epochID, uint epochSupply, uint epochRedeem) internal { // currency that was supplied in this epoch uint currencySupplied = rmul(epochSupply, epochs[epochID].supplyFulfillment.value); // currency required for redemption uint currencyRequired = rmul(epochRedeem, epochs[epochID].redeemFulfillment.value); if (currencySupplied > currencyRequired) { // send surplus currency to reserve uint diff = safeSub(currencySupplied, currencyRequired); currency.approve(address(reserve), diff); reserve.deposit(diff); return; } uint diff = safeSub(currencyRequired, currencySupplied); if (diff > 0) { // get missing currency from reserve safePayout(diff); } } // recovery transfer can be used by governance to recover funds if tokens are stuck function authTransfer(address erc20, address usr, uint amount) public auth { ERC20Like_2(erc20).transferFrom(self, usr, amount); } // due to rounding in token & currency conversions currency & token balances might be off by 1 wei with the totalSupply/totalRedeem amounts. // in order to prevent an underflow error, 0 is returned when amount to be subtracted is bigger then the total value. function safeTotalSub(uint total, uint amount) internal returns (uint) { if (total < amount) { return 0; } return safeSub(total, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"currency_","type":"address"},{"internalType":"address","name":"token_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":true,"inputs":[{"indexed":true,"internalType":"bytes4","name":"sig","type":"bytes4"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":true,"internalType":"bytes32","name":"foo","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"bar","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"fax","type":"bytes"}],"name":"LogNote","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"erc20","type":"address"},{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"authTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"calcDisburse","outputs":[{"internalType":"uint256","name":"payoutCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"payoutTokenAmount","type":"uint256"},{"internalType":"uint256","name":"remainingSupplyCurrency","type":"uint256"},{"internalType":"uint256","name":"remainingRedeemToken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"endEpoch","type":"uint256"}],"name":"calcDisburse","outputs":[{"internalType":"uint256","name":"payoutCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"payoutTokenAmount","type":"uint256"},{"internalType":"uint256","name":"remainingSupplyCurrency","type":"uint256"},{"internalType":"uint256","name":"remainingRedeemToken","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeEpoch","outputs":[{"internalType":"uint256","name":"totalSupplyCurrency_","type":"uint256"},{"internalType":"uint256","name":"totalRedeemToken_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currency","outputs":[{"internalType":"contract ERC20Like_2","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"contractName","type":"bytes32"},{"internalType":"address","name":"addr","type":"address"}],"name":"depend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"disburse","outputs":[{"internalType":"uint256","name":"payoutCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"payoutTokenAmount","type":"uint256"},{"internalType":"uint256","name":"remainingSupplyCurrency","type":"uint256"},{"internalType":"uint256","name":"remainingRedeemToken","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"endEpoch","type":"uint256"}],"name":"disburse","outputs":[{"internalType":"uint256","name":"payoutCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"payoutTokenAmount","type":"uint256"},{"internalType":"uint256","name":"remainingSupplyCurrency","type":"uint256"},{"internalType":"uint256","name":"remainingRedeemToken","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"epochTicker","outputs":[{"internalType":"contract EpochTickerLike","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"epochID","type":"uint256"},{"internalType":"uint256","name":"supplyFulfillment_","type":"uint256"},{"internalType":"uint256","name":"redeemFulfillment_","type":"uint256"},{"internalType":"uint256","name":"tokenPrice_","type":"uint256"},{"internalType":"uint256","name":"epochSupplyOrderCurrency","type":"uint256"},{"internalType":"uint256","name":"epochRedeemOrderCurrency","type":"uint256"}],"name":"epochUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"epochs","outputs":[{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct FixedPoint.Fixed27","name":"redeemFulfillment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct FixedPoint.Fixed27","name":"supplyFulfillment","type":"tuple"},{"components":[{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct FixedPoint.Fixed27","name":"tokenPrice","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rdiv","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"newRedeemAmount","type":"uint256"}],"name":"redeemOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reserve","outputs":[{"internalType":"contract ReserveLike_3","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"rmul","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeAdd","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeDiv","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeMul","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"safeSub","outputs":[{"internalType":"uint256","name":"z","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"newSupplyAmount","type":"uint256"}],"name":"supplyOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"contract ERC20Like_2","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"orderedInEpoch","type":"uint256"},{"internalType":"uint256","name":"supplyCurrencyAmount","type":"uint256"},{"internalType":"uint256","name":"redeemTokenAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"waitingForUpdate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600960146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162003b9938038062003b99833981810160405262000052919081019062000178565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555030600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000207565b6000815190506200017281620001ed565b92915050565b600080604083850312156200018c57600080fd5b60006200019c8582860162000161565b9250506020620001af8582860162000161565b9150509250929050565b6000620001c682620001cd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620001f881620001b9565b81146200020457600080fd5b50565b61398280620002176000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80639adc339d1161010f578063cd3293de116100a2578063e6cb901311610071578063e6cb9013146105d8578063ed12a99c14610608578063f5a09bb414610626578063fc0c546a14610659576101e5565b8063cd3293de1461054d578063cdd5f2c81461056b578063d05c78da1461058a578063e5a6b10f146105ba576101e5565b8063b5931f7c116100de578063b5931f7c1461049d578063b69ef8a8146104cd578063bf353dbb146104eb578063c6b61e4c1461051b576101e5565b80639adc339d146104035780639c52a7f11461041f578063a293d1e81461043b578063a87430ba1461046b576101e5565b806367457022116101875780637824407f116101565780637824407f146103785780637f3bd56e146103965780638be03ca1146103c95780638d060dfa146103e5576101e5565b806367457022146102dd57806369c7a0511461030d57806373cd07831461034057806374299b5a1461035c576101e5565b80631c8ce890116101c35780631c8ce890146102565780632edd29761461028957806340c10f19146102a557806365fae35e146102c1576101e5565b8063078c74c3146101ea5780630e2286d31461020857806318160ddd14610238575b600080fd5b6101f2610677565b6040516101ff91906136f1565b60405180910390f35b610222600480360361021d919081019061315c565b61067d565b60405161022f91906136f1565b60405180910390f35b6102406106fb565b60405161024d91906136f1565b60405180910390f35b610270600480360361026b9190810190612ff1565b610701565b604051610280949392919061379e565b60405180910390f35b6102a3600480360361029e9190810190613069565b61080a565b005b6102bf60048036036102ba9190810190613069565b610d1f565b005b6102db60048036036102d69190810190612ff1565b610dfd565b005b6102f760048036036102f2919081019061315c565b610f1c565b60405161030491906136f1565b60405180910390f35b61032760048036036103229190810190612ff1565b610f45565b604051610337949392919061379e565b60405180910390f35b61035a6004803603610355919081019061301a565b611003565b005b61037660048036036103719190810190613069565b611105565b005b61038061161a565b60405161038d91906136f1565b60405180910390f35b6103b060048036036103ab9190810190613069565b6116c1565b6040516103c0949392919061379e565b60405180910390f35b6103e360048036036103de9190810190613198565b611a63565b005b6103ed611c48565b6040516103fa919061354e565b60405180910390f35b61041d600480360361041891908101906130ce565b611c5b565b005b61043960048036036104349190810190612ff1565b611e6a565b005b6104556004803603610450919081019061315c565b611f89565b60405161046291906136f1565b60405180910390f35b61048560048036036104809190810190612ff1565b611fd9565b60405161049493929190613767565b60405180910390f35b6104b760048036036104b2919081019061315c565b612003565b6040516104c491906136f1565b60405180910390f35b6104d5612017565b6040516104e291906136f1565b60405180910390f35b61050560048036036105009190810190612ff1565b6120eb565b60405161051291906136f1565b60405180910390f35b6105356004803603610530919081019061310a565b612103565b604051610544939291906136ba565b60405180910390f35b610555612169565b604051610562919061359f565b60405180910390f35b61057361218f565b60405161058192919061373e565b60405180910390f35b6105a4600480360361059f919081019061315c565b612226565b6040516105b191906136f1565b60405180910390f35b6105c2612288565b6040516105cf9190613569565b60405180910390f35b6105f260048036036105ed919081019061315c565b6122ae565b6040516105ff91906136f1565b60405180910390f35b6106106122fe565b60405161061d9190613584565b60405180910390f35b610640600480360361063b9190810190613069565b612324565b604051610650949392919061379e565b60405180910390f35b610661612775565b60405161066e9190613569565b60405180910390f35b60045481565b60008082116106c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b89061367a565b60405180910390fd5b816106eb6106db856b033b2e3c9fd0803ce8000000612226565b600285816106e557fe5b046122ae565b816106f257fe5b04905092915050565b60035481565b60008060008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461075257600080fd5b6107fb85600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156107be57600080fd5b505afa1580156107d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107f69190810190613133565b6116c1565b93509350935093509193509193565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461085557600080fd5b816000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541480156108ea57506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b806109d55750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561095857600080fd5b505afa15801561096c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109909190810190613133565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b906135da565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7c57600080fd5b505afa158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ab49190810190613133565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610b9d610b976004548361279b565b846122ae565b60048190555080831115610cd2576000610bb78483611f89565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd86600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401610c3a939291906134ee565b602060405180830381600087803b158015610c5457600080fd5b505af1158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8c91908101906130a5565b610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc2906135ba565b60405180910390fd5b5050610d1a565b6000610cde8285611f89565b90506000811115610d1757610d16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686836127c1565b5b50505b505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d6a57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401610dc7929190613525565b600060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e4857600080fd5b60008060006004359250602435915034905060016000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684600036604051610f0e9392919061370c565b60405180910390a450505050565b60006b033b2e3c9fd0803ce8000000610f358484612226565b81610f3c57fe5b04905092915050565b600080600080610ff485600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b158015610fb757600080fd5b505afa158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fef9190810190613133565b612324565b93509350935093509193509193565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461104e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518463ffffffff1660e01b81526004016110ad939291906134ee565b602060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110ff91908101906130a5565b50505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461115057600080fd5b816000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541480156111e557506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b806112d05750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561125357600080fd5b505afa158015611267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061128b9190810190613133565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b61130f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611306906135da565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561137757600080fd5b505afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113af9190810190613133565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506114986114926003548361279b565b846122ae565b600381905550808311156115cd5760006114b28483611f89565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd86600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611535939291906134ee565b602060405180830381600087803b15801561154f57600080fd5b505af1158015611563573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061158791908101906130a5565b6115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd9061361a565b60405180910390fd5b5050611615565b60006115d98285611f89565b9050600081111561161257611611600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686836127c1565b5b50505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116bc9190810190613133565b905090565b60008060008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461171257600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b15801561177a57600080fd5b505afa15801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117b29190810190613133565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d9061365a565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118d89190810190613133565b9050808611156118e6578095505b6118f08787612324565b8095508196508297508398505050505082600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506119998660016122ae565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000851115611a1657611a15600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688876127c1565b5b6000841115611a4d57611a4c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688866127c1565b5b8484848494509450945094505092959194509250565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611aae57600080fd5b60011515600960149054906101000a900460ff16151514611ace57600080fd5b6000600960146101000a81548160ff021916908315150217905550846001600088815260200190815260200160002060010160000181905550836001600088815260200190815260200160002060000160000181905550826001600088815260200190815260200160002060020160000181905550600080905060008090506000851115611b8457611b60848661067d565b9050611b81611b7b846b033b2e3c9fd0803ce8000000612226565b86612003565b91505b611b8f888284612972565b611b9a888585612adf565b611be6611ba96003548661279b565b611be186611bdc6b033b2e3c9fd0803ce8000000600160008f815260200190815260200160002060010160000154611f89565b610f1c565b6122ae565b600381905550611c38611bfb6004548461279b565b611c3384611c2e6b033b2e3c9fd0803ce8000000600160008f815260200190815260200160002060000160000154611f89565b610f1c565b6122ae565b6004819055505050505050505050565b600960149054906101000a900460ff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ca657600080fd5b7f746f6b656e000000000000000000000000000000000000000000000000000000821415611d145780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e66565b7f63757272656e6379000000000000000000000000000000000000000000000000821415611d825780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e65565b7f7265736572766500000000000000000000000000000000000000000000000000821415611df05780600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e64565b7f65706f63685469636b6572000000000000000000000000000000000000000000821415611e5e5780600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e63565b600080fd5b5b5b5b5050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611eb557600080fd5b60008060006004359250602435915034905060008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684600036604051611f7b9392919061370c565b60405180910390a450505050565b6000828284039150811115611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061369a565b60405180910390fd5b92915050565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b600081838161200e57fe5b04905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161209691906134d3565b60206040518083038186803b1580156120ae57600080fd5b505afa1580156120c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120e69190810190613133565b905090565b60006020528060005260406000206000915090505481565b60016020528060005260406000206000915090508060000160405180602001604052908160008201548152505090806001016040518060200160405290816000820154815250509080600201604051806020016040529081600082015481525050905083565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121dd57600080fd5b60001515600960149054906101000a900460ff161515146121fd57600080fd5b6001600960146101000a81548160ff021916908315150217905550600354600454915091509091565b600080821480612243575082828385029250828161224057fe5b04145b612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906135fa565b60405180910390fd5b92915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282840191508110156122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef9061363a565b60405180910390fd5b92915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156123db57600080fd5b505afa1580156123ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124139190810190613133565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561247d57600080fd5b505afa158015612491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124b59190810190613133565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415612595578585600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549550955095509550505061276c565b808711156125a1578096505b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549350600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154925060008090505b87831115801561264e575060008514158061264d575060008414155b5b1561275c57600085146126d95761267e856001600086815260200190815260200160002060010160000154610f1c565b9050600081146126d8576126c9866126c46126a5846b033b2e3c9fd0803ce8000000612226565b6001600088815260200190815260200160002060020160000154612003565b6122ae565b95506126d58582611f89565b94505b5b6000841461274a57612704846001600086815260200190815260200160002060000160000154610f1c565b9050600081146127495761273a87612735836001600088815260200190815260200160002060020160000154610f1c565b6122ae565b96506127468482611f89565b93505b5b6127558360016122ae565b9250612631565b8686868696509650965096505050505b92959194509250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000818310156127ae57600090506127bb565b6127b88383611f89565b90505b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161281e91906134d3565b60206040518083038186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061286e9190810190613133565b90508082111561287c578091505b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856040518463ffffffff1660e01b81526004016128db939291906134ee565b602060405180830381600087803b1580156128f557600080fd5b505af1158015612909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061292d91908101906130a5565b61296c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612963906135ba565b60405180910390fd5b50505050565b60008090506000600160008681526020019081526020016000206002016000015411156129bf576129bc836001600087815260200190815260200160002060010160000154610f1c565b90505b60006129e4836001600088815260200190815260200160002060000160000154610f1c565b905081811115612a0d5760006129fa8284611f89565b9050612a0581612cb3565b505050612ada565b6000612a198383611f89565b90506000811115612ad657600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612aa3929190613525565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b505050505b5050505b505050565b6000612b04836001600087815260200190815260200160002060010160000154610f1c565b90506000612b2b836001600088815260200190815260200160002060000160000154610f1c565b905080821115612c89576000612b418383611f89565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612bc2929190613525565b600060405180830381600087803b158015612bdc57600080fd5b505af1158015612bf0573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b8152600401612c4f91906136f1565b600060405180830381600087803b158015612c6957600080fd5b505af1158015612c7d573d6000803e3d6000fd5b50505050505050612cae565b6000612c958284611f89565b90506000811115612caa57612ca981612e45565b5b5050505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612d3291906134d3565b60206040518083038186803b158015612d4a57600080fd5b505afa158015612d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d829190810190613133565b905080821115612d90578091505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612e0f929190613525565b600060405180830381600087803b158015612e2957600080fd5b505af1158015612e3d573d6000803e3d6000fd5b505050505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad7a672f6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612eb157600080fd5b505af1158015612ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ee99190810190613133565b905080821115612ef7578091505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1152343836040518263ffffffff1660e01b8152600401612f5291906136f1565b600060405180830381600087803b158015612f6c57600080fd5b505af1158015612f80573d6000803e3d6000fd5b505050505050565b600081359050612f97816138e3565b92915050565b600081519050612fac816138fa565b92915050565b600081359050612fc181613911565b92915050565b600081359050612fd681613928565b92915050565b600081519050612feb81613928565b92915050565b60006020828403121561300357600080fd5b600061301184828501612f88565b91505092915050565b60008060006060848603121561302f57600080fd5b600061303d86828701612f88565b935050602061304e86828701612f88565b925050604061305f86828701612fc7565b9150509250925092565b6000806040838503121561307c57600080fd5b600061308a85828601612f88565b925050602061309b85828601612fc7565b9150509250929050565b6000602082840312156130b757600080fd5b60006130c584828501612f9d565b91505092915050565b600080604083850312156130e157600080fd5b60006130ef85828601612fb2565b925050602061310085828601612f88565b9150509250929050565b60006020828403121561311c57600080fd5b600061312a84828501612fc7565b91505092915050565b60006020828403121561314557600080fd5b600061315384828501612fdc565b91505092915050565b6000806040838503121561316f57600080fd5b600061317d85828601612fc7565b925050602061318e85828601612fc7565b9150509250929050565b60008060008060008060c087890312156131b157600080fd5b60006131bf89828a01612fc7565b96505060206131d089828a01612fc7565b95505060406131e189828a01612fc7565b94505060606131f289828a01612fc7565b935050608061320389828a01612fc7565b92505060a061321489828a01612fc7565b9150509295509295509295565b61322a81613805565b82525050565b61323981613817565b82525050565b600061324b83856137e3565b93506132588385846138c3565b613261836138d2565b840190509392505050565b61327581613857565b82525050565b6132848161387b565b82525050565b6132938161389f565b82525050565b60006132a66015836137f4565b91507f746f6b656e2d7472616e736665722d6661696c656400000000000000000000006000830152602082019050919050565b60006132e66011836137f4565b91507f64697362757273652072657175697265640000000000000000000000000000006000830152602082019050919050565b6000613326600f836137f4565b91507f736166652d6d756c2d6661696c656400000000000000000000000000000000006000830152602082019050919050565b60006133666018836137f4565b91507f63757272656e63792d7472616e736665722d6661696c656400000000000000006000830152602082019050919050565b60006133a6600f836137f4565b91507f736166652d6164642d6661696c656400000000000000000000000000000000006000830152602082019050919050565b60006133e66016836137f4565b91507f65706f63682d6e6f742d65786563757465642d796574000000000000000000006000830152602082019050919050565b60006134266010836137f4565b91507f6469766973696f6e206279207a65726f000000000000000000000000000000006000830152602082019050919050565b6000613466600f836137f4565b91507f736166652d7375622d6661696c656400000000000000000000000000000000006000830152602082019050919050565b6020820160008201516134af60008501826134b5565b50505050565b6134be8161384d565b82525050565b6134cd8161384d565b82525050565b60006020820190506134e86000830184613221565b92915050565b60006060820190506135036000830186613221565b6135106020830185613221565b61351d60408301846134c4565b949350505050565b600060408201905061353a6000830185613221565b61354760208301846134c4565b9392505050565b60006020820190506135636000830184613230565b92915050565b600060208201905061357e600083018461326c565b92915050565b6000602082019050613599600083018461327b565b92915050565b60006020820190506135b4600083018461328a565b92915050565b600060208201905081810360008301526135d381613299565b9050919050565b600060208201905081810360008301526135f3816132d9565b9050919050565b6000602082019050818103600083015261361381613319565b9050919050565b6000602082019050818103600083015261363381613359565b9050919050565b6000602082019050818103600083015261365381613399565b9050919050565b60006020820190508181036000830152613673816133d9565b9050919050565b6000602082019050818103600083015261369381613419565b9050919050565b600060208201905081810360008301526136b381613459565b9050919050565b60006060820190506136cf6000830186613499565b6136dc6020830185613499565b6136e96040830184613499565b949350505050565b600060208201905061370660008301846134c4565b92915050565b600060408201905061372160008301866134c4565b818103602083015261373481848661323f565b9050949350505050565b600060408201905061375360008301856134c4565b61376060208301846134c4565b9392505050565b600060608201905061377c60008301866134c4565b61378960208301856134c4565b61379660408301846134c4565b949350505050565b60006080820190506137b360008301876134c4565b6137c060208301866134c4565b6137cd60408301856134c4565b6137da60608301846134c4565b95945050505050565b600082825260208201905092915050565b600082825260208201905092915050565b60006138108261382d565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061386282613869565b9050919050565b60006138748261382d565b9050919050565b60006138868261388d565b9050919050565b60006138988261382d565b9050919050565b60006138aa826138b1565b9050919050565b60006138bc8261382d565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6138ec81613805565b81146138f757600080fd5b50565b61390381613817565b811461390e57600080fd5b50565b61391a81613823565b811461392557600080fd5b50565b6139318161384d565b811461393c57600080fd5b5056fea365627a7a723158202501a5c67486e36bc32804d2a3a6f82fb3c350c8a7b31bc8804e4b60a80f86206c6578706572696d656e74616cf564736f6c634300050f00400000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000001aefc15de9c2e1ebb97146c3c2cdc4fc0ad539bc
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80639adc339d1161010f578063cd3293de116100a2578063e6cb901311610071578063e6cb9013146105d8578063ed12a99c14610608578063f5a09bb414610626578063fc0c546a14610659576101e5565b8063cd3293de1461054d578063cdd5f2c81461056b578063d05c78da1461058a578063e5a6b10f146105ba576101e5565b8063b5931f7c116100de578063b5931f7c1461049d578063b69ef8a8146104cd578063bf353dbb146104eb578063c6b61e4c1461051b576101e5565b80639adc339d146104035780639c52a7f11461041f578063a293d1e81461043b578063a87430ba1461046b576101e5565b806367457022116101875780637824407f116101565780637824407f146103785780637f3bd56e146103965780638be03ca1146103c95780638d060dfa146103e5576101e5565b806367457022146102dd57806369c7a0511461030d57806373cd07831461034057806374299b5a1461035c576101e5565b80631c8ce890116101c35780631c8ce890146102565780632edd29761461028957806340c10f19146102a557806365fae35e146102c1576101e5565b8063078c74c3146101ea5780630e2286d31461020857806318160ddd14610238575b600080fd5b6101f2610677565b6040516101ff91906136f1565b60405180910390f35b610222600480360361021d919081019061315c565b61067d565b60405161022f91906136f1565b60405180910390f35b6102406106fb565b60405161024d91906136f1565b60405180910390f35b610270600480360361026b9190810190612ff1565b610701565b604051610280949392919061379e565b60405180910390f35b6102a3600480360361029e9190810190613069565b61080a565b005b6102bf60048036036102ba9190810190613069565b610d1f565b005b6102db60048036036102d69190810190612ff1565b610dfd565b005b6102f760048036036102f2919081019061315c565b610f1c565b60405161030491906136f1565b60405180910390f35b61032760048036036103229190810190612ff1565b610f45565b604051610337949392919061379e565b60405180910390f35b61035a6004803603610355919081019061301a565b611003565b005b61037660048036036103719190810190613069565b611105565b005b61038061161a565b60405161038d91906136f1565b60405180910390f35b6103b060048036036103ab9190810190613069565b6116c1565b6040516103c0949392919061379e565b60405180910390f35b6103e360048036036103de9190810190613198565b611a63565b005b6103ed611c48565b6040516103fa919061354e565b60405180910390f35b61041d600480360361041891908101906130ce565b611c5b565b005b61043960048036036104349190810190612ff1565b611e6a565b005b6104556004803603610450919081019061315c565b611f89565b60405161046291906136f1565b60405180910390f35b61048560048036036104809190810190612ff1565b611fd9565b60405161049493929190613767565b60405180910390f35b6104b760048036036104b2919081019061315c565b612003565b6040516104c491906136f1565b60405180910390f35b6104d5612017565b6040516104e291906136f1565b60405180910390f35b61050560048036036105009190810190612ff1565b6120eb565b60405161051291906136f1565b60405180910390f35b6105356004803603610530919081019061310a565b612103565b604051610544939291906136ba565b60405180910390f35b610555612169565b604051610562919061359f565b60405180910390f35b61057361218f565b60405161058192919061373e565b60405180910390f35b6105a4600480360361059f919081019061315c565b612226565b6040516105b191906136f1565b60405180910390f35b6105c2612288565b6040516105cf9190613569565b60405180910390f35b6105f260048036036105ed919081019061315c565b6122ae565b6040516105ff91906136f1565b60405180910390f35b6106106122fe565b60405161061d9190613584565b60405180910390f35b610640600480360361063b9190810190613069565b612324565b604051610650949392919061379e565b60405180910390f35b610661612775565b60405161066e9190613569565b60405180910390f35b60045481565b60008082116106c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b89061367a565b60405180910390fd5b816106eb6106db856b033b2e3c9fd0803ce8000000612226565b600285816106e557fe5b046122ae565b816106f257fe5b04905092915050565b60035481565b60008060008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461075257600080fd5b6107fb85600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156107be57600080fd5b505afa1580156107d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107f69190810190613133565b6116c1565b93509350935093509193509193565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461085557600080fd5b816000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541480156108ea57506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b806109d55750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561095857600080fd5b505afa15801561096c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109909190810190613133565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b906135da565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7c57600080fd5b505afa158015610a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ab49190810190613133565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610b9d610b976004548361279b565b846122ae565b60048190555080831115610cd2576000610bb78483611f89565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd86600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401610c3a939291906134ee565b602060405180830381600087803b158015610c5457600080fd5b505af1158015610c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8c91908101906130a5565b610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc2906135ba565b60405180910390fd5b5050610d1a565b6000610cde8285611f89565b90506000811115610d1757610d16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686836127c1565b5b50505b505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610d6a57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401610dc7929190613525565b600060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505050505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610e4857600080fd5b60008060006004359250602435915034905060016000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684600036604051610f0e9392919061370c565b60405180910390a450505050565b60006b033b2e3c9fd0803ce8000000610f358484612226565b81610f3c57fe5b04905092915050565b600080600080610ff485600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b158015610fb757600080fd5b505afa158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fef9190810190613133565b612324565b93509350935093509193509193565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461104e57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846040518463ffffffff1660e01b81526004016110ad939291906134ee565b602060405180830381600087803b1580156110c757600080fd5b505af11580156110db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110ff91908101906130a5565b50505050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461115057600080fd5b816000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541480156111e557506000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154145b806112d05750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561125357600080fd5b505afa158015611267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061128b9190810190613133565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b61130f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611306906135da565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561137757600080fd5b505afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113af9190810190613133565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506114986114926003548361279b565b846122ae565b600381905550808311156115cd5760006114b28483611f89565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd86600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611535939291906134ee565b602060405180830381600087803b15801561154f57600080fd5b505af1158015611563573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061158791908101906130a5565b6115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd9061361a565b60405180910390fd5b5050611615565b60006115d98285611f89565b9050600081111561161257611611600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686836127c1565b5b50505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561168457600080fd5b505afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116bc9190810190613133565b905090565b60008060008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461171257600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b15801561177a57600080fd5b505afa15801561178e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117b29190810190613133565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d9061365a565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118d89190810190613133565b9050808611156118e6578095505b6118f08787612324565b8095508196508297508398505050505082600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506119998660016122ae565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000851115611a1657611a15600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688876127c1565b5b6000841115611a4d57611a4c600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688866127c1565b5b8484848494509450945094505092959194509250565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611aae57600080fd5b60011515600960149054906101000a900460ff16151514611ace57600080fd5b6000600960146101000a81548160ff021916908315150217905550846001600088815260200190815260200160002060010160000181905550836001600088815260200190815260200160002060000160000181905550826001600088815260200190815260200160002060020160000181905550600080905060008090506000851115611b8457611b60848661067d565b9050611b81611b7b846b033b2e3c9fd0803ce8000000612226565b86612003565b91505b611b8f888284612972565b611b9a888585612adf565b611be6611ba96003548661279b565b611be186611bdc6b033b2e3c9fd0803ce8000000600160008f815260200190815260200160002060010160000154611f89565b610f1c565b6122ae565b600381905550611c38611bfb6004548461279b565b611c3384611c2e6b033b2e3c9fd0803ce8000000600160008f815260200190815260200160002060000160000154611f89565b610f1c565b6122ae565b6004819055505050505050505050565b600960149054906101000a900460ff1681565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ca657600080fd5b7f746f6b656e000000000000000000000000000000000000000000000000000000821415611d145780600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e66565b7f63757272656e6379000000000000000000000000000000000000000000000000821415611d825780600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e65565b7f7265736572766500000000000000000000000000000000000000000000000000821415611df05780600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e64565b7f65706f63685469636b6572000000000000000000000000000000000000000000821415611e5e5780600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611e63565b600080fd5b5b5b5b5050565b60016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611eb557600080fd5b60008060006004359250602435915034905060008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081833373ffffffffffffffffffffffffffffffffffffffff166000357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684600036604051611f7b9392919061370c565b60405180910390a450505050565b6000828284039150811115611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca9061369a565b60405180910390fd5b92915050565b60026020528060005260406000206000915090508060000154908060010154908060020154905083565b600081838161200e57fe5b04905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161209691906134d3565b60206040518083038186803b1580156120ae57600080fd5b505afa1580156120c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120e69190810190613133565b905090565b60006020528060005260406000206000915090505481565b60016020528060005260406000206000915090508060000160405180602001604052908160008201548152505090806001016040518060200160405290816000820154815250509080600201604051806020016040529081600082015481525050905083565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146121dd57600080fd5b60001515600960149054906101000a900460ff161515146121fd57600080fd5b6001600960146101000a81548160ff021916908315150217905550600354600454915091509091565b600080821480612243575082828385029250828161224057fe5b04145b612282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612279906135fa565b60405180910390fd5b92915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008282840191508110156122f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ef9061363a565b60405180910390fd5b92915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166364c1cf336040518163ffffffff1660e01b815260040160206040518083038186803b1580156123db57600080fd5b505afa1580156123ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124139190810190613133565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663766718086040518163ffffffff1660e01b815260040160206040518083038186803b15801561247d57600080fd5b505afa158015612491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124b59190810190613133565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415612595578585600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600260008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549550955095509550505061276c565b808711156125a1578096505b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549350600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154925060008090505b87831115801561264e575060008514158061264d575060008414155b5b1561275c57600085146126d95761267e856001600086815260200190815260200160002060010160000154610f1c565b9050600081146126d8576126c9866126c46126a5846b033b2e3c9fd0803ce8000000612226565b6001600088815260200190815260200160002060020160000154612003565b6122ae565b95506126d58582611f89565b94505b5b6000841461274a57612704846001600086815260200190815260200160002060000160000154610f1c565b9050600081146127495761273a87612735836001600088815260200190815260200160002060020160000154610f1c565b6122ae565b96506127468482611f89565b93505b5b6127558360016122ae565b9250612631565b8686868696509650965096505050505b92959194509250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000818310156127ae57600090506127bb565b6127b88383611f89565b90505b92915050565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161281e91906134d3565b60206040518083038186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061286e9190810190613133565b90508082111561287c578091505b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856040518463ffffffff1660e01b81526004016128db939291906134ee565b602060405180830381600087803b1580156128f557600080fd5b505af1158015612909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061292d91908101906130a5565b61296c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612963906135ba565b60405180910390fd5b50505050565b60008090506000600160008681526020019081526020016000206002016000015411156129bf576129bc836001600087815260200190815260200160002060010160000154610f1c565b90505b60006129e4836001600088815260200190815260200160002060000160000154610f1c565b905081811115612a0d5760006129fa8284611f89565b9050612a0581612cb3565b505050612ada565b6000612a198383611f89565b90506000811115612ad657600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612aa3929190613525565b600060405180830381600087803b158015612abd57600080fd5b505af1158015612ad1573d6000803e3d6000fd5b505050505b5050505b505050565b6000612b04836001600087815260200190815260200160002060010160000154610f1c565b90506000612b2b836001600088815260200190815260200160002060000160000154610f1c565b905080821115612c89576000612b418383611f89565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401612bc2929190613525565b600060405180830381600087803b158015612bdc57600080fd5b505af1158015612bf0573d6000803e3d6000fd5b50505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b8152600401612c4f91906136f1565b600060405180830381600087803b158015612c6957600080fd5b505af1158015612c7d573d6000803e3d6000fd5b50505050505050612cae565b6000612c958284611f89565b90506000811115612caa57612ca981612e45565b5b5050505b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612d3291906134d3565b60206040518083038186803b158015612d4a57600080fd5b505afa158015612d5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d829190810190613133565b905080821115612d90578091505b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612e0f929190613525565b600060405180830381600087803b158015612e2957600080fd5b505af1158015612e3d573d6000803e3d6000fd5b505050505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad7a672f6040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612eb157600080fd5b505af1158015612ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ee99190810190613133565b905080821115612ef7578091505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1152343836040518263ffffffff1660e01b8152600401612f5291906136f1565b600060405180830381600087803b158015612f6c57600080fd5b505af1158015612f80573d6000803e3d6000fd5b505050505050565b600081359050612f97816138e3565b92915050565b600081519050612fac816138fa565b92915050565b600081359050612fc181613911565b92915050565b600081359050612fd681613928565b92915050565b600081519050612feb81613928565b92915050565b60006020828403121561300357600080fd5b600061301184828501612f88565b91505092915050565b60008060006060848603121561302f57600080fd5b600061303d86828701612f88565b935050602061304e86828701612f88565b925050604061305f86828701612fc7565b9150509250925092565b6000806040838503121561307c57600080fd5b600061308a85828601612f88565b925050602061309b85828601612fc7565b9150509250929050565b6000602082840312156130b757600080fd5b60006130c584828501612f9d565b91505092915050565b600080604083850312156130e157600080fd5b60006130ef85828601612fb2565b925050602061310085828601612f88565b9150509250929050565b60006020828403121561311c57600080fd5b600061312a84828501612fc7565b91505092915050565b60006020828403121561314557600080fd5b600061315384828501612fdc565b91505092915050565b6000806040838503121561316f57600080fd5b600061317d85828601612fc7565b925050602061318e85828601612fc7565b9150509250929050565b60008060008060008060c087890312156131b157600080fd5b60006131bf89828a01612fc7565b96505060206131d089828a01612fc7565b95505060406131e189828a01612fc7565b94505060606131f289828a01612fc7565b935050608061320389828a01612fc7565b92505060a061321489828a01612fc7565b9150509295509295509295565b61322a81613805565b82525050565b61323981613817565b82525050565b600061324b83856137e3565b93506132588385846138c3565b613261836138d2565b840190509392505050565b61327581613857565b82525050565b6132848161387b565b82525050565b6132938161389f565b82525050565b60006132a66015836137f4565b91507f746f6b656e2d7472616e736665722d6661696c656400000000000000000000006000830152602082019050919050565b60006132e66011836137f4565b91507f64697362757273652072657175697265640000000000000000000000000000006000830152602082019050919050565b6000613326600f836137f4565b91507f736166652d6d756c2d6661696c656400000000000000000000000000000000006000830152602082019050919050565b60006133666018836137f4565b91507f63757272656e63792d7472616e736665722d6661696c656400000000000000006000830152602082019050919050565b60006133a6600f836137f4565b91507f736166652d6164642d6661696c656400000000000000000000000000000000006000830152602082019050919050565b60006133e66016836137f4565b91507f65706f63682d6e6f742d65786563757465642d796574000000000000000000006000830152602082019050919050565b60006134266010836137f4565b91507f6469766973696f6e206279207a65726f000000000000000000000000000000006000830152602082019050919050565b6000613466600f836137f4565b91507f736166652d7375622d6661696c656400000000000000000000000000000000006000830152602082019050919050565b6020820160008201516134af60008501826134b5565b50505050565b6134be8161384d565b82525050565b6134cd8161384d565b82525050565b60006020820190506134e86000830184613221565b92915050565b60006060820190506135036000830186613221565b6135106020830185613221565b61351d60408301846134c4565b949350505050565b600060408201905061353a6000830185613221565b61354760208301846134c4565b9392505050565b60006020820190506135636000830184613230565b92915050565b600060208201905061357e600083018461326c565b92915050565b6000602082019050613599600083018461327b565b92915050565b60006020820190506135b4600083018461328a565b92915050565b600060208201905081810360008301526135d381613299565b9050919050565b600060208201905081810360008301526135f3816132d9565b9050919050565b6000602082019050818103600083015261361381613319565b9050919050565b6000602082019050818103600083015261363381613359565b9050919050565b6000602082019050818103600083015261365381613399565b9050919050565b60006020820190508181036000830152613673816133d9565b9050919050565b6000602082019050818103600083015261369381613419565b9050919050565b600060208201905081810360008301526136b381613459565b9050919050565b60006060820190506136cf6000830186613499565b6136dc6020830185613499565b6136e96040830184613499565b949350505050565b600060208201905061370660008301846134c4565b92915050565b600060408201905061372160008301866134c4565b818103602083015261373481848661323f565b9050949350505050565b600060408201905061375360008301856134c4565b61376060208301846134c4565b9392505050565b600060608201905061377c60008301866134c4565b61378960208301856134c4565b61379660408301846134c4565b949350505050565b60006080820190506137b360008301876134c4565b6137c060208301866134c4565b6137cd60408301856134c4565b6137da60608301846134c4565b95945050505050565b600082825260208201905092915050565b600082825260208201905092915050565b60006138108261382d565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061386282613869565b9050919050565b60006138748261382d565b9050919050565b60006138868261388d565b9050919050565b60006138988261382d565b9050919050565b60006138aa826138b1565b9050919050565b60006138bc8261382d565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6138ec81613805565b81146138f757600080fd5b50565b61390381613817565b811461390e57600080fd5b50565b61391a81613823565b811461392557600080fd5b50565b6139318161384d565b811461393c57600080fd5b5056fea365627a7a723158202501a5c67486e36bc32804d2a3a6f82fb3c350c8a7b31bc8804e4b60a80f86206c6578706572696d656e74616cf564736f6c634300050f0040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000001aefc15de9c2e1ebb97146c3c2cdc4fc0ad539bc
-----Decoded View---------------
Arg [0] : currency_ (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [1] : token_ (address): 0x1AEFc15dE9C2E1Ebb97146c3C2CDC4fc0aD539bC
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [1] : 0000000000000000000000001aefc15de9c2e1ebb97146c3c2cdc4fc0ad539bc
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.