More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,724 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add Transfers Fr... | 20578442 | 40 hrs ago | IN | 0 ETH | 0.00022287 | ||||
Add Transfers Fr... | 20557812 | 4 days ago | IN | 0 ETH | 0.00008625 | ||||
Add Transfers Fr... | 20529842 | 8 days ago | IN | 0 ETH | 0.0001454 | ||||
Init Transfer | 20502558 | 12 days ago | IN | 0.00384997 ETH | 0.00138582 | ||||
Init Transfer | 20478177 | 15 days ago | IN | 0.00441775 ETH | 0.0069205 | ||||
Init Transfer | 20472295 | 16 days ago | IN | 0.0042184 ETH | 0.00078347 | ||||
Init Transfer | 20466243 | 17 days ago | IN | 0.00414118 ETH | 0.00246063 | ||||
Add Transfers Fr... | 20462463 | 17 days ago | IN | 0 ETH | 0.00342356 | ||||
Init Transfer | 20457870 | 18 days ago | IN | 0.00364786 ETH | 0.00166807 | ||||
Add Transfers Fr... | 20401283 | 26 days ago | IN | 0 ETH | 0.0001051 | ||||
Init Transfer | 20382725 | 29 days ago | IN | 0.00330598 ETH | 0.001528 | ||||
Init Transfer | 20379035 | 29 days ago | IN | 0.00314472 ETH | 0.00279774 | ||||
Init Transfer | 20363985 | 31 days ago | IN | 0.00288277 ETH | 0.00307223 | ||||
Init Transfer | 20363745 | 31 days ago | IN | 0.00288476 ETH | 0.00040079 | ||||
Add Transfers Fr... | 20363620 | 31 days ago | IN | 0 ETH | 0.00044047 | ||||
Add Transfers Fr... | 20335755 | 35 days ago | IN | 0 ETH | 0.00118665 | ||||
Add Transfers Fr... | 20324833 | 37 days ago | IN | 0 ETH | 0.00054787 | ||||
Add Transfers Fr... | 20315005 | 38 days ago | IN | 0 ETH | 0.00097522 | ||||
Add Transfers Fr... | 20308291 | 39 days ago | IN | 0 ETH | 0.00021834 | ||||
Add Transfers Fr... | 20293257 | 41 days ago | IN | 0 ETH | 0.00019088 | ||||
Init Transfer | 20269375 | 44 days ago | IN | 0.00329902 ETH | 0.00271725 | ||||
Add Transfers Fr... | 20237031 | 49 days ago | IN | 0 ETH | 0.00080139 | ||||
Init Transfer | 20231694 | 50 days ago | IN | 0.00328549 ETH | 0.00196627 | ||||
Add Transfers Fr... | 20213364 | 52 days ago | IN | 0 ETH | 0.0010496 | ||||
Add Transfers Fr... | 20187029 | 56 days ago | IN | 0 ETH | 0.00036615 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
19951069 | 89 days ago | 0.08787072 ETH | ||||
19430009 | 162 days ago | 0.11208799 ETH | ||||
19208777 | 193 days ago | 0.11981671 ETH | ||||
18976281 | 225 days ago | 0.18453931 ETH | ||||
18841880 | 244 days ago | 0.12937655 ETH | ||||
18742594 | 258 days ago | 0.21999388 ETH | ||||
18357901 | 312 days ago | 0.16954302 ETH | ||||
18109894 | 347 days ago | 0.54459386 ETH | ||||
17106087 | 488 days ago | 0.39942404 ETH | ||||
16864297 | 522 days ago | 0.5 ETH |
Loading...
Loading
Contract Name:
EVMBridge
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "./interfaces/IERC20.sol"; import "./utils/TransferHelper.sol"; import "./libs/SafeMath.sol"; import "./libs/SignedSafeMath.sol"; struct Transfer { bytes32 hash; address from; address coin; uint256 quantity; string fromChain; string toChain; uint256 feesInCDT; uint256 feesInETH; uint256 blockTimestamp; uint256 blockNumber; string data; } struct Bridge { address addr; string chain; } struct Validator { address addr; uint256 warrantyAmount; uint256 totalLossAmount; } /** * @title EVMBridge * @author Jeremy Guyet (@jguyet) * @dev * Smart Contract for manage the transfers between two blockchains * who respect the Ethereum Virtual Machine normal. This Smart contract * contains the list of the chains accepted and list all transactions initialized * with their hash proof from the destination chain. this smart contract is decentralized * but managed by one wallet address (The owner wallet of the CheckDot project). * This contract is managed by API in Nodejs and we wait 100 block before transfer anything. */ contract EVMBridge { using SafeMath for uint256; using SignedSafeMath for int256; address public token; address public owner; address public program; string public chain; uint256 public feesInDollar; uint256 public feesInCDTPercentage; uint256 public minimumTransferQuantity; uint256 public bridgeFeesInCDT; uint256 public lockedQuantity; uint256 private blocksLength; mapping(bytes32 => uint256) private transfersIndexs; Transfer[] private transfers; mapping(bytes32 => bytes32) private transfersHashs; // Private dex information address private dex_in; address private dex_out; address private dex_pool; bool internal paused; bool internal locked; constructor( string memory _bridgeChain, address _token, uint256 _feesInDollar, uint256 _feesInCDTPercentage, address _dex_in, address _dex_out, address _dex_pool) { require(msg.sender != address(0), "ABORT sender - address(0)"); token = _token; owner = msg.sender; program = msg.sender; chain = _bridgeChain; feesInDollar = _feesInDollar; feesInCDTPercentage = _feesInCDTPercentage; dex_in = _dex_in; dex_out = _dex_out; dex_pool = _dex_pool; minimumTransferQuantity = 1 ether; } modifier onlyOwner() { require(msg.sender == owner, "Only the owner can do this action"); _; } modifier onlyProgramOrOwner() { require(msg.sender == program || msg.sender == owner, "Only program or Owner"); _; } modifier activated() { require(paused == false, "Bridge actually paused"); _; } modifier noReentrant() { require(!locked, "No re-entrancy"); locked = true; _; locked = false; } function getFeesInDollar() public view returns (uint256) { return feesInDollar; } function setFeesInDollar(uint256 cost) public onlyOwner { feesInDollar = cost; } function getFeesInETH() public view returns (uint256) { uint256 oneDollar = getTokenPriceOutFromPoolBalance(dex_in, dex_out, dex_pool); return oneDollar.mul(1 ether).div(feesInDollar).mul(100); // multiplication 1 ether pour decaler les decimals. } function getFeesInCDTByQuantity(uint256 quantity) public view returns (uint256) { if (feesInCDTPercentage == 0) { return 0; } uint256 transferFees = quantity.div(100).mul(feesInCDTPercentage); return transferFees; } function setFeesInCDTPercentage(uint256 feesInPercentage) public onlyOwner { feesInCDTPercentage = feesInPercentage; } function initTransfer(uint256 quantity, string calldata toChain, string calldata data) public payable noReentrant activated { require(msg.value >= getFeesInETH(), "PAYMENT_ABORT" ); require(quantity >= minimumTransferQuantity, "INSUFISANT_QUANTITY" ); require(IERC20(token).balanceOf(msg.sender) >= quantity, "INSUFISANT_BALANCE"); require(IERC20(token).allowance(msg.sender, address(this)) >= quantity, "INSUFISANT_ALLOWANCE"); TransferHelper.safeTransferFrom(token, msg.sender, address(this), quantity); uint256 transferFeesInCDT = getFeesInCDTByQuantity(quantity); uint256 transferQuantity = quantity.sub(transferFeesInCDT); uint256 transferETHFees = msg.value; bridgeFeesInCDT += transferFeesInCDT; uint256 index = transfers.length; bytes32 transferHash = _getHash(block.timestamp, 0, msg.sender); transfers.push(Transfer( transferHash, msg.sender, token, transferQuantity, chain, toChain, transferFeesInCDT, transferETHFees, block.timestamp, block.number, data )); transfersIndexs[transferHash] = index; transfersHashs[transferHash] = transferHash; lockedQuantity = lockedQuantity.add(transferQuantity); } function transferExists(bytes32 transferHash) public view returns (bool) { return transfersHashs[transferHash] == transferHash; } function getTransfer(bytes32 transferHash) public view returns (Transfer memory) { return transfers[transfersIndexs[transferHash]]; } function getTransferLength() public view returns (uint256) { return transfers.length; } function getTransfers(int256 page, int256 pageSize) external view returns (Transfer[] memory) { uint256 poolLength = transfers.length; int256 queryStartPoolIndex = int256(poolLength).sub(pageSize.mul(page.add(1))).add(pageSize); require(queryStartPoolIndex >= 0, "Out of bounds"); int256 queryEndPoolIndex = queryStartPoolIndex.sub(pageSize); if (queryEndPoolIndex < 0) { queryEndPoolIndex = 0; } int256 currentPoolIndex = queryStartPoolIndex; require(uint256(currentPoolIndex) <= poolLength, "Out of bounds"); Transfer[] memory results = new Transfer[](uint256(currentPoolIndex - queryEndPoolIndex)); uint256 index = 0; for (currentPoolIndex; currentPoolIndex > queryEndPoolIndex; currentPoolIndex--) { Transfer memory transfer = transfers[uint256(currentPoolIndex).sub(1)]; results[index] = transfer; index++; } return results; } function addLockQuantity(uint256 quantity) public onlyOwner { lockedQuantity = lockedQuantity.add(quantity); } function subLockQuantity(uint256 quantity) public onlyOwner { lockedQuantity = lockedQuantity.sub(quantity); } function collectCDTFees() public onlyOwner { require(IERC20(token).balanceOf(address(this)) >= bridgeFeesInCDT, "INSUFISANT_BALANCE"); TransferHelper.safeTransfer(token, msg.sender, bridgeFeesInCDT); bridgeFeesInCDT = 0; } function deposit(address coin, uint256 quantity) public onlyOwner noReentrant { require(IERC20(coin).balanceOf(msg.sender) >= quantity, "INSUFISANT_BALANCE"); require(IERC20(coin).allowance(msg.sender, address(this)) >= quantity, "INSUFISANT_ALLOWANCE"); TransferHelper.safeTransferFrom(coin, msg.sender, address(this), quantity); } function balance() public view returns (uint256){ return payable(address(this)).balance; } function depositETH(uint256 quantity) public payable onlyOwner noReentrant { require(msg.value >= quantity, "PAYMENT_ABORT" ); } function withdraw(address coin, uint256 quantity) public onlyOwner noReentrant { require(IERC20(coin).balanceOf(address(this)) >= quantity, "INSUFISANT_BALANCE"); TransferHelper.safeTransfer(coin, msg.sender, quantity); } function withdrawUnlocked() public onlyOwner noReentrant { uint256 balanceOfToken = IERC20(token).balanceOf(address(this)); require(balanceOfToken >= lockedQuantity, "INSUFISANT_BALANCE"); TransferHelper.safeTransfer(token, msg.sender, balanceOfToken - lockedQuantity); } function withdrawETH(uint quantity) public onlyOwner noReentrant { require(quantity <= balance(), "Insufficient balance"); (bool success,)=owner.call{value:quantity}(""); require(success, "Transfer failed!"); } function emergencyWithdrawAll() external onlyOwner noReentrant { (bool success,)= owner.call{value:address(this).balance}(""); require(success,"Transfer failed!"); } function getLastsTransfers(uint256 size) external view returns (Transfer[] memory) { uint256 poolLength = transfers.length; uint256 start = 0; uint256 memorySize = size; if (transfers.length > size) { start = transfers.length.sub(size); } else { memorySize = transfers.length; } uint256 currentIndex = start; Transfer[] memory results = new Transfer[](memorySize); uint256 memoryIndex = 0; for (currentIndex; currentIndex < poolLength; currentIndex++) { Transfer memory transfer = transfers[currentIndex]; results[memoryIndex++] = transfer; } return results; } function addTransfersFrom(string[] memory /* fromChains */, address[] memory transfersAddresses, uint256[] memory amounts, bytes32[] memory _transfersHashs) public onlyProgramOrOwner { for (uint256 i = 0; i < transfersAddresses.length; i++) { address transferAddress = transfersAddresses[i]; uint256 amount = amounts[i]; bytes32 transferHash = _transfersHashs[i]; require(transfersHashs[transferHash] == 0, "Already transfered"); TransferHelper.safeTransfer(token, transferAddress, amount); transfersHashs[transferHash] = transferHash; } } function getDex() public view returns (address, address, address) { return (dex_in, dex_out, dex_pool); } /** * Only 18 decimals tokens. */ function setDex(address _in, address _out, address _pool) public onlyOwner { dex_in = _in; dex_out = _out; dex_pool = _pool; } function getTokenPriceOutFromPoolBalance(address _in, address _out, address _pool) public view returns (uint256) { uint256 balanceIn = IERC20(_in).balanceOf(_pool); uint256 balanceOut = IERC20(_out).balanceOf(_pool); require(balanceOut > 0); return balanceIn.mul(1 ether).div(balanceOut); // ex: in=USDC,out=ETH = price of ETH in USDC // ex: in=ETH,out=USDC = price of USDC in ETH } function updateTransferCost(uint256 _feesInDollar) public onlyOwner { feesInDollar = _feesInDollar; } function isPaused() public view returns (bool) { return paused; } function setPaused(bool p) public onlyOwner { paused = p; } function setMinimumTransferQuantity(uint256 quantity) public onlyOwner { minimumTransferQuantity = quantity; } function changeOwner(address newOwner) public onlyOwner { require(newOwner != address(0), "No zero address"); owner = newOwner; } function changeProgram(address newProgram) public onlyOwner { require(newProgram != address(0), "No zero address"); program = newProgram; } function _getHash(uint256 timestamp, uint256 nonce, address addr) private pure returns (bytes32) { return keccak256(abi.encodePacked(timestamp, addr, nonce)); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } }
// SPDX-License-Identifier: MIT /** ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠙⠻⢶⣄⡀⠀⠀⠀⢀⣤⠶⠛⠛⡇⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣇⠀⠀⣙⣿⣦⣤⣴⣿⣁⠀⠀⣸⠇⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣡⣾⣿⣿⣿⣿⣿⣿⣿⣷⣌⠋⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣷⣄⡈⢻⣿⡟⢁⣠⣾⣿⣦ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⠘⣿⠃⣿⣿⣿⣿⡏⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠈⠛⣰⠿⣆⠛⠁⠀⡀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣦⠀⠘⠛⠋⠀⣴⣿⠁⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣾⣿⣿⣿⣿⡇⠀⠀⠀⢸⣿⣏⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠀⠀⠀⠾⢿⣿⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⡿⠟⠋⣁⣠⣤⣤⡶⠶⠶⣤⣄⠈⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⢰⣿⣿⣮⣉⣉⣉⣤⣴⣶⣿⣿⣋⡥⠄⠀⠀⠀⠀⠉⢻⣄⠀⠀⠀⠀⠀ ⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣋⣁⣤⣀⣀⣤⣤⣤⣤⣄⣿⡄⠀⠀⠀⠀ ⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠋⠉⠁⠀⠀⠀⠀⠈⠛⠃⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ */ //🦊 Made with ❤ by the devs at Kitso Mintu 🦊 // OpenZeppelin Contracts v4.4.1 (utils/math/SignedSafeMath.sol) pragma solidity ^0.8.0; library SignedSafeMath { function mul(int256 a, int256 b) internal pure returns (int256) { return a * b; } function div(int256 a, int256 b) internal pure returns (int256) { return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { return a - b; } function add(int256 a, int256 b) internal pure returns (int256) { return a + b; } }
// SPDX-License-Identifier: MIT /** ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠙⠻⢶⣄⡀⠀⠀⠀⢀⣤⠶⠛⠛⡇⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣇⠀⠀⣙⣿⣦⣤⣴⣿⣁⠀⠀⣸⠇⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣡⣾⣿⣿⣿⣿⣿⣿⣿⣷⣌⠋⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣷⣄⡈⢻⣿⡟⢁⣠⣾⣿⣦ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⣿⣿⣿⣿⠘⣿⠃⣿⣿⣿⣿⡏⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠈⠛⣰⠿⣆⠛⠁⠀⡀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣦⠀⠘⠛⠋⠀⣴⣿⠁⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣾⣿⣿⣿⣿⡇⠀⠀⠀⢸⣿⣏⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⣠⣶⣿⣿⣿⣿⣿⣿⣿⣿⠿⠿⠀⠀⠀⠾⢿⣿⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⣿⡿⠟⠋⣁⣠⣤⣤⡶⠶⠶⣤⣄⠈⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⢰⣿⣿⣮⣉⣉⣉⣤⣴⣶⣿⣿⣋⡥⠄⠀⠀⠀⠀⠉⢻⣄⠀⠀⠀⠀⠀ ⠀⠀⠀⠸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⣋⣁⣤⣀⣀⣤⣤⣤⣤⣄⣿⡄⠀⠀⠀⠀ ⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠋⠉⠁⠀⠀⠀⠀⠈⠛⠃⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ */ //🦊 Made with ❤ by the devs at Kitsu Mintu 🦊 pragma solidity ^0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_bridgeChain","type":"string"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_feesInDollar","type":"uint256"},{"internalType":"uint256","name":"_feesInCDTPercentage","type":"uint256"},{"internalType":"address","name":"_dex_in","type":"address"},{"internalType":"address","name":"_dex_out","type":"address"},{"internalType":"address","name":"_dex_pool","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"addLockQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"","type":"string[]"},{"internalType":"address[]","name":"transfersAddresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes32[]","name":"_transfersHashs","type":"bytes32[]"}],"name":"addTransfersFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgeFeesInCDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chain","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newProgram","type":"address"}],"name":"changeProgram","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectCDTFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"emergencyWithdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesInCDTPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesInDollar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getFeesInCDTByQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeesInDollar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeesInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"size","type":"uint256"}],"name":"getLastsTransfers","outputs":[{"components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"string","name":"fromChain","type":"string"},{"internalType":"string","name":"toChain","type":"string"},{"internalType":"uint256","name":"feesInCDT","type":"uint256"},{"internalType":"uint256","name":"feesInETH","type":"uint256"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"data","type":"string"}],"internalType":"struct Transfer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_in","type":"address"},{"internalType":"address","name":"_out","type":"address"},{"internalType":"address","name":"_pool","type":"address"}],"name":"getTokenPriceOutFromPoolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"transferHash","type":"bytes32"}],"name":"getTransfer","outputs":[{"components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"string","name":"fromChain","type":"string"},{"internalType":"string","name":"toChain","type":"string"},{"internalType":"uint256","name":"feesInCDT","type":"uint256"},{"internalType":"uint256","name":"feesInETH","type":"uint256"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"data","type":"string"}],"internalType":"struct Transfer","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"page","type":"int256"},{"internalType":"int256","name":"pageSize","type":"int256"}],"name":"getTransfers","outputs":[{"components":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"string","name":"fromChain","type":"string"},{"internalType":"string","name":"toChain","type":"string"},{"internalType":"uint256","name":"feesInCDT","type":"uint256"},{"internalType":"uint256","name":"feesInETH","type":"uint256"},{"internalType":"uint256","name":"blockTimestamp","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"data","type":"string"}],"internalType":"struct Transfer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"string","name":"toChain","type":"string"},{"internalType":"string","name":"data","type":"string"}],"name":"initTransfer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTransferQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"program","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_in","type":"address"},{"internalType":"address","name":"_out","type":"address"},{"internalType":"address","name":"_pool","type":"address"}],"name":"setDex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feesInPercentage","type":"uint256"}],"name":"setFeesInCDTPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost","type":"uint256"}],"name":"setFeesInDollar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMinimumTransferQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"p","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"subLockQuantity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"transferHash","type":"bytes32"}],"name":"transferExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feesInDollar","type":"uint256"}],"name":"updateTransferCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"coin","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawUnlocked","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162005fc138038062005fc183398181016040528101906200003791906200055f565b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415620000aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a19062000692565b60405180910390fd5b856000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600390805190602001906200018492919062000272565b50846004819055508360058190555082600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a76400006006819055505050505050505062000719565b8280546200028090620006e3565b90600052602060002090601f016020900481019282620002a45760008555620002f0565b82601f10620002bf57805160ff1916838001178555620002f0565b82800160010185558215620002f0579182015b82811115620002ef578251825591602001919060010190620002d2565b5b509050620002ff919062000303565b5090565b5b808211156200031e57600081600090555060010162000304565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200038b8262000340565b810181811067ffffffffffffffff82111715620003ad57620003ac62000351565b5b80604052505050565b6000620003c262000322565b9050620003d0828262000380565b919050565b600067ffffffffffffffff821115620003f357620003f262000351565b5b620003fe8262000340565b9050602081019050919050565b60005b838110156200042b5780820151818401526020810190506200040e565b838111156200043b576000848401525b50505050565b6000620004586200045284620003d5565b620003b6565b9050828152602081018484840111156200047757620004766200033b565b5b620004848482856200040b565b509392505050565b600082601f830112620004a457620004a362000336565b5b8151620004b684826020860162000441565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004ec82620004bf565b9050919050565b620004fe81620004df565b81146200050a57600080fd5b50565b6000815190506200051e81620004f3565b92915050565b6000819050919050565b620005398162000524565b81146200054557600080fd5b50565b60008151905062000559816200052e565b92915050565b600080600080600080600060e0888a0312156200058157620005806200032c565b5b600088015167ffffffffffffffff811115620005a257620005a162000331565b5b620005b08a828b016200048c565b9750506020620005c38a828b016200050d565b9650506040620005d68a828b0162000548565b9550506060620005e98a828b0162000548565b9450506080620005fc8a828b016200050d565b93505060a06200060f8a828b016200050d565b92505060c0620006228a828b016200050d565b91505092959891949750929550565b600082825260208201905092915050565b7f41424f52542073656e646572202d206164647265737328302900000000000000600082015250565b60006200067a60198362000631565b9150620006878262000642565b602082019050919050565b60006020820190508181036000830152620006ad816200066b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006fc57607f821691505b60208210811415620007135762000712620006b4565b5b50919050565b61589880620007296000396000f3fe60806040526004361061023b5760003560e01c806381d1f9dc1161012e578063c763e5a1116100ab578063dd1917191161006f578063dd19171914610831578063f14210a614610848578063f3fef3a314610871578063f8228f7b1461089a578063fc0c546a146108c55761023b565b8063c763e5a114610748578063c860ebc614610773578063cdca09471461079e578063d55748ea146107c9578063db18ba7d146108065761023b565b8063a6f9dae1116100f2578063a6f9dae114610684578063a7a2b3c5146106ad578063b187bd26146106d6578063b69ef8a814610701578063c2c68e001461072c5761023b565b806381d1f9dc1461059d57806382149b39146105c85780638da5cb5b146105f3578063946c6a921461061e578063a5d531041461065b5761023b565b80633e035383116101bc5780635358fbda116101805780635358fbda146105015780635829d9441461051d578063649c6c56146105345780636fcd112b1461055d57806375045691146105745761023b565b80633e0353831461041e578063419f75fe1461044957806341b313881461047257806342ae278c1461049b57806347e7ef24146104d85761023b565b80632bda82aa116102035780632bda82aa14610327578063320c0a5f1461036457806336f3f96f1461038d5780633be46cd6146103b85780633d9534b7146103e15761023b565b806316c38b3c1461024057806318fdc2c814610269578063191622ff146102925780631d774838146102bf578063260958a5146102ea575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613d09565b6108f0565b005b34801561027557600080fd5b50610290600480360381019061028b9190613d6c565b61099d565b005b34801561029e57600080fd5b506102a7610a37565b6040516102b693929190613dda565b60405180910390f35b3480156102cb57600080fd5b506102d4610ab0565b6040516102e19190613e20565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613e71565b610ab6565b60405161031e9190614061565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613d6c565b610da4565b60405161035b9190613e20565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190613d6c565b610def565b005b34801561039957600080fd5b506103a2610e9d565b6040516103af9190613e20565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190613d6c565b610eaa565b005b3480156103ed57600080fd5b5061040860048036038101906104039190613e71565b610f58565b6040516104159190614092565b60405180910390f35b34801561042a57600080fd5b50610433610f77565b6040516104409190613e20565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613d6c565b610f7d565b005b34801561047e57600080fd5b506104996004803603810190610494919061453d565b611017565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190614614565b611220565b6040516104cf9190613e20565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190614667565b611380565b005b61051b60048036038101906105169190613d6c565b61163e565b005b34801561052957600080fd5b5061053261179a565b005b34801561054057600080fd5b5061055b60048036038101906105569190613d6c565b61194e565b005b34801561056957600080fd5b506105726119e8565b005b34801561058057600080fd5b5061059b60048036038101906105969190614614565b611c2c565b005b3480156105a957600080fd5b506105b2611d84565b6040516105bf9190613e20565b60405180910390f35b3480156105d457600080fd5b506105dd611e42565b6040516105ea9190613e20565b60405180910390f35b3480156105ff57600080fd5b50610608611e48565b60405161061591906146a7565b60405180910390f35b34801561062a57600080fd5b50610645600480360381019061064091906146f8565b611e6e565b60405161065291906148f7565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190614919565b61231a565b005b34801561069057600080fd5b506106ab60048036038101906106a69190614919565b61245e565b005b3480156106b957600080fd5b506106d460048036038101906106cf9190613d6c565b6125a2565b005b3480156106e257600080fd5b506106eb61263c565b6040516106f89190614092565b60405180910390f35b34801561070d57600080fd5b50610716612653565b6040516107239190613e20565b60405180910390f35b610746600480360381019061074191906149a1565b612672565b005b34801561075457600080fd5b5061075d612d8f565b60405161076a9190614a80565b60405180910390f35b34801561077f57600080fd5b50610788612e1d565b60405161079591906146a7565b60405180910390f35b3480156107aa57600080fd5b506107b3612e43565b6040516107c09190613e20565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb9190613d6c565b612e49565b6040516107fd91906148f7565b60405180910390f35b34801561081257600080fd5b5061081b613215565b6040516108289190613e20565b60405180910390f35b34801561083d57600080fd5b5061084661321f565b005b34801561085457600080fd5b5061086f600480360381019061086a9190613d6c565b613406565b005b34801561087d57600080fd5b5061089860048036038101906108939190614667565b613638565b005b3480156108a657600080fd5b506108af613828565b6040516108bc9190613e20565b60405180910390f35b3480156108d157600080fd5b506108da61382e565b6040516108e791906146a7565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097790614b14565b60405180910390fd5b80600f60146101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490614b14565b60405180910390fd5b8060048190555050565b6000806000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b60075481565b610abe613b91565b600b600a60008481526020019081526020016000205481548110610ae557610ae4614b34565b5b90600052602060002090600b020160405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482018054610bcf90614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfb90614b92565b8015610c485780601f10610c1d57610100808354040283529160200191610c48565b820191906000526020600020905b815481529060010190602001808311610c2b57829003601f168201915b50505050508152602001600582018054610c6190614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d90614b92565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a82018054610d1b90614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4790614b92565b8015610d945780601f10610d6957610100808354040283529160200191610d94565b820191906000526020600020905b815481529060010190602001808311610d7757829003601f168201915b5050505050815250509050919050565b6000806005541415610db95760009050610dea565b6000610de3600554610dd560648661385290919063ffffffff16565b61386890919063ffffffff16565b9050809150505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690614b14565b60405180910390fd5b610e948160085461387e90919063ffffffff16565b60088190555050565b6000600b80549050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190614b14565b60405180910390fd5b610f4f8160085461389490919063ffffffff16565b60088190555050565b600081600c600084815260200190815260200160002054149050919050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490614b14565b60405180910390fd5b8060068190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110c05750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690614c10565b60405180910390fd5b60005b83518110156112195760008482815181106111205761111f614b34565b5b60200260200101519050600084838151811061113f5761113e614b34565b5b60200260200101519050600084848151811061115e5761115d614b34565b5b602002602001015190506000801b600c600083815260200190815260200160002054146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790614c7c565b60405180910390fd5b6111eb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846138aa565b80600c600083815260200190815260200160002081905550505050808061121190614ccb565b915050611102565b5050505050565b6000808473ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161125c91906146a7565b60206040518083038186803b15801561127457600080fd5b505afa158015611288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ac9190614d29565b905060008473ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016112e991906146a7565b60206040518083038186803b15801561130157600080fd5b505afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190614d29565b90506000811161134857600080fd5b61137581611367670de0b6b3a76400008561386890919063ffffffff16565b61385290919063ffffffff16565b925050509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790614b14565b60405180910390fd5b600f60159054906101000a900460ff1615611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614da2565b60405180910390fd5b6001600f60156101000a81548160ff021916908315150217905550808273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016114b591906146a7565b60206040518083038186803b1580156114cd57600080fd5b505afa1580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115059190614d29565b1015611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90614e0e565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611582929190614e2e565b60206040518083038186803b15801561159a57600080fd5b505afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d29190614d29565b1015611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a90614ea3565b60405180910390fd5b61161f823330846139e0565b6000600f60156101000a81548160ff0219169083151502179055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590614b14565b60405180910390fd5b600f60159054906101000a900460ff161561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590614da2565b60405180910390fd5b6001600f60156101000a81548160ff0219169083151502179055508034101561177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390614f0f565b60405180910390fd5b6000600f60156101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190614b14565b60405180910390fd5b60075460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161188691906146a7565b60206040518083038186803b15801561189e57600080fd5b505afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d69190614d29565b1015611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90614e0e565b60405180910390fd5b61194460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336007546138aa565b6000600781905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590614b14565b60405180910390fd5b8060048190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614b14565b60405180910390fd5b600f60159054906101000a900460ff1615611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614da2565b60405180910390fd5b6001600f60156101000a81548160ff02191690831515021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b3f91906146a7565b60206040518083038186803b158015611b5757600080fd5b505afa158015611b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8f9190614d29565b9050600854811015611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd90614e0e565b60405180910390fd5b611c0e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff163360085484611c099190614f2f565b6138aa565b506000600f60156101000a81548160ff021916908315150217905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb390614b14565b60405180910390fd5b82600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080611df8600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611220565b9050611e3c6064611e2e600454611e20670de0b6b3a76400008661386890919063ffffffff16565b61385290919063ffffffff16565b61386890919063ffffffff16565b91505090565b60055481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600b8054905090506000611ec684611eb8611ea9611e9a60018a613b1990919063ffffffff16565b88613b2f90919063ffffffff16565b85613b4590919063ffffffff16565b613b1990919063ffffffff16565b90506000811215611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390614faf565b60405180910390fd5b6000611f218583613b4590919063ffffffff16565b90506000811215611f3157600090505b600082905083811115611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614faf565b60405180910390fd5b60008282611f879190614fcf565b67ffffffffffffffff811115611fa057611f9f6140b2565b5b604051908082528060200260200182016040528015611fd957816020015b611fc6613b91565b815260200190600190039081611fbe5790505b50905060005b8383131561230b576000600b611fff60018661387e90919063ffffffff16565b815481106120105761200f614b34565b5b90600052602060002090600b020160405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820180546120fa90614b92565b80601f016020809104026020016040519081016040528092919081815260200182805461212690614b92565b80156121735780601f1061214857610100808354040283529160200191612173565b820191906000526020600020905b81548152906001019060200180831161215657829003601f168201915b5050505050815260200160058201805461218c90614b92565b80601f01602080910402602001604051908101604052809291908181526020018280546121b890614b92565b80156122055780601f106121da57610100808354040283529160200191612205565b820191906000526020600020905b8154815290600101906020018083116121e857829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201805461224690614b92565b80601f016020809104026020016040519081016040528092919081815260200182805461227290614b92565b80156122bf5780601f10612294576101008083540402835291602001916122bf565b820191906000526020600020905b8154815290600101906020018083116122a257829003601f168201915b5050505050815250509050808383815181106122de576122dd614b34565b5b602002602001018190525081806122f490614ccb565b92505050828061230390615063565b935050611fdf565b81965050505050505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614b14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561241a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612411906150f8565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e590614b14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561255e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612555906150f8565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990614b14565b60405180910390fd5b8060058190555050565b6000600f60149054906101000a900460ff16905090565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600f60159054906101000a900460ff16156126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b990614da2565b60405180910390fd5b6001600f60156101000a81548160ff02191690831515021790555060001515600f60149054906101000a900460ff16151514612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90615164565b60405180910390fd5b61273b611d84565b34101561277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277490614f0f565b60405180910390fd5b6006548510156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b9906151d0565b60405180910390fd5b8460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161281c91906146a7565b60206040518083038186803b15801561283457600080fd5b505afa158015612848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286c9190614d29565b10156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490614e0e565b60405180910390fd5b8460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401612909929190614e2e565b60206040518083038186803b15801561292157600080fd5b505afa158015612935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129599190614d29565b101561299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190614ea3565b60405180910390fd5b6129c660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff163330886139e0565b60006129d186610da4565b905060006129e8828861387e90919063ffffffff16565b905060003490508260076000828254612a0191906151f0565b925050819055506000600b8054905090506000612a2042600033613b5b565b9050600b6040518061016001604052808381526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160038054612aa190614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054612acd90614b92565b8015612b1a5780601f10612aef57610100808354040283529160200191612b1a565b820191906000526020600020905b815481529060010190602001808311612afd57829003601f168201915b505050505081526020018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200187815260200185815260200142815260200143815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081525090806001815401808255809150506001900390600052602060002090600b02016000909190919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004019080519060200190612cb5929190613c1a565b5060a0820151816005019080519060200190612cd2929190613c1a565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a019080519060200190612d1a929190613c1a565b50505081600a60008381526020019081526020016000208190555080600c600083815260200190815260200160002081905550612d628460085461389490919063ffffffff16565b60088190555050505050506000600f60156101000a81548160ff0219169083151502179055505050505050565b60038054612d9c90614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054612dc890614b92565b8015612e155780601f10612dea57610100808354040283529160200191612e15565b820191906000526020600020905b815481529060010190602001808311612df857829003601f168201915b505050505081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60606000600b80549050905060008084905084600b805490501115612e8757612e8085600b8054905061387e90919063ffffffff16565b9150612e90565b600b8054905090505b600082905060008267ffffffffffffffff811115612eb157612eb06140b2565b5b604051908082528060200260200182016040528015612eea57816020015b612ed7613b91565b815260200190600190039081612ecf5790505b50905060005b85831015613207576000600b8481548110612f0e57612f0d614b34565b5b90600052602060002090600b020160405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482018054612ff890614b92565b80601f016020809104026020016040519081016040528092919081815260200182805461302490614b92565b80156130715780601f1061304657610100808354040283529160200191613071565b820191906000526020600020905b81548152906001019060200180831161305457829003601f168201915b5050505050815260200160058201805461308a90614b92565b80601f01602080910402602001604051908101604052809291908181526020018280546130b690614b92565b80156131035780601f106130d857610100808354040283529160200191613103565b820191906000526020600020905b8154815290600101906020018083116130e657829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201805461314490614b92565b80601f016020809104026020016040519081016040528092919081815260200182805461317090614b92565b80156131bd5780601f10613192576101008083540402835291602001916131bd565b820191906000526020600020905b8154815290600101906020018083116131a057829003601f168201915b5050505050815250509050808383806131d590614ccb565b9450815181106131e8576131e7614b34565b5b60200260200101819052505082806131ff90614ccb565b935050612ef0565b819650505050505050919050565b6000600454905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614b14565b60405180910390fd5b600f60159054906101000a900460ff16156132ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f690614da2565b60405180910390fd5b6001600f60156101000a81548160ff0219169083151502179055506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161336290615277565b60006040518083038185875af1925050503d806000811461339f576040519150601f19603f3d011682016040523d82523d6000602084013e6133a4565b606091505b50509050806133e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133df906152d8565b60405180910390fd5b506000600f60156101000a81548160ff021916908315150217905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348d90614b14565b60405180910390fd5b600f60159054906101000a900460ff16156134e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dd90614da2565b60405180910390fd5b6001600f60156101000a81548160ff021916908315150217905550613509612653565b81111561354b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354290615344565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161359390615277565b60006040518083038185875af1925050503d80600081146135d0576040519150601f19603f3d011682016040523d82523d6000602084013e6135d5565b606091505b5050905080613619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613610906152d8565b60405180910390fd5b506000600f60156101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136bf90614b14565b60405180910390fd5b600f60159054906101000a900460ff1615613718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370f90614da2565b60405180910390fd5b6001600f60156101000a81548160ff021916908315150217905550808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161376d91906146a7565b60206040518083038186803b15801561378557600080fd5b505afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190614d29565b10156137fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f590614e0e565b60405180910390fd5b6138098233836138aa565b6000600f60156101000a81548160ff0219169083151502179055505050565b60065481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081836138609190615393565b905092915050565b6000818361387691906153c4565b905092915050565b6000818361388c9190614f2f565b905092915050565b600081836138a291906151f0565b905092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016138dc92919061541e565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161392a9190615483565b6000604051808303816000865af19150503d8060008114613967576040519150601f19603f3d011682016040523d82523d6000602084013e61396c565b606091505b509150915081801561399a575060008151148061399957508080602001905181019061399891906154af565b5b5b6139d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d090615528565b60405180910390fd5b5050505050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401613a1493929190615548565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613a629190615483565b6000604051808303816000865af19150503d8060008114613a9f576040519150601f19603f3d011682016040523d82523d6000602084013e613aa4565b606091505b5091509150818015613ad25750600081511480613ad1575080806020019051810190613ad091906154af565b5b5b613b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b08906155f1565b60405180910390fd5b505050505050565b60008183613b279190615611565b905092915050565b60008183613b3d91906156a5565b905092915050565b60008183613b539190614fcf565b905092915050565b6000838284604051602001613b7293929190615825565b6040516020818303038152906040528051906020012090509392505050565b60405180610160016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054613c2690614b92565b90600052602060002090601f016020900481019282613c485760008555613c8f565b82601f10613c6157805160ff1916838001178555613c8f565b82800160010185558215613c8f579182015b82811115613c8e578251825591602001919060010190613c73565b5b509050613c9c9190613ca0565b5090565b5b80821115613cb9576000816000905550600101613ca1565b5090565b6000604051905090565b600080fd5b600080fd5b60008115159050919050565b613ce681613cd1565b8114613cf157600080fd5b50565b600081359050613d0381613cdd565b92915050565b600060208284031215613d1f57613d1e613cc7565b5b6000613d2d84828501613cf4565b91505092915050565b6000819050919050565b613d4981613d36565b8114613d5457600080fd5b50565b600081359050613d6681613d40565b92915050565b600060208284031215613d8257613d81613cc7565b5b6000613d9084828501613d57565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613dc482613d99565b9050919050565b613dd481613db9565b82525050565b6000606082019050613def6000830186613dcb565b613dfc6020830185613dcb565b613e096040830184613dcb565b949350505050565b613e1a81613d36565b82525050565b6000602082019050613e356000830184613e11565b92915050565b6000819050919050565b613e4e81613e3b565b8114613e5957600080fd5b50565b600081359050613e6b81613e45565b92915050565b600060208284031215613e8757613e86613cc7565b5b6000613e9584828501613e5c565b91505092915050565b613ea781613e3b565b82525050565b613eb681613db9565b82525050565b613ec581613d36565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f05578082015181840152602081019050613eea565b83811115613f14576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f3682613ecb565b613f408185613ed6565b9350613f50818560208601613ee7565b613f5981613f1a565b840191505092915050565b600061016083016000830151613f7d6000860182613e9e565b506020830151613f906020860182613ead565b506040830151613fa36040860182613ead565b506060830151613fb66060860182613ebc565b5060808301518482036080860152613fce8282613f2b565b91505060a083015184820360a0860152613fe88282613f2b565b91505060c0830151613ffd60c0860182613ebc565b5060e083015161401060e0860182613ebc565b50610100830151614025610100860182613ebc565b5061012083015161403a610120860182613ebc565b506101408301518482036101408601526140548282613f2b565b9150508091505092915050565b6000602082019050818103600083015261407b8184613f64565b905092915050565b61408c81613cd1565b82525050565b60006020820190506140a76000830184614083565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140ea82613f1a565b810181811067ffffffffffffffff82111715614109576141086140b2565b5b80604052505050565b600061411c613cbd565b905061412882826140e1565b919050565b600067ffffffffffffffff821115614148576141476140b2565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561417e5761417d6140b2565b5b61418782613f1a565b9050602081019050919050565b82818337600083830152505050565b60006141b66141b184614163565b614112565b9050828152602081018484840111156141d2576141d161415e565b5b6141dd848285614194565b509392505050565b600082601f8301126141fa576141f96140ad565b5b813561420a8482602086016141a3565b91505092915050565b60006142266142218461412d565b614112565b9050808382526020820190506020840283018581111561424957614248614159565b5b835b8181101561429057803567ffffffffffffffff81111561426e5761426d6140ad565b5b80860161427b89826141e5565b8552602085019450505060208101905061424b565b5050509392505050565b600082601f8301126142af576142ae6140ad565b5b81356142bf848260208601614213565b91505092915050565b600067ffffffffffffffff8211156142e3576142e26140b2565b5b602082029050602081019050919050565b6142fd81613db9565b811461430857600080fd5b50565b60008135905061431a816142f4565b92915050565b600061433361432e846142c8565b614112565b9050808382526020820190506020840283018581111561435657614355614159565b5b835b8181101561437f578061436b888261430b565b845260208401935050602081019050614358565b5050509392505050565b600082601f83011261439e5761439d6140ad565b5b81356143ae848260208601614320565b91505092915050565b600067ffffffffffffffff8211156143d2576143d16140b2565b5b602082029050602081019050919050565b60006143f66143f1846143b7565b614112565b9050808382526020820190506020840283018581111561441957614418614159565b5b835b81811015614442578061442e8882613d57565b84526020840193505060208101905061441b565b5050509392505050565b600082601f830112614461576144606140ad565b5b81356144718482602086016143e3565b91505092915050565b600067ffffffffffffffff821115614495576144946140b2565b5b602082029050602081019050919050565b60006144b96144b48461447a565b614112565b905080838252602082019050602084028301858111156144dc576144db614159565b5b835b8181101561450557806144f18882613e5c565b8452602084019350506020810190506144de565b5050509392505050565b600082601f830112614524576145236140ad565b5b81356145348482602086016144a6565b91505092915050565b6000806000806080858703121561455757614556613cc7565b5b600085013567ffffffffffffffff81111561457557614574613ccc565b5b6145818782880161429a565b945050602085013567ffffffffffffffff8111156145a2576145a1613ccc565b5b6145ae87828801614389565b935050604085013567ffffffffffffffff8111156145cf576145ce613ccc565b5b6145db8782880161444c565b925050606085013567ffffffffffffffff8111156145fc576145fb613ccc565b5b6146088782880161450f565b91505092959194509250565b60008060006060848603121561462d5761462c613cc7565b5b600061463b8682870161430b565b935050602061464c8682870161430b565b925050604061465d8682870161430b565b9150509250925092565b6000806040838503121561467e5761467d613cc7565b5b600061468c8582860161430b565b925050602061469d85828601613d57565b9150509250929050565b60006020820190506146bc6000830184613dcb565b92915050565b6000819050919050565b6146d5816146c2565b81146146e057600080fd5b50565b6000813590506146f2816146cc565b92915050565b6000806040838503121561470f5761470e613cc7565b5b600061471d858286016146e3565b925050602061472e858286016146e3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006101608301600083015161477d6000860182613e9e565b5060208301516147906020860182613ead565b5060408301516147a36040860182613ead565b5060608301516147b66060860182613ebc565b50608083015184820360808601526147ce8282613f2b565b91505060a083015184820360a08601526147e88282613f2b565b91505060c08301516147fd60c0860182613ebc565b5060e083015161481060e0860182613ebc565b50610100830151614825610100860182613ebc565b5061012083015161483a610120860182613ebc565b506101408301518482036101408601526148548282613f2b565b9150508091505092915050565b600061486d8383614764565b905092915050565b6000602082019050919050565b600061488d82614738565b6148978185614743565b9350836020820285016148a985614754565b8060005b858110156148e557848403895281516148c68582614861565b94506148d183614875565b925060208a019950506001810190506148ad565b50829750879550505050505092915050565b600060208201905081810360008301526149118184614882565b905092915050565b60006020828403121561492f5761492e613cc7565b5b600061493d8482850161430b565b91505092915050565b600080fd5b60008083601f840112614961576149606140ad565b5b8235905067ffffffffffffffff81111561497e5761497d614946565b5b60208301915083600182028301111561499a57614999614159565b5b9250929050565b6000806000806000606086880312156149bd576149bc613cc7565b5b60006149cb88828901613d57565b955050602086013567ffffffffffffffff8111156149ec576149eb613ccc565b5b6149f88882890161494b565b9450945050604086013567ffffffffffffffff811115614a1b57614a1a613ccc565b5b614a278882890161494b565b92509250509295509295909350565b600082825260208201905092915050565b6000614a5282613ecb565b614a5c8185614a36565b9350614a6c818560208601613ee7565b614a7581613f1a565b840191505092915050565b60006020820190508181036000830152614a9a8184614a47565b905092915050565b7f4f6e6c7920746865206f776e65722063616e20646f207468697320616374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614afe602183614a36565b9150614b0982614aa2565b604082019050919050565b60006020820190508181036000830152614b2d81614af1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614baa57607f821691505b60208210811415614bbe57614bbd614b63565b5b50919050565b7f4f6e6c792070726f6772616d206f72204f776e65720000000000000000000000600082015250565b6000614bfa601583614a36565b9150614c0582614bc4565b602082019050919050565b60006020820190508181036000830152614c2981614bed565b9050919050565b7f416c7265616479207472616e7366657265640000000000000000000000000000600082015250565b6000614c66601283614a36565b9150614c7182614c30565b602082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cd682613d36565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0957614d08614c9c565b5b600182019050919050565b600081519050614d2381613d40565b92915050565b600060208284031215614d3f57614d3e613cc7565b5b6000614d4d84828501614d14565b91505092915050565b7f4e6f2072652d656e7472616e6379000000000000000000000000000000000000600082015250565b6000614d8c600e83614a36565b9150614d9782614d56565b602082019050919050565b60006020820190508181036000830152614dbb81614d7f565b9050919050565b7f494e5355464953414e545f42414c414e43450000000000000000000000000000600082015250565b6000614df8601283614a36565b9150614e0382614dc2565b602082019050919050565b60006020820190508181036000830152614e2781614deb565b9050919050565b6000604082019050614e436000830185613dcb565b614e506020830184613dcb565b9392505050565b7f494e5355464953414e545f414c4c4f57414e4345000000000000000000000000600082015250565b6000614e8d601483614a36565b9150614e9882614e57565b602082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f5041594d454e545f41424f525400000000000000000000000000000000000000600082015250565b6000614ef9600d83614a36565b9150614f0482614ec3565b602082019050919050565b60006020820190508181036000830152614f2881614eec565b9050919050565b6000614f3a82613d36565b9150614f4583613d36565b925082821015614f5857614f57614c9c565b5b828203905092915050565b7f4f7574206f6620626f756e647300000000000000000000000000000000000000600082015250565b6000614f99600d83614a36565b9150614fa482614f63565b602082019050919050565b60006020820190508181036000830152614fc881614f8c565b9050919050565b6000614fda826146c2565b9150614fe5836146c2565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156150205761501f614c9c565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561505857615057614c9c565b5b828203905092915050565b600061506e826146c2565b91507f80000000000000000000000000000000000000000000000000000000000000008214156150a1576150a0614c9c565b5b600182039050919050565b7f4e6f207a65726f20616464726573730000000000000000000000000000000000600082015250565b60006150e2600f83614a36565b91506150ed826150ac565b602082019050919050565b60006020820190508181036000830152615111816150d5565b9050919050565b7f4272696467652061637475616c6c792070617573656400000000000000000000600082015250565b600061514e601683614a36565b915061515982615118565b602082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b7f494e5355464953414e545f5155414e5449545900000000000000000000000000600082015250565b60006151ba601383614a36565b91506151c582615184565b602082019050919050565b600060208201905081810360008301526151e9816151ad565b9050919050565b60006151fb82613d36565b915061520683613d36565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523b5761523a614c9c565b5b828201905092915050565b600081905092915050565b50565b6000615261600083615246565b915061526c82615251565b600082019050919050565b600061528282615254565b9150819050919050565b7f5472616e73666572206661696c65642100000000000000000000000000000000600082015250565b60006152c2601083614a36565b91506152cd8261528c565b602082019050919050565b600060208201905081810360008301526152f1816152b5565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061532e601483614a36565b9150615339826152f8565b602082019050919050565b6000602082019050818103600083015261535d81615321565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061539e82613d36565b91506153a983613d36565b9250826153b9576153b8615364565b5b828204905092915050565b60006153cf82613d36565b91506153da83613d36565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561541357615412614c9c565b5b828202905092915050565b60006040820190506154336000830185613dcb565b6154406020830184613e11565b9392505050565b600081519050919050565b600061545d82615447565b6154678185615246565b9350615477818560208601613ee7565b80840191505092915050565b600061548f8284615452565b915081905092915050565b6000815190506154a981613cdd565b92915050565b6000602082840312156154c5576154c4613cc7565b5b60006154d38482850161549a565b91505092915050565b7f5472616e7366657248656c7065723a205452414e534645525f4641494c454400600082015250565b6000615512601f83614a36565b915061551d826154dc565b602082019050919050565b6000602082019050818103600083015261554181615505565b9050919050565b600060608201905061555d6000830186613dcb565b61556a6020830185613dcb565b6155776040830184613e11565b949350505050565b7f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160008201527f494c454400000000000000000000000000000000000000000000000000000000602082015250565b60006155db602483614a36565b91506155e68261557f565b604082019050919050565b6000602082019050818103600083015261560a816155ce565b9050919050565b600061561c826146c2565b9150615627836146c2565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561566257615661614c9c565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561569a57615699614c9c565b5b828201905092915050565b60006156b0826146c2565b91506156bb836146c2565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821160008413600084131616156156fa576156f9614c9c565b5b817f8000000000000000000000000000000000000000000000000000000000000000058312600084126000841316161561573757615736614c9c565b5b827f8000000000000000000000000000000000000000000000000000000000000000058212600084136000841216161561577457615773614c9c565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05821260008412600084121616156157b1576157b0614c9c565b5b828202905092915050565b6000819050919050565b6157d76157d282613d36565b6157bc565b82525050565b60008160601b9050919050565b60006157f5826157dd565b9050919050565b6000615807826157ea565b9050919050565b61581f61581a82613db9565b6157fc565b82525050565b600061583182866157c6565b602082019150615841828561580e565b60148201915061585182846157c6565b60208201915081905094935050505056fea2646970667358221220759d741a3a7caae01becb151b16616a7151d6ff288cae22a7f106d3736db9f7d64736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000cdb37a4fbc2da5b78aa4e41a432792f9533e85cc0000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb1100000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c806381d1f9dc1161012e578063c763e5a1116100ab578063dd1917191161006f578063dd19171914610831578063f14210a614610848578063f3fef3a314610871578063f8228f7b1461089a578063fc0c546a146108c55761023b565b8063c763e5a114610748578063c860ebc614610773578063cdca09471461079e578063d55748ea146107c9578063db18ba7d146108065761023b565b8063a6f9dae1116100f2578063a6f9dae114610684578063a7a2b3c5146106ad578063b187bd26146106d6578063b69ef8a814610701578063c2c68e001461072c5761023b565b806381d1f9dc1461059d57806382149b39146105c85780638da5cb5b146105f3578063946c6a921461061e578063a5d531041461065b5761023b565b80633e035383116101bc5780635358fbda116101805780635358fbda146105015780635829d9441461051d578063649c6c56146105345780636fcd112b1461055d57806375045691146105745761023b565b80633e0353831461041e578063419f75fe1461044957806341b313881461047257806342ae278c1461049b57806347e7ef24146104d85761023b565b80632bda82aa116102035780632bda82aa14610327578063320c0a5f1461036457806336f3f96f1461038d5780633be46cd6146103b85780633d9534b7146103e15761023b565b806316c38b3c1461024057806318fdc2c814610269578063191622ff146102925780631d774838146102bf578063260958a5146102ea575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613d09565b6108f0565b005b34801561027557600080fd5b50610290600480360381019061028b9190613d6c565b61099d565b005b34801561029e57600080fd5b506102a7610a37565b6040516102b693929190613dda565b60405180910390f35b3480156102cb57600080fd5b506102d4610ab0565b6040516102e19190613e20565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c9190613e71565b610ab6565b60405161031e9190614061565b60405180910390f35b34801561033357600080fd5b5061034e60048036038101906103499190613d6c565b610da4565b60405161035b9190613e20565b60405180910390f35b34801561037057600080fd5b5061038b60048036038101906103869190613d6c565b610def565b005b34801561039957600080fd5b506103a2610e9d565b6040516103af9190613e20565b60405180910390f35b3480156103c457600080fd5b506103df60048036038101906103da9190613d6c565b610eaa565b005b3480156103ed57600080fd5b5061040860048036038101906104039190613e71565b610f58565b6040516104159190614092565b60405180910390f35b34801561042a57600080fd5b50610433610f77565b6040516104409190613e20565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b9190613d6c565b610f7d565b005b34801561047e57600080fd5b506104996004803603810190610494919061453d565b611017565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190614614565b611220565b6040516104cf9190613e20565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190614667565b611380565b005b61051b60048036038101906105169190613d6c565b61163e565b005b34801561052957600080fd5b5061053261179a565b005b34801561054057600080fd5b5061055b60048036038101906105569190613d6c565b61194e565b005b34801561056957600080fd5b506105726119e8565b005b34801561058057600080fd5b5061059b60048036038101906105969190614614565b611c2c565b005b3480156105a957600080fd5b506105b2611d84565b6040516105bf9190613e20565b60405180910390f35b3480156105d457600080fd5b506105dd611e42565b6040516105ea9190613e20565b60405180910390f35b3480156105ff57600080fd5b50610608611e48565b60405161061591906146a7565b60405180910390f35b34801561062a57600080fd5b50610645600480360381019061064091906146f8565b611e6e565b60405161065291906148f7565b60405180910390f35b34801561066757600080fd5b50610682600480360381019061067d9190614919565b61231a565b005b34801561069057600080fd5b506106ab60048036038101906106a69190614919565b61245e565b005b3480156106b957600080fd5b506106d460048036038101906106cf9190613d6c565b6125a2565b005b3480156106e257600080fd5b506106eb61263c565b6040516106f89190614092565b60405180910390f35b34801561070d57600080fd5b50610716612653565b6040516107239190613e20565b60405180910390f35b610746600480360381019061074191906149a1565b612672565b005b34801561075457600080fd5b5061075d612d8f565b60405161076a9190614a80565b60405180910390f35b34801561077f57600080fd5b50610788612e1d565b60405161079591906146a7565b60405180910390f35b3480156107aa57600080fd5b506107b3612e43565b6040516107c09190613e20565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb9190613d6c565b612e49565b6040516107fd91906148f7565b60405180910390f35b34801561081257600080fd5b5061081b613215565b6040516108289190613e20565b60405180910390f35b34801561083d57600080fd5b5061084661321f565b005b34801561085457600080fd5b5061086f600480360381019061086a9190613d6c565b613406565b005b34801561087d57600080fd5b5061089860048036038101906108939190614667565b613638565b005b3480156108a657600080fd5b506108af613828565b6040516108bc9190613e20565b60405180910390f35b3480156108d157600080fd5b506108da61382e565b6040516108e791906146a7565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610980576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097790614b14565b60405180910390fd5b80600f60146101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490614b14565b60405180910390fd5b8060048190555050565b6000806000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b60075481565b610abe613b91565b600b600a60008481526020019081526020016000205481548110610ae557610ae4614b34565b5b90600052602060002090600b020160405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482018054610bcf90614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfb90614b92565b8015610c485780601f10610c1d57610100808354040283529160200191610c48565b820191906000526020600020905b815481529060010190602001808311610c2b57829003601f168201915b50505050508152602001600582018054610c6190614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d90614b92565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a82018054610d1b90614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4790614b92565b8015610d945780601f10610d6957610100808354040283529160200191610d94565b820191906000526020600020905b815481529060010190602001808311610d7757829003601f168201915b5050505050815250509050919050565b6000806005541415610db95760009050610dea565b6000610de3600554610dd560648661385290919063ffffffff16565b61386890919063ffffffff16565b9050809150505b919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7690614b14565b60405180910390fd5b610e948160085461387e90919063ffffffff16565b60088190555050565b6000600b80549050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190614b14565b60405180910390fd5b610f4f8160085461389490919063ffffffff16565b60088190555050565b600081600c600084815260200190815260200160002054149050919050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100490614b14565b60405180910390fd5b8060068190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110c05750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690614c10565b60405180910390fd5b60005b83518110156112195760008482815181106111205761111f614b34565b5b60200260200101519050600084838151811061113f5761113e614b34565b5b60200260200101519050600084848151811061115e5761115d614b34565b5b602002602001015190506000801b600c600083815260200190815260200160002054146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790614c7c565b60405180910390fd5b6111eb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846138aa565b80600c600083815260200190815260200160002081905550505050808061121190614ccb565b915050611102565b5050505050565b6000808473ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161125c91906146a7565b60206040518083038186803b15801561127457600080fd5b505afa158015611288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ac9190614d29565b905060008473ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016112e991906146a7565b60206040518083038186803b15801561130157600080fd5b505afa158015611315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113399190614d29565b90506000811161134857600080fd5b61137581611367670de0b6b3a76400008561386890919063ffffffff16565b61385290919063ffffffff16565b925050509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790614b14565b60405180910390fd5b600f60159054906101000a900460ff1615611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145790614da2565b60405180910390fd5b6001600f60156101000a81548160ff021916908315150217905550808273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016114b591906146a7565b60206040518083038186803b1580156114cd57600080fd5b505afa1580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115059190614d29565b1015611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90614e0e565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611582929190614e2e565b60206040518083038186803b15801561159a57600080fd5b505afa1580156115ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d29190614d29565b1015611613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160a90614ea3565b60405180910390fd5b61161f823330846139e0565b6000600f60156101000a81548160ff0219169083151502179055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c590614b14565b60405180910390fd5b600f60159054906101000a900460ff161561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590614da2565b60405180910390fd5b6001600f60156101000a81548160ff0219169083151502179055508034101561177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177390614f0f565b60405180910390fd5b6000600f60156101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190614b14565b60405180910390fd5b60075460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161188691906146a7565b60206040518083038186803b15801561189e57600080fd5b505afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d69190614d29565b1015611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90614e0e565b60405180910390fd5b61194460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16336007546138aa565b6000600781905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590614b14565b60405180910390fd5b8060048190555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614b14565b60405180910390fd5b600f60159054906101000a900460ff1615611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90614da2565b60405180910390fd5b6001600f60156101000a81548160ff02191690831515021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611b3f91906146a7565b60206040518083038186803b158015611b5757600080fd5b505afa158015611b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8f9190614d29565b9050600854811015611bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcd90614e0e565b60405180910390fd5b611c0e60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff163360085484611c099190614f2f565b6138aa565b506000600f60156101000a81548160ff021916908315150217905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb390614b14565b60405180910390fd5b82600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080611df8600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611220565b9050611e3c6064611e2e600454611e20670de0b6b3a76400008661386890919063ffffffff16565b61385290919063ffffffff16565b61386890919063ffffffff16565b91505090565b60055481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000600b8054905090506000611ec684611eb8611ea9611e9a60018a613b1990919063ffffffff16565b88613b2f90919063ffffffff16565b85613b4590919063ffffffff16565b613b1990919063ffffffff16565b90506000811215611f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0390614faf565b60405180910390fd5b6000611f218583613b4590919063ffffffff16565b90506000811215611f3157600090505b600082905083811115611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614faf565b60405180910390fd5b60008282611f879190614fcf565b67ffffffffffffffff811115611fa057611f9f6140b2565b5b604051908082528060200260200182016040528015611fd957816020015b611fc6613b91565b815260200190600190039081611fbe5790505b50905060005b8383131561230b576000600b611fff60018661387e90919063ffffffff16565b815481106120105761200f614b34565b5b90600052602060002090600b020160405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820180546120fa90614b92565b80601f016020809104026020016040519081016040528092919081815260200182805461212690614b92565b80156121735780601f1061214857610100808354040283529160200191612173565b820191906000526020600020905b81548152906001019060200180831161215657829003601f168201915b5050505050815260200160058201805461218c90614b92565b80601f01602080910402602001604051908101604052809291908181526020018280546121b890614b92565b80156122055780601f106121da57610100808354040283529160200191612205565b820191906000526020600020905b8154815290600101906020018083116121e857829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201805461224690614b92565b80601f016020809104026020016040519081016040528092919081815260200182805461227290614b92565b80156122bf5780601f10612294576101008083540402835291602001916122bf565b820191906000526020600020905b8154815290600101906020018083116122a257829003601f168201915b5050505050815250509050808383815181106122de576122dd614b34565b5b602002602001018190525081806122f490614ccb565b92505050828061230390615063565b935050611fdf565b81965050505050505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614b14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561241a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612411906150f8565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e590614b14565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561255e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612555906150f8565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262990614b14565b60405180910390fd5b8060058190555050565b6000600f60149054906101000a900460ff16905090565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600f60159054906101000a900460ff16156126c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b990614da2565b60405180910390fd5b6001600f60156101000a81548160ff02191690831515021790555060001515600f60149054906101000a900460ff16151514612733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272a90615164565b60405180910390fd5b61273b611d84565b34101561277d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277490614f0f565b60405180910390fd5b6006548510156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b9906151d0565b60405180910390fd5b8460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161281c91906146a7565b60206040518083038186803b15801561283457600080fd5b505afa158015612848573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286c9190614d29565b10156128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a490614e0e565b60405180910390fd5b8460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401612909929190614e2e565b60206040518083038186803b15801561292157600080fd5b505afa158015612935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129599190614d29565b101561299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190614ea3565b60405180910390fd5b6129c660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff163330886139e0565b60006129d186610da4565b905060006129e8828861387e90919063ffffffff16565b905060003490508260076000828254612a0191906151f0565b925050819055506000600b8054905090506000612a2042600033613b5b565b9050600b6040518061016001604052808381526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200186815260200160038054612aa190614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054612acd90614b92565b8015612b1a5780601f10612aef57610100808354040283529160200191612b1a565b820191906000526020600020905b815481529060010190602001808311612afd57829003601f168201915b505050505081526020018b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200187815260200185815260200142815260200143815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505081525090806001815401808255809150506001900390600052602060002090600b02016000909190919091506000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004019080519060200190612cb5929190613c1a565b5060a0820151816005019080519060200190612cd2929190613c1a565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a019080519060200190612d1a929190613c1a565b50505081600a60008381526020019081526020016000208190555080600c600083815260200190815260200160002081905550612d628460085461389490919063ffffffff16565b60088190555050505050506000600f60156101000a81548160ff0219169083151502179055505050505050565b60038054612d9c90614b92565b80601f0160208091040260200160405190810160405280929190818152602001828054612dc890614b92565b8015612e155780601f10612dea57610100808354040283529160200191612e15565b820191906000526020600020905b815481529060010190602001808311612df857829003601f168201915b505050505081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60606000600b80549050905060008084905084600b805490501115612e8757612e8085600b8054905061387e90919063ffffffff16565b9150612e90565b600b8054905090505b600082905060008267ffffffffffffffff811115612eb157612eb06140b2565b5b604051908082528060200260200182016040528015612eea57816020015b612ed7613b91565b815260200190600190039081612ecf5790505b50905060005b85831015613207576000600b8481548110612f0e57612f0d614b34565b5b90600052602060002090600b020160405180610160016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152602001600482018054612ff890614b92565b80601f016020809104026020016040519081016040528092919081815260200182805461302490614b92565b80156130715780601f1061304657610100808354040283529160200191613071565b820191906000526020600020905b81548152906001019060200180831161305457829003601f168201915b5050505050815260200160058201805461308a90614b92565b80601f01602080910402602001604051908101604052809291908181526020018280546130b690614b92565b80156131035780601f106130d857610100808354040283529160200191613103565b820191906000526020600020905b8154815290600101906020018083116130e657829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201805461314490614b92565b80601f016020809104026020016040519081016040528092919081815260200182805461317090614b92565b80156131bd5780601f10613192576101008083540402835291602001916131bd565b820191906000526020600020905b8154815290600101906020018083116131a057829003601f168201915b5050505050815250509050808383806131d590614ccb565b9450815181106131e8576131e7614b34565b5b60200260200101819052505082806131ff90614ccb565b935050612ef0565b819650505050505050919050565b6000600454905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a690614b14565b60405180910390fd5b600f60159054906101000a900460ff16156132ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f690614da2565b60405180910390fd5b6001600f60156101000a81548160ff0219169083151502179055506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161336290615277565b60006040518083038185875af1925050503d806000811461339f576040519150601f19603f3d011682016040523d82523d6000602084013e6133a4565b606091505b50509050806133e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133df906152d8565b60405180910390fd5b506000600f60156101000a81548160ff021916908315150217905550565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348d90614b14565b60405180910390fd5b600f60159054906101000a900460ff16156134e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dd90614da2565b60405180910390fd5b6001600f60156101000a81548160ff021916908315150217905550613509612653565b81111561354b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354290615344565b60405180910390fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161359390615277565b60006040518083038185875af1925050503d80600081146135d0576040519150601f19603f3d011682016040523d82523d6000602084013e6135d5565b606091505b5050905080613619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613610906152d8565b60405180910390fd5b506000600f60156101000a81548160ff02191690831515021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146136c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136bf90614b14565b60405180910390fd5b600f60159054906101000a900460ff1615613718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370f90614da2565b60405180910390fd5b6001600f60156101000a81548160ff021916908315150217905550808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161376d91906146a7565b60206040518083038186803b15801561378557600080fd5b505afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190614d29565b10156137fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f590614e0e565b60405180910390fd5b6138098233836138aa565b6000600f60156101000a81548160ff0219169083151502179055505050565b60065481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081836138609190615393565b905092915050565b6000818361387691906153c4565b905092915050565b6000818361388c9190614f2f565b905092915050565b600081836138a291906151f0565b905092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016138dc92919061541e565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161392a9190615483565b6000604051808303816000865af19150503d8060008114613967576040519150601f19603f3d011682016040523d82523d6000602084013e61396c565b606091505b509150915081801561399a575060008151148061399957508080602001905181019061399891906154af565b5b5b6139d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139d090615528565b60405180910390fd5b5050505050565b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401613a1493929190615548565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051613a629190615483565b6000604051808303816000865af19150503d8060008114613a9f576040519150601f19603f3d011682016040523d82523d6000602084013e613aa4565b606091505b5091509150818015613ad25750600081511480613ad1575080806020019051810190613ad091906154af565b5b5b613b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b08906155f1565b60405180910390fd5b505050505050565b60008183613b279190615611565b905092915050565b60008183613b3d91906156a5565b905092915050565b60008183613b539190614fcf565b905092915050565b6000838284604051602001613b7293929190615825565b6040516020818303038152906040528051906020012090509392505050565b60405180610160016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001606081525090565b828054613c2690614b92565b90600052602060002090601f016020900481019282613c485760008555613c8f565b82601f10613c6157805160ff1916838001178555613c8f565b82800160010185558215613c8f579182015b82811115613c8e578251825591602001919060010190613c73565b5b509050613c9c9190613ca0565b5090565b5b80821115613cb9576000816000905550600101613ca1565b5090565b6000604051905090565b600080fd5b600080fd5b60008115159050919050565b613ce681613cd1565b8114613cf157600080fd5b50565b600081359050613d0381613cdd565b92915050565b600060208284031215613d1f57613d1e613cc7565b5b6000613d2d84828501613cf4565b91505092915050565b6000819050919050565b613d4981613d36565b8114613d5457600080fd5b50565b600081359050613d6681613d40565b92915050565b600060208284031215613d8257613d81613cc7565b5b6000613d9084828501613d57565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613dc482613d99565b9050919050565b613dd481613db9565b82525050565b6000606082019050613def6000830186613dcb565b613dfc6020830185613dcb565b613e096040830184613dcb565b949350505050565b613e1a81613d36565b82525050565b6000602082019050613e356000830184613e11565b92915050565b6000819050919050565b613e4e81613e3b565b8114613e5957600080fd5b50565b600081359050613e6b81613e45565b92915050565b600060208284031215613e8757613e86613cc7565b5b6000613e9584828501613e5c565b91505092915050565b613ea781613e3b565b82525050565b613eb681613db9565b82525050565b613ec581613d36565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f05578082015181840152602081019050613eea565b83811115613f14576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f3682613ecb565b613f408185613ed6565b9350613f50818560208601613ee7565b613f5981613f1a565b840191505092915050565b600061016083016000830151613f7d6000860182613e9e565b506020830151613f906020860182613ead565b506040830151613fa36040860182613ead565b506060830151613fb66060860182613ebc565b5060808301518482036080860152613fce8282613f2b565b91505060a083015184820360a0860152613fe88282613f2b565b91505060c0830151613ffd60c0860182613ebc565b5060e083015161401060e0860182613ebc565b50610100830151614025610100860182613ebc565b5061012083015161403a610120860182613ebc565b506101408301518482036101408601526140548282613f2b565b9150508091505092915050565b6000602082019050818103600083015261407b8184613f64565b905092915050565b61408c81613cd1565b82525050565b60006020820190506140a76000830184614083565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140ea82613f1a565b810181811067ffffffffffffffff82111715614109576141086140b2565b5b80604052505050565b600061411c613cbd565b905061412882826140e1565b919050565b600067ffffffffffffffff821115614148576141476140b2565b5b602082029050602081019050919050565b600080fd5b600080fd5b600067ffffffffffffffff82111561417e5761417d6140b2565b5b61418782613f1a565b9050602081019050919050565b82818337600083830152505050565b60006141b66141b184614163565b614112565b9050828152602081018484840111156141d2576141d161415e565b5b6141dd848285614194565b509392505050565b600082601f8301126141fa576141f96140ad565b5b813561420a8482602086016141a3565b91505092915050565b60006142266142218461412d565b614112565b9050808382526020820190506020840283018581111561424957614248614159565b5b835b8181101561429057803567ffffffffffffffff81111561426e5761426d6140ad565b5b80860161427b89826141e5565b8552602085019450505060208101905061424b565b5050509392505050565b600082601f8301126142af576142ae6140ad565b5b81356142bf848260208601614213565b91505092915050565b600067ffffffffffffffff8211156142e3576142e26140b2565b5b602082029050602081019050919050565b6142fd81613db9565b811461430857600080fd5b50565b60008135905061431a816142f4565b92915050565b600061433361432e846142c8565b614112565b9050808382526020820190506020840283018581111561435657614355614159565b5b835b8181101561437f578061436b888261430b565b845260208401935050602081019050614358565b5050509392505050565b600082601f83011261439e5761439d6140ad565b5b81356143ae848260208601614320565b91505092915050565b600067ffffffffffffffff8211156143d2576143d16140b2565b5b602082029050602081019050919050565b60006143f66143f1846143b7565b614112565b9050808382526020820190506020840283018581111561441957614418614159565b5b835b81811015614442578061442e8882613d57565b84526020840193505060208101905061441b565b5050509392505050565b600082601f830112614461576144606140ad565b5b81356144718482602086016143e3565b91505092915050565b600067ffffffffffffffff821115614495576144946140b2565b5b602082029050602081019050919050565b60006144b96144b48461447a565b614112565b905080838252602082019050602084028301858111156144dc576144db614159565b5b835b8181101561450557806144f18882613e5c565b8452602084019350506020810190506144de565b5050509392505050565b600082601f830112614524576145236140ad565b5b81356145348482602086016144a6565b91505092915050565b6000806000806080858703121561455757614556613cc7565b5b600085013567ffffffffffffffff81111561457557614574613ccc565b5b6145818782880161429a565b945050602085013567ffffffffffffffff8111156145a2576145a1613ccc565b5b6145ae87828801614389565b935050604085013567ffffffffffffffff8111156145cf576145ce613ccc565b5b6145db8782880161444c565b925050606085013567ffffffffffffffff8111156145fc576145fb613ccc565b5b6146088782880161450f565b91505092959194509250565b60008060006060848603121561462d5761462c613cc7565b5b600061463b8682870161430b565b935050602061464c8682870161430b565b925050604061465d8682870161430b565b9150509250925092565b6000806040838503121561467e5761467d613cc7565b5b600061468c8582860161430b565b925050602061469d85828601613d57565b9150509250929050565b60006020820190506146bc6000830184613dcb565b92915050565b6000819050919050565b6146d5816146c2565b81146146e057600080fd5b50565b6000813590506146f2816146cc565b92915050565b6000806040838503121561470f5761470e613cc7565b5b600061471d858286016146e3565b925050602061472e858286016146e3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006101608301600083015161477d6000860182613e9e565b5060208301516147906020860182613ead565b5060408301516147a36040860182613ead565b5060608301516147b66060860182613ebc565b50608083015184820360808601526147ce8282613f2b565b91505060a083015184820360a08601526147e88282613f2b565b91505060c08301516147fd60c0860182613ebc565b5060e083015161481060e0860182613ebc565b50610100830151614825610100860182613ebc565b5061012083015161483a610120860182613ebc565b506101408301518482036101408601526148548282613f2b565b9150508091505092915050565b600061486d8383614764565b905092915050565b6000602082019050919050565b600061488d82614738565b6148978185614743565b9350836020820285016148a985614754565b8060005b858110156148e557848403895281516148c68582614861565b94506148d183614875565b925060208a019950506001810190506148ad565b50829750879550505050505092915050565b600060208201905081810360008301526149118184614882565b905092915050565b60006020828403121561492f5761492e613cc7565b5b600061493d8482850161430b565b91505092915050565b600080fd5b60008083601f840112614961576149606140ad565b5b8235905067ffffffffffffffff81111561497e5761497d614946565b5b60208301915083600182028301111561499a57614999614159565b5b9250929050565b6000806000806000606086880312156149bd576149bc613cc7565b5b60006149cb88828901613d57565b955050602086013567ffffffffffffffff8111156149ec576149eb613ccc565b5b6149f88882890161494b565b9450945050604086013567ffffffffffffffff811115614a1b57614a1a613ccc565b5b614a278882890161494b565b92509250509295509295909350565b600082825260208201905092915050565b6000614a5282613ecb565b614a5c8185614a36565b9350614a6c818560208601613ee7565b614a7581613f1a565b840191505092915050565b60006020820190508181036000830152614a9a8184614a47565b905092915050565b7f4f6e6c7920746865206f776e65722063616e20646f207468697320616374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614afe602183614a36565b9150614b0982614aa2565b604082019050919050565b60006020820190508181036000830152614b2d81614af1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614baa57607f821691505b60208210811415614bbe57614bbd614b63565b5b50919050565b7f4f6e6c792070726f6772616d206f72204f776e65720000000000000000000000600082015250565b6000614bfa601583614a36565b9150614c0582614bc4565b602082019050919050565b60006020820190508181036000830152614c2981614bed565b9050919050565b7f416c7265616479207472616e7366657265640000000000000000000000000000600082015250565b6000614c66601283614a36565b9150614c7182614c30565b602082019050919050565b60006020820190508181036000830152614c9581614c59565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cd682613d36565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614d0957614d08614c9c565b5b600182019050919050565b600081519050614d2381613d40565b92915050565b600060208284031215614d3f57614d3e613cc7565b5b6000614d4d84828501614d14565b91505092915050565b7f4e6f2072652d656e7472616e6379000000000000000000000000000000000000600082015250565b6000614d8c600e83614a36565b9150614d9782614d56565b602082019050919050565b60006020820190508181036000830152614dbb81614d7f565b9050919050565b7f494e5355464953414e545f42414c414e43450000000000000000000000000000600082015250565b6000614df8601283614a36565b9150614e0382614dc2565b602082019050919050565b60006020820190508181036000830152614e2781614deb565b9050919050565b6000604082019050614e436000830185613dcb565b614e506020830184613dcb565b9392505050565b7f494e5355464953414e545f414c4c4f57414e4345000000000000000000000000600082015250565b6000614e8d601483614a36565b9150614e9882614e57565b602082019050919050565b60006020820190508181036000830152614ebc81614e80565b9050919050565b7f5041594d454e545f41424f525400000000000000000000000000000000000000600082015250565b6000614ef9600d83614a36565b9150614f0482614ec3565b602082019050919050565b60006020820190508181036000830152614f2881614eec565b9050919050565b6000614f3a82613d36565b9150614f4583613d36565b925082821015614f5857614f57614c9c565b5b828203905092915050565b7f4f7574206f6620626f756e647300000000000000000000000000000000000000600082015250565b6000614f99600d83614a36565b9150614fa482614f63565b602082019050919050565b60006020820190508181036000830152614fc881614f8c565b9050919050565b6000614fda826146c2565b9150614fe5836146c2565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156150205761501f614c9c565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561505857615057614c9c565b5b828203905092915050565b600061506e826146c2565b91507f80000000000000000000000000000000000000000000000000000000000000008214156150a1576150a0614c9c565b5b600182039050919050565b7f4e6f207a65726f20616464726573730000000000000000000000000000000000600082015250565b60006150e2600f83614a36565b91506150ed826150ac565b602082019050919050565b60006020820190508181036000830152615111816150d5565b9050919050565b7f4272696467652061637475616c6c792070617573656400000000000000000000600082015250565b600061514e601683614a36565b915061515982615118565b602082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b7f494e5355464953414e545f5155414e5449545900000000000000000000000000600082015250565b60006151ba601383614a36565b91506151c582615184565b602082019050919050565b600060208201905081810360008301526151e9816151ad565b9050919050565b60006151fb82613d36565b915061520683613d36565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561523b5761523a614c9c565b5b828201905092915050565b600081905092915050565b50565b6000615261600083615246565b915061526c82615251565b600082019050919050565b600061528282615254565b9150819050919050565b7f5472616e73666572206661696c65642100000000000000000000000000000000600082015250565b60006152c2601083614a36565b91506152cd8261528c565b602082019050919050565b600060208201905081810360008301526152f1816152b5565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061532e601483614a36565b9150615339826152f8565b602082019050919050565b6000602082019050818103600083015261535d81615321565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061539e82613d36565b91506153a983613d36565b9250826153b9576153b8615364565b5b828204905092915050565b60006153cf82613d36565b91506153da83613d36565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561541357615412614c9c565b5b828202905092915050565b60006040820190506154336000830185613dcb565b6154406020830184613e11565b9392505050565b600081519050919050565b600061545d82615447565b6154678185615246565b9350615477818560208601613ee7565b80840191505092915050565b600061548f8284615452565b915081905092915050565b6000815190506154a981613cdd565b92915050565b6000602082840312156154c5576154c4613cc7565b5b60006154d38482850161549a565b91505092915050565b7f5472616e7366657248656c7065723a205452414e534645525f4641494c454400600082015250565b6000615512601f83614a36565b915061551d826154dc565b602082019050919050565b6000602082019050818103600083015261554181615505565b9050919050565b600060608201905061555d6000830186613dcb565b61556a6020830185613dcb565b6155776040830184613e11565b949350505050565b7f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160008201527f494c454400000000000000000000000000000000000000000000000000000000602082015250565b60006155db602483614a36565b91506155e68261557f565b604082019050919050565b6000602082019050818103600083015261560a816155ce565b9050919050565b600061561c826146c2565b9150615627836146c2565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561566257615661614c9c565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561569a57615699614c9c565b5b828201905092915050565b60006156b0826146c2565b91506156bb836146c2565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821160008413600084131616156156fa576156f9614c9c565b5b817f8000000000000000000000000000000000000000000000000000000000000000058312600084126000841316161561573757615736614c9c565b5b827f8000000000000000000000000000000000000000000000000000000000000000058212600084136000841216161561577457615773614c9c565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05821260008412600084121616156157b1576157b0614c9c565b5b828202905092915050565b6000819050919050565b6157d76157d282613d36565b6157bc565b82525050565b60008160601b9050919050565b60006157f5826157dd565b9050919050565b6000615807826157ea565b9050919050565b61581f61581a82613db9565b6157fc565b82525050565b600061583182866157c6565b602082019150615841828561580e565b60148201915061585182846157c6565b60208201915081905094935050505056fea2646970667358221220759d741a3a7caae01becb151b16616a7151d6ff288cae22a7f106d3736db9f7d64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000cdb37a4fbc2da5b78aa4e41a432792f9533e85cc0000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb1100000000000000000000000000000000000000000000000000000000000000034554480000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _bridgeChain (string): ETH
Arg [1] : _token (address): 0xCdB37A4fBC2Da5b78aA4E41a432792f9533e85Cc
Arg [2] : _feesInDollar (uint256): 10000000000000000000
Arg [3] : _feesInCDTPercentage (uint256): 0
Arg [4] : _dex_in (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [5] : _dex_out (address): 0x6B175474E89094C44Da98b954EedeAC495271d0F
Arg [6] : _dex_pool (address): 0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [1] : 000000000000000000000000cdb37a4fbc2da5b78aa4e41a432792f9533e85cc
Arg [2] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [5] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [6] : 000000000000000000000000a478c2975ab1ea89e8196811f51a7b7ade33eb11
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4554480000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
OVERVIEW
Ethereum Bridge Contract (Liquidity represents the liquidity of the others blockchains)Loading...
Loading
[ Download: CSV Export ]
[ 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.