More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,172 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Double Swap Exac... | 64810994 | 116 days ago | IN | 0 POL | 0.0096888 | ||||
Double Swap Exac... | 64643984 | 120 days ago | IN | 0 POL | 0.07534169 | ||||
Remove Liquidity | 63670570 | 144 days ago | IN | 0 POL | 0.02015888 | ||||
Remove Liquidity | 63605782 | 146 days ago | IN | 0 POL | 0.00474147 | ||||
Remove Liquidity | 63322131 | 153 days ago | IN | 0 POL | 0.00474147 | ||||
Remove Liquidity | 63314859 | 153 days ago | IN | 0 POL | 0.00831172 | ||||
Remove Liquidity | 63312387 | 153 days ago | IN | 0 POL | 0.0143871 | ||||
Remove Liquidity | 63112322 | 158 days ago | IN | 0 POL | 0.02448223 | ||||
Remove Liquidity | 62913538 | 163 days ago | IN | 0 POL | 0.00528603 | ||||
Remove Liquidity | 62894171 | 163 days ago | IN | 0 POL | 0.00714089 | ||||
Remove Liquidity | 62870312 | 164 days ago | IN | 0 POL | 0.00603246 | ||||
Remove Liquidity | 62867617 | 164 days ago | IN | 0 POL | 0.00525411 | ||||
Remove Liquidity | 62866897 | 164 days ago | IN | 0 POL | 0.00474111 | ||||
Remove Liquidity | 62838900 | 165 days ago | IN | 0 POL | 0.00525375 | ||||
Remove Liquidity | 62822056 | 165 days ago | IN | 0 POL | 0.02933245 | ||||
Remove Liquidity | 62747467 | 167 days ago | IN | 0 POL | 0.00473808 | ||||
Remove Liquidity | 62636298 | 170 days ago | IN | 0 POL | 0.00474147 | ||||
Remove Liquidity | 62630091 | 170 days ago | IN | 0 POL | 0.00474271 | ||||
Remove Liquidity | 62583107 | 171 days ago | IN | 0 POL | 0.00934125 | ||||
Add Liquidity | 62582966 | 171 days ago | IN | 0 POL | 0.0185618 | ||||
Remove Liquidity | 62553449 | 172 days ago | IN | 0 POL | 0.0162487 | ||||
Remove Liquidity | 62553423 | 172 days ago | IN | 0 POL | 0.0166898 | ||||
Remove Liquidity | 62510238 | 173 days ago | IN | 0 POL | 0.00622749 | ||||
Remove Liquidity | 62510063 | 173 days ago | IN | 0 POL | 0.00605932 | ||||
Remove Liquidity | 62507390 | 173 days ago | IN | 0 POL | 0.0052546 |
Loading...
Loading
Contract Name:
SwapRouter
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: unlicensed // (c) Copyright 2024 Kolibri GmbH, all rights reserved pragma solidity ^0.8.9; import '../../core/interfaces/one-to-one/ISwapFactory.sol'; import '../interfaces/one-to-one/ISwapRouter.sol'; import '../../core/interfaces/ISwapPair.sol'; import '../../core/interfaces/ISwapERC20.sol'; import '../libraries/SafeMath.sol'; contract SwapRouter is ISwapRouter { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'SwapRouter: EXPIRED'); _; } uint private unlocked = 1; modifier lock() { require(unlocked == 1, 'Swap: LOCKED'); unlocked = 0; _; unlocked = 1; } modifier onlyNormal() { if (ISwapFactory(factory).getEoaWhitelist(msg.sender)) { } else { require(tx.origin == msg.sender, 'SwapRouter: onlyNormal failed'); } _; } modifier once(address pair) { if (!ISwapFactory(factory).getOnce(pair, msg.sender)) { } else { if (ISwapFactory(factory).getEoaWhitelist(msg.sender)) { } else { require(false, 'SwapRouter: Once failed'); } } _; ISwapFactory(factory).addOnce(pair, msg.sender); } constructor(address _factory, address _WETH) { factory = _factory; WETH = _WETH; } receive() external payable { assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract } function getBlockNumber() private view onlyNormal returns (uint blockNumber) { blockNumber = block.number; } // **** ADD LIQUIDITY **** function _addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired ) private onlyNormal returns (uint amountA, uint amountB) { // create the pair if it doesn't exist yet if (ISwapFactory(factory).getPair(tokenA, tokenB) == address(0)) { ISwapFactory(factory).createPair(tokenA, tokenB); } (amountA, amountB) = (amountADesired, amountBDesired); } function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, address to, uint deadline ) external override ensure(deadline) lock onlyNormal once(pairFor(tokenA, tokenB)) returns (uint amountA, uint amountB, uint liquidity) { (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired); address pair = pairFor(tokenA, tokenB); safeTransferFrom(tokenA, msg.sender, pair, amountA); safeTransferFrom(tokenB, msg.sender, pair, amountB); liquidity = ISwapPair(pair).mint(to); ISwapFactory(factory).addTime(pair, msg.sender); } // **** REMOVE LIQUIDITY **** function removeLiquidity( address tokenA, address tokenB, uint liquidity, address to, uint deadline ) public override ensure(deadline) lock onlyNormal returns (uint amountA, uint amountB) { address pair = pairFor(tokenA, tokenB); require(ISwapFactory(factory).getTime(pair, msg.sender) + ISwapFactory(factory).getTimeToElapse() < getBlockNumber(), 'SwapRouter: Wait for elapsed time'); ISwapPair(pair).transferFrom(msg.sender, pair, liquidity, factory); // send liquidity to pair (uint amount0, uint amount1) = ISwapPair(pair).burn(to); (address token0, ) = sortTokens(tokenA, tokenB); (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0); } // **** SWAP **** // requires the initial amount to have already been sent to the first pair function _swap(uint[] memory amounts, address[] memory path, address _to) private { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0, ) = sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? pairFor(output, path[i + 2]) : _to; ISwapPair(pairFor(input, output)).swap(amount0Out, amount1Out, to, new bytes(0)); } } function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external override ensure(deadline) lock onlyNormal returns (uint[] memory amounts) { amounts = getAmountsOutInternal(amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); safeTransferFrom(path[0], msg.sender, pairFor(path[0], path[1]), amounts[0]); _swap(amounts, path, to); } function doubleSwapExactTokensForTokens( uint amountInFirst, uint amountInSecond, uint amountOutMinFirst, uint amountOutMinSecond, address[] calldata pathFirst, address[] calldata pathSecond, address toSecond, uint deadline ) external override ensure(deadline) lock onlyNormal returns (uint[] memory amountsFirst, uint[] memory amountsSecond) { // Make sure it is a double swap require(pathFirst[0] == pathSecond[1] && pathFirst[1] == pathSecond[0], 'SwapRouter: INPUT_PATH_MISMATCHING'); // First swap amountsFirst = getAmountsOutInternal(amountInFirst, pathFirst); require(amountsFirst[amountsFirst.length - 1] >= amountOutMinFirst, 'SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); safeTransferFrom(pathFirst[0], msg.sender, pairFor(pathFirst[0], pathFirst[1]), amountsFirst[0]); _swap(amountsFirst, pathFirst, msg.sender); // Second swap amountsSecond = getAmountsOutInternal(amountInSecond, pathSecond); require(amountsSecond[amountsSecond.length - 1] >= amountOutMinSecond, 'SwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'); safeTransferFrom(pathSecond[0], msg.sender, pairFor(pathSecond[0], pathSecond[1]), amountsSecond[0]); _swap(amountsSecond, pathSecond, toSecond); } function getAmountsOut( uint amountIn, address[] memory path ) public override lock onlyNormal returns (uint[] memory amounts) { return getAmountsOutInternal(amountIn, path); } function safeTransferFrom( address token, address from, address to, uint256 value ) private onlyNormal { // 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))), 'SwapRouter::transferFrom: transferFrom failed' ); } // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) private view onlyNormal returns (address token0, address token1) { require(tokenA != tokenB, 'SwapRouter: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'SwapRouter: ZERO_ADDRESS'); } function pairFor(address tokenA, address tokenB) private view onlyNormal returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = ISwapFactory(factory).getPair(token0, token1); } // fetches and sorts the reserves for a pair function getReserves( address tokenA, address tokenB ) private view onlyNormal returns (uint reserveA, uint reserveB) { (address token0, ) = sortTokens(tokenA, tokenB); (uint reserve0, uint reserve1, ) = ISwapPair(pairFor(tokenA, tokenB)).getReserves(); (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given an input amount of an asset returns the maximum output amount of the other asset function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut, address outTokenAddr, address inTokenAddr ) private view onlyNormal returns (uint amountOut) { require(amountIn > 0, 'SwapRouter: INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'SwapRouter: INSUFFICIENT_LIQUIDITY'); ISwapERC20 outToken = ISwapERC20(outTokenAddr); ISwapERC20 inToken = ISwapERC20(inTokenAddr); uint amount; if (outToken.decimals() == inToken.decimals()) { amount = amountIn; } else { if (outToken.decimals() > inToken.decimals()) { uint8 decimalsDiff = outToken.decimals() - inToken.decimals(); amount = amountIn * 10 ** decimalsDiff; } else { uint8 decimalsDiff = inToken.decimals() - outToken.decimals(); amount = amountIn / 10 ** decimalsDiff; } } ISwapFactory factoryInstance = ISwapFactory(factory); // If swapped from any to UHU / ALPHA / ...: Deduct fee uint amountAfterSwappingFee; if (factoryInstance.feeableTokens(outTokenAddr)) { amountAfterSwappingFee = amount.mul((1000 - factoryInstance.getFeeBase())) / 1000; } else { // If swapped from any to any: Deduct no fee; 1:1 curve amountAfterSwappingFee = amount; } // If inToken is feeable if (factoryInstance.feeableTokens(inTokenAddr)) { if (factoryInstance.feeableTokens(outTokenAddr)) { amountOut = amountAfterSwappingFee; } else { amountOut = amountAfterSwappingFee * 1000 / factoryInstance.getCurrencyConversion(outTokenAddr); } } else { // If inToken is not feeable (all other tokens) if (factoryInstance.feeableTokens(outTokenAddr)) { amountOut = amountAfterSwappingFee.mul(factoryInstance.getCurrencyConversion(inTokenAddr)) / 1000; } else { amountOut = amountAfterSwappingFee * factoryInstance.getCurrencyConversion(inTokenAddr) / factoryInstance.getCurrencyConversion(outTokenAddr); } } } // performs chained getAmountOut calculations on any number of pairs function getAmountsOutInternal( uint amountIn, address[] memory path ) private view onlyNormal returns (uint[] memory amounts) { require(path.length >= 2, 'SwapRouter: INVALID_PATH'); amounts = new uint[](path.length); amounts[0] = amountIn; for (uint i; i < path.length - 1; i++) { (uint reserveIn, uint reserveOut) = getReserves(path[i], path[i + 1]); amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut, path[i + 1], path[i]); } } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; interface ISwapERC20 { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value, address factory) external returns (bool); function transferFrom(address from, address to, uint value, address factory) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; import './ISwapERC20.sol'; interface ISwapPair is ISwapERC20 { event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
// SPDX-License-Identifier: unlicensed // (c) Copyright 2024 Kolibri GmbH, all rights reserved pragma solidity ^0.8.9; interface ISwapFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function getPair(address tokenA, address tokenB) external view returns (address pair); function feeableTokens(address token) external view returns (bool isFeeable); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function changeFeeBase(uint256 fee) external; function getFeeBase() external view returns (uint256); function changeCurrencyConversion(address currency, uint256 newRate) external; function getCurrencyConversion(address currency) external view returns (uint256); function getEoaWhitelist(address eoaAddress) external view returns (bool); function addEoaWhitelist(address eoaAddress) external; function deleteGetEoaWhitelist(address eoaAddress) external; function getOnce(address pair, address onces) external view returns (bool); function addOnce(address pair, address onces) external; function getTime(address pair, address times) external view returns (uint); function addTime(address pair, address times) external; function getTimeToElapse() external view returns (uint); function setTimeToElapse(uint timeNumber) external; }
// SPDX-License-Identifier: unlicensed // (c) Copyright 2024 Kolibri GmbH, all rights reserved pragma solidity ^0.8.9; interface ISwapRouter { function factory() external returns (address); function WETH() external returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, address to, uint deadline ) external returns (uint amountA, uint amountB); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function doubleSwapExactTokensForTokens( uint amountInFirst, uint amountInSecond, uint amountOutMinFirst, uint amountOutMinSecond, address[] calldata pathFirst, address[] calldata pathSecond, address toSecond, uint deadline ) external returns (uint[] memory amountsFirst, uint[] memory amountsSecond); function getAmountsOut(uint amountIn, address[] calldata path) external returns (uint[] memory amounts); }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; // a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math) library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ds-math-add-overflow'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'ds-math-sub-underflow'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow'); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountInFirst","type":"uint256"},{"internalType":"uint256","name":"amountInSecond","type":"uint256"},{"internalType":"uint256","name":"amountOutMinFirst","type":"uint256"},{"internalType":"uint256","name":"amountOutMinSecond","type":"uint256"},{"internalType":"address[]","name":"pathFirst","type":"address[]"},{"internalType":"address[]","name":"pathSecond","type":"address[]"},{"internalType":"address","name":"toSecond","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"doubleSwapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amountsFirst","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsSecond","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260016000553480156200001657600080fd5b5060405162004ef038038062004ef083398181016040528101906200003c919062000116565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505050506200015d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000de82620000b1565b9050919050565b620000f081620000d1565b8114620000fc57600080fd5b50565b6000815190506200011081620000e5565b92915050565b6000806040838503121562000130576200012f620000ac565b5b60006200014085828601620000ff565b92505060206200015385828601620000ff565b9150509250929050565b60805160a051614cbf6200023160003960008181607b015261104a0152600081816102fb015281816106700152818161079c0152818161085001528181610a0d01528181610a9b01528181610bd101528181610d0901528181610da701528181610ebb0152818161106e015281816110e0015281816112af0152818161188601528181611b7301528181611ca601528181611d5b015281816121d00152818161230a015281816123d101528181612495015281816125c00152818161281001528181612a41015261306c0152614cbf6000f3fe6080604052600436106100745760003560e01c8063ad5c46481161004e578063ad5c464814610196578063c45a0155146101c1578063d06ca61f146101ec578063d8d910cf14610229576100d7565b806338ed1739146100dc5780636ed36f8814610119578063884e877114610158576100d7565b366100d7577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146100d5576100d4613682565b5b005b600080fd5b3480156100e857600080fd5b5061010360048036038101906100fe91906137be565b610267565b6040516101109190613916565b60405180910390f35b34801561012557600080fd5b50610140600480360381019061013b9190613938565b6105d9565b60405161014f939291906139d4565b60405180910390f35b34801561016457600080fd5b5061017f600480360381019061017a9190613a0b565b610b3c565b60405161018d929190613a86565b60405180910390f35b3480156101a257600080fd5b506101ab611048565b6040516101b89190613abe565b60405180910390f35b3480156101cd57600080fd5b506101d661106c565b6040516101e39190613abe565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190613c28565b611090565b6040516102209190613916565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613c84565b61121a565b60405161025e929190613d7b565b60405180910390f35b606081428110156102ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a490613e0f565b60405180910390fd5b6001600054146102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990613e7b565b60405180910390fd5b600080819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016103529190613abe565b60206040518083038186803b15801561036a57600080fd5b505afa15801561037e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a29190613ed3565b156103ac5761041b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461041a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041190613f4c565b60405180910390fd5b5b61046688878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611882565b91508682600184516104789190613f9b565b8151811061048957610488613fcf565b5b602002602001015110156104d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c990614070565b60405180910390fd5b61057a868660008181106104e9576104e8613fcf565b5b90506020020160208101906104fe9190614090565b336105598989600081811061051657610515613fcf565b5b905060200201602081019061052b9190614090565b8a8a600181811061053f5761053e613fcf565b5b90506020020160208101906105549190614090565b611b6f565b8560008151811061056d5761056c613fcf565b5b6020026020010151611d59565b6105c682878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505086611fb4565b6001600081905550509695505050505050565b60008060008342811015610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061990613e0f565b60405180910390fd5b600160005414610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e90613e7b565b60405180910390fd5b600080819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016106c79190613abe565b60206040518083038186803b1580156106df57600080fd5b505afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190613ed3565b1561072157610790565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078690613f4c565b60405180910390fd5b5b61079a8a8a611b6f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663534c503782336040518363ffffffff1660e01b81526004016107f59291906140bd565b60206040518083038186803b15801561080d57600080fd5b505afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108459190613ed3565b61084e57610944565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016108a79190613abe565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190613ed3565b1561090157610943565b6000610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990614132565b60405180910390fd5b5b5b6109508b8b8b8b6121cb565b809550819650505060006109648c8c611b6f565b90506109728c338389611d59565b61097e8b338388611d59565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842896040518263ffffffff1660e01b81526004016109b79190613abe565b602060405180830381600087803b1580156109d157600080fd5b505af11580156109e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a099190614167565b93507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633edafd5b82336040518363ffffffff1660e01b8152600401610a669291906140bd565b600060405180830381600087803b158015610a8057600080fd5b505af1158015610a94573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e96c58c982336040518363ffffffff1660e01b8152600401610af49291906140bd565b600060405180830381600087803b158015610b0e57600080fd5b505af1158015610b22573d6000803e3d6000fd5b505050505060016000819055505096509650969350505050565b6000808242811015610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a90613e0f565b60405180910390fd5b600160005414610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90613e7b565b60405180910390fd5b600080819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b8152600401610c289190613abe565b60206040518083038186803b158015610c4057600080fd5b505afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c789190613ed3565b15610c8257610cf1565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613f4c565b60405180910390fd5b5b6000610cfd8989611b6f565b9050610d07612491565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632d6058e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6d57600080fd5b505afa158015610d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da59190614167565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166313c4f95384336040518363ffffffff1660e01b8152600401610e009291906140bd565b60206040518083038186803b158015610e1857600080fd5b505afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e509190614167565b610e5a9190614194565b10610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e919061425c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16635fc9309c33838a7f00000000000000000000000000000000000000000000000000000000000000006040518563ffffffff1660e01b8152600401610ef9949392919061427c565b602060405180830381600087803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190613ed3565b506000808273ffffffffffffffffffffffffffffffffffffffff166389afcb44896040518263ffffffff1660e01b8152600401610f889190613abe565b6040805180830381600087803b158015610fa157600080fd5b505af1158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd991906142c1565b915091506000610fe98c8c6125bb565b5090508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614611026578183611029565b82825b8097508198505050505050506001600081905550509550959350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606001600054146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce90613e7b565b60405180910390fd5b600080819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016111379190613abe565b60206040518083038186803b15801561114f57600080fd5b505afa158015611163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190613ed3565b1561119157611200565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613f4c565b60405180910390fd5b5b61120a8383611882565b9050600160008190555092915050565b6060808242811015611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890613e0f565b60405180910390fd5b6001600054146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d90613e7b565b60405180910390fd5b600080819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016113069190613abe565b60206040518083038186803b15801561131e57600080fd5b505afa158015611332573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113569190613ed3565b15611360576113cf565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590613f4c565b60405180910390fd5b5b868660018181106113e3576113e2613fcf565b5b90506020020160208101906113f89190614090565b73ffffffffffffffffffffffffffffffffffffffff168989600081811061142257611421613fcf565b5b90506020020160208101906114379190614090565b73ffffffffffffffffffffffffffffffffffffffff161480156114d557508686600081811061146957611468613fcf565b5b905060200201602081019061147e9190614090565b73ffffffffffffffffffffffffffffffffffffffff16898960018181106114a8576114a7613fcf565b5b90506020020160208101906114bd9190614090565b73ffffffffffffffffffffffffffffffffffffffff16145b611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90614373565b60405180910390fd5b61155f8d8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611882565b92508a83600185516115719190613f9b565b8151811061158257611581613fcf565b5b602002602001015110156115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290614070565b60405180910390fd5b611673898960008181106115e2576115e1613fcf565b5b90506020020160208101906115f79190614090565b336116528c8c600081811061160f5761160e613fcf565b5b90506020020160208101906116249190614090565b8d8d600181811061163857611637613fcf565b5b905060200201602081019061164d9190614090565b611b6f565b8660008151811061166657611665613fcf565b5b6020026020010151611d59565b6116bf838a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611fb4565b61170a8c888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611882565b915089826001845161171c9190613f9b565b8151811061172d5761172c613fcf565b5b60200260200101511015611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614070565b60405180910390fd5b61181e8787600081811061178d5761178c613fcf565b5b90506020020160208101906117a29190614090565b336117fd8a8a60008181106117ba576117b9613fcf565b5b90506020020160208101906117cf9190614090565b8b8b60018181106117e3576117e2613fcf565b5b90506020020160208101906117f89190614090565b611b6f565b8560008151811061181157611810613fcf565b5b6020026020010151611d59565b61186a82888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505087611fb4565b6001600081905550509a509a98505050505050505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016118dd9190613abe565b60206040518083038186803b1580156118f557600080fd5b505afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190613ed3565b15611937576119a6565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90613f4c565b60405180910390fd5b5b6002825110156119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e2906143df565b60405180910390fd5b815167ffffffffffffffff811115611a0657611a05613aea565b5b604051908082528060200260200182016040528015611a345781602001602082028036833780820191505090505b5090508281600081518110611a4c57611a4b613fcf565b5b60200260200101818152505060005b60018351611a699190613f9b565b811015611b6857600080611abd858481518110611a8957611a88613fcf565b5b602002602001015186600186611a9f9190614194565b81518110611ab057611aaf613fcf565b5b602002602001015161280b565b91509150611b28848481518110611ad757611ad6613fcf565b5b6020026020010151838388600188611aef9190614194565b81518110611b0057611aff613fcf565b5b6020026020010151898881518110611b1b57611b1a613fcf565b5b6020026020010151612a3d565b84600185611b369190614194565b81518110611b4757611b46613fcf565b5b60200260200101818152505050508080611b60906143ff565b915050611a5b565b5092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b8152600401611bca9190613abe565b60206040518083038186803b158015611be257600080fd5b505afa158015611bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1a9190613ed3565b15611c2457611c93565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990613f4c565b60405180910390fd5b5b600080611ca085856125bb565b915091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a4390583836040518363ffffffff1660e01b8152600401611cff9291906140bd565b60206040518083038186803b158015611d1757600080fd5b505afa158015611d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4f919061445d565b9250505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b8152600401611db29190613abe565b60206040518083038186803b158015611dca57600080fd5b505afa158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e029190613ed3565b15611e0c57611e7b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7190613f4c565b60405180910390fd5b5b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611eaf9392919061448a565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611efd919061453b565b6000604051808303816000865af19150503d8060008114611f3a576040519150601f19603f3d011682016040523d82523d6000602084013e611f3f565b606091505b5091509150818015611f6d5750600081511480611f6c575080806020019051810190611f6b9190613ed3565b5b5b611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa3906145c4565b60405180910390fd5b505050505050565b60005b60018351611fc59190613f9b565b8110156121c557600080848381518110611fe257611fe1613fcf565b5b602002602001015185600185611ff89190614194565b8151811061200957612008613fcf565b5b602002602001015191509150600061202183836125bb565b5090506000876001866120349190614194565b8151811061204557612044613fcf565b5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461208d57826000612091565b6000835b91509150600060028a516120a59190613f9b565b88106120b157886120e2565b6120e1868b60028b6120c39190614194565b815181106120d4576120d3613fcf565b5b6020026020010151611b6f565b5b90506120ee8787611b6f565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f848484600067ffffffffffffffff81111561212757612126613aea565b5b6040519080825280601f01601f1916602001820160405280156121595781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401612179949392919061462e565b600060405180830381600087803b15801561219357600080fd5b505af11580156121a7573d6000803e3d6000fd5b505050505050505050505080806121bd906143ff565b915050611fb7565b50505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016122279190613abe565b60206040518083038186803b15801561223f57600080fd5b505afa158015612253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122779190613ed3565b15612281576122f0565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e690613f4c565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6a4390588886040518363ffffffff1660e01b81526004016123639291906140bd565b60206040518083038186803b15801561237b57600080fd5b505afa15801561238f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b3919061445d565b73ffffffffffffffffffffffffffffffffffffffff16141561247e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c9c6539687876040518363ffffffff1660e01b815260040161242a9291906140bd565b602060405180830381600087803b15801561244457600080fd5b505af1158015612458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247c919061445d565b505b8383809250819350505094509492505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016124ec9190613abe565b60206040518083038186803b15801561250457600080fd5b505afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190613ed3565b15612546576125b5565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90613f4c565b60405180910390fd5b5b43905090565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016126179190613abe565b60206040518083038186803b15801561262f57600080fd5b505afa158015612643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126679190613ed3565b15612671576126e0565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690613f4c565b60405180910390fd5b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561274f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612746906146c6565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061278957828461278c565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614732565b60405180910390fd5b9250929050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016128679190613abe565b60206040518083038186803b15801561287f57600080fd5b505afa158015612893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b79190613ed3565b156128c157612930565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461292f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292690613f4c565b60405180910390fd5b5b600061293c85856125bb565b50905060008061294c8787611b6f565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561299157600080fd5b505afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c991906147d4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612a28578082612a2b565b81815b80955081965050505050509250929050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b8152600401612a989190613abe565b60206040518083038186803b158015612ab057600080fd5b505afa158015612ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae89190613ed3565b15612af257612b61565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5790613f4c565b60405180910390fd5b5b60008611612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b90614899565b60405180910390fd5b600085118015612bb45750600084115b612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea9061492b565b60405180910390fd5b6000839050600083905060008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c4557600080fd5b505afa158015612c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7d9190614984565b60ff168373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612cc657600080fd5b505afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614984565b60ff161415612d0f57889050613068565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612d5557600080fd5b505afa158015612d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8d9190614984565b60ff168373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612dd657600080fd5b505afa158015612dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0e9190614984565b60ff161115612f415760008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612e5f57600080fd5b505afa158015612e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e979190614984565b8473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612edd57600080fd5b505afa158015612ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f159190614984565b612f1f91906149b1565b905080600a612f2e9190614b18565b8a612f399190614b63565b915050613067565b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612f8957600080fd5b505afa158015612f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc19190614984565b8373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561300757600080fd5b505afa15801561301b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303f9190614984565b61304991906149b1565b905080600a6130589190614b18565b8a6130639190614bec565b9150505b5b60007f0000000000000000000000000000000000000000000000000000000000000000905060008173ffffffffffffffffffffffffffffffffffffffff1663ec39bc39896040518263ffffffff1660e01b81526004016130c89190613abe565b60206040518083038186803b1580156130e057600080fd5b505afa1580156130f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131189190613ed3565b156131ce576103e86131bd8373ffffffffffffffffffffffffffffffffffffffff1663dc9337776040518163ffffffff1660e01b815260040160206040518083038186803b15801561316957600080fd5b505afa15801561317d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a19190614167565b6103e86131ae9190613f9b565b8561361590919063ffffffff16565b6131c79190614bec565b90506131d2565b8290505b8173ffffffffffffffffffffffffffffffffffffffff1663ec39bc39886040518263ffffffff1660e01b815260040161320b9190613abe565b60206040518083038186803b15801561322357600080fd5b505afa158015613237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325b9190613ed3565b1561339f578173ffffffffffffffffffffffffffffffffffffffff1663ec39bc39896040518263ffffffff1660e01b81526004016132999190613abe565b60206040518083038186803b1580156132b157600080fd5b505afa1580156132c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e99190613ed3565b156132f65780955061339a565b8173ffffffffffffffffffffffffffffffffffffffff166357284a65896040518263ffffffff1660e01b815260040161332f9190613abe565b60206040518083038186803b15801561334757600080fd5b505afa15801561335b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337f9190614167565b6103e88261338d9190614b63565b6133979190614bec565b95505b613607565b8173ffffffffffffffffffffffffffffffffffffffff1663ec39bc39896040518263ffffffff1660e01b81526004016133d89190613abe565b60206040518083038186803b1580156133f057600080fd5b505afa158015613404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134289190613ed3565b156134dc576103e86134cb8373ffffffffffffffffffffffffffffffffffffffff166357284a658a6040518263ffffffff1660e01b815260040161346c9190613abe565b60206040518083038186803b15801561348457600080fd5b505afa158015613498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bc9190614167565b8361361590919063ffffffff16565b6134d59190614bec565b9550613606565b8173ffffffffffffffffffffffffffffffffffffffff166357284a65896040518263ffffffff1660e01b81526004016135159190613abe565b60206040518083038186803b15801561352d57600080fd5b505afa158015613541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135659190614167565b8273ffffffffffffffffffffffffffffffffffffffff166357284a65896040518263ffffffff1660e01b815260040161359e9190613abe565b60206040518083038186803b1580156135b657600080fd5b505afa1580156135ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ee9190614167565b826135f99190614b63565b6136039190614bec565b95505b5b505050505095945050505050565b60008082148061363d57508282838561362e9190614b63565b92508261363b9190614bec565b145b61367c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367390614c69565b60405180910390fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6136d8816136c5565b81146136e357600080fd5b50565b6000813590506136f5816136cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137205761371f6136fb565b5b8235905067ffffffffffffffff81111561373d5761373c613700565b5b60208301915083602082028301111561375957613758613705565b5b9250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061378b82613760565b9050919050565b61379b81613780565b81146137a657600080fd5b50565b6000813590506137b881613792565b92915050565b60008060008060008060a087890312156137db576137da6136bb565b5b60006137e989828a016136e6565b96505060206137fa89828a016136e6565b955050604087013567ffffffffffffffff81111561381b5761381a6136c0565b5b61382789828a0161370a565b9450945050606061383a89828a016137a9565b925050608061384b89828a016136e6565b9150509295509295509295565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61388d816136c5565b82525050565b600061389f8383613884565b60208301905092915050565b6000602082019050919050565b60006138c382613858565b6138cd8185613863565b93506138d883613874565b8060005b838110156139095781516138f08882613893565b97506138fb836138ab565b9250506001810190506138dc565b5085935050505092915050565b6000602082019050818103600083015261393081846138b8565b905092915050565b60008060008060008060c08789031215613955576139546136bb565b5b600061396389828a016137a9565b965050602061397489828a016137a9565b955050604061398589828a016136e6565b945050606061399689828a016136e6565b93505060806139a789828a016137a9565b92505060a06139b889828a016136e6565b9150509295509295509295565b6139ce816136c5565b82525050565b60006060820190506139e960008301866139c5565b6139f660208301856139c5565b613a0360408301846139c5565b949350505050565b600080600080600060a08688031215613a2757613a266136bb565b5b6000613a35888289016137a9565b9550506020613a46888289016137a9565b9450506040613a57888289016136e6565b9350506060613a68888289016137a9565b9250506080613a79888289016136e6565b9150509295509295909350565b6000604082019050613a9b60008301856139c5565b613aa860208301846139c5565b9392505050565b613ab881613780565b82525050565b6000602082019050613ad36000830184613aaf565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b2282613ad9565b810181811067ffffffffffffffff82111715613b4157613b40613aea565b5b80604052505050565b6000613b546136b1565b9050613b608282613b19565b919050565b600067ffffffffffffffff821115613b8057613b7f613aea565b5b602082029050602081019050919050565b6000613ba4613b9f84613b65565b613b4a565b90508083825260208201905060208402830185811115613bc757613bc6613705565b5b835b81811015613bf05780613bdc88826137a9565b845260208401935050602081019050613bc9565b5050509392505050565b600082601f830112613c0f57613c0e6136fb565b5b8135613c1f848260208601613b91565b91505092915050565b60008060408385031215613c3f57613c3e6136bb565b5b6000613c4d858286016136e6565b925050602083013567ffffffffffffffff811115613c6e57613c6d6136c0565b5b613c7a85828601613bfa565b9150509250929050565b6000806000806000806000806000806101008b8d031215613ca857613ca76136bb565b5b6000613cb68d828e016136e6565b9a50506020613cc78d828e016136e6565b9950506040613cd88d828e016136e6565b9850506060613ce98d828e016136e6565b97505060808b013567ffffffffffffffff811115613d0a57613d096136c0565b5b613d168d828e0161370a565b965096505060a08b013567ffffffffffffffff811115613d3957613d386136c0565b5b613d458d828e0161370a565b945094505060c0613d588d828e016137a9565b92505060e0613d698d828e016136e6565b9150509295989b9194979a5092959850565b60006040820190508181036000830152613d9581856138b8565b90508181036020830152613da981846138b8565b90509392505050565b600082825260208201905092915050565b7f53776170526f757465723a204558504952454400000000000000000000000000600082015250565b6000613df9601383613db2565b9150613e0482613dc3565b602082019050919050565b60006020820190508181036000830152613e2881613dec565b9050919050565b7f537761703a204c4f434b45440000000000000000000000000000000000000000600082015250565b6000613e65600c83613db2565b9150613e7082613e2f565b602082019050919050565b60006020820190508181036000830152613e9481613e58565b9050919050565b60008115159050919050565b613eb081613e9b565b8114613ebb57600080fd5b50565b600081519050613ecd81613ea7565b92915050565b600060208284031215613ee957613ee86136bb565b5b6000613ef784828501613ebe565b91505092915050565b7f53776170526f757465723a206f6e6c794e6f726d616c206661696c6564000000600082015250565b6000613f36601d83613db2565b9150613f4182613f00565b602082019050919050565b60006020820190508181036000830152613f6581613f29565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fa6826136c5565b9150613fb1836136c5565b925082821015613fc457613fc3613f6c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f53776170526f757465723a20494e53554646494349454e545f4f55545055545f60008201527f414d4f554e540000000000000000000000000000000000000000000000000000602082015250565b600061405a602683613db2565b915061406582613ffe565b604082019050919050565b600060208201905081810360008301526140898161404d565b9050919050565b6000602082840312156140a6576140a56136bb565b5b60006140b4848285016137a9565b91505092915050565b60006040820190506140d26000830185613aaf565b6140df6020830184613aaf565b9392505050565b7f53776170526f757465723a204f6e6365206661696c6564000000000000000000600082015250565b600061411c601783613db2565b9150614127826140e6565b602082019050919050565b6000602082019050818103600083015261414b8161410f565b9050919050565b600081519050614161816136cf565b92915050565b60006020828403121561417d5761417c6136bb565b5b600061418b84828501614152565b91505092915050565b600061419f826136c5565b91506141aa836136c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141df576141de613f6c565b5b828201905092915050565b7f53776170526f757465723a205761697420666f7220656c61707365642074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000614246602183613db2565b9150614251826141ea565b604082019050919050565b6000602082019050818103600083015261427581614239565b9050919050565b60006080820190506142916000830187613aaf565b61429e6020830186613aaf565b6142ab60408301856139c5565b6142b86060830184613aaf565b95945050505050565b600080604083850312156142d8576142d76136bb565b5b60006142e685828601614152565b92505060206142f785828601614152565b9150509250929050565b7f53776170526f757465723a20494e5055545f504154485f4d49534d415443484960008201527f4e47000000000000000000000000000000000000000000000000000000000000602082015250565b600061435d602283613db2565b915061436882614301565b604082019050919050565b6000602082019050818103600083015261438c81614350565b9050919050565b7f53776170526f757465723a20494e56414c49445f504154480000000000000000600082015250565b60006143c9601883613db2565b91506143d482614393565b602082019050919050565b600060208201905081810360008301526143f8816143bc565b9050919050565b600061440a826136c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561443d5761443c613f6c565b5b600182019050919050565b60008151905061445781613792565b92915050565b600060208284031215614473576144726136bb565b5b600061448184828501614448565b91505092915050565b600060608201905061449f6000830186613aaf565b6144ac6020830185613aaf565b6144b960408301846139c5565b949350505050565b600081519050919050565b600081905092915050565b60005b838110156144f55780820151818401526020810190506144da565b83811115614504576000848401525b50505050565b6000614515826144c1565b61451f81856144cc565b935061452f8185602086016144d7565b80840191505092915050565b6000614547828461450a565b915081905092915050565b7f53776170526f757465723a3a7472616e7366657246726f6d3a207472616e736660008201527f657246726f6d206661696c656400000000000000000000000000000000000000602082015250565b60006145ae602d83613db2565b91506145b982614552565b604082019050919050565b600060208201905081810360008301526145dd816145a1565b9050919050565b600082825260208201905092915050565b6000614600826144c1565b61460a81856145e4565b935061461a8185602086016144d7565b61462381613ad9565b840191505092915050565b600060808201905061464360008301876139c5565b61465060208301866139c5565b61465d6040830185613aaf565b818103606083015261466f81846145f5565b905095945050505050565b7f53776170526f757465723a204944454e544943414c5f41444452455353455300600082015250565b60006146b0601f83613db2565b91506146bb8261467a565b602082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b7f53776170526f757465723a205a45524f5f414444524553530000000000000000600082015250565b600061471c601883613db2565b9150614727826146e6565b602082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61477581614752565b811461478057600080fd5b50565b6000815190506147928161476c565b92915050565b600063ffffffff82169050919050565b6147b181614798565b81146147bc57600080fd5b50565b6000815190506147ce816147a8565b92915050565b6000806000606084860312156147ed576147ec6136bb565b5b60006147fb86828701614783565b935050602061480c86828701614783565b925050604061481d868287016147bf565b9150509250925092565b7f53776170526f757465723a20494e53554646494349454e545f494e5055545f4160008201527f4d4f554e54000000000000000000000000000000000000000000000000000000602082015250565b6000614883602583613db2565b915061488e82614827565b604082019050919050565b600060208201905081810360008301526148b281614876565b9050919050565b7f53776170526f757465723a20494e53554646494349454e545f4c49515549444960008201527f5459000000000000000000000000000000000000000000000000000000000000602082015250565b6000614915602283613db2565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b9050919050565b600060ff82169050919050565b6149618161494b565b811461496c57600080fd5b50565b60008151905061497e81614958565b92915050565b60006020828403121561499a576149996136bb565b5b60006149a88482850161496f565b91505092915050565b60006149bc8261494b565b91506149c78361494b565b9250828210156149da576149d9613f6c565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614a3c57808604811115614a1857614a17613f6c565b5b6001851615614a275780820291505b8081029050614a35856149e5565b94506149fc565b94509492505050565b600082614a555760019050614b11565b81614a635760009050614b11565b8160018114614a795760028114614a8357614ab2565b6001915050614b11565b60ff841115614a9557614a94613f6c565b5b8360020a915084821115614aac57614aab613f6c565b5b50614b11565b5060208310610133831016604e8410600b8410161715614ae75782820a905083811115614ae257614ae1613f6c565b5b614b11565b614af484848460016149f2565b92509050818404811115614b0b57614b0a613f6c565b5b81810290505b9392505050565b6000614b23826136c5565b9150614b2e8361494b565b9250614b5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614a45565b905092915050565b6000614b6e826136c5565b9150614b79836136c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bb257614bb1613f6c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bf7826136c5565b9150614c02836136c5565b925082614c1257614c11614bbd565b5b828204905092915050565b7f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000600082015250565b6000614c53601483613db2565b9150614c5e82614c1d565b602082019050919050565b60006020820190508181036000830152614c8281614c46565b905091905056fea2646970667358221220dd7979999dca261bcd091479a3c2d526b9f1e7cce514558c1ce06dd0b1a2e39064736f6c63430008090033000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d51910000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Deployed Bytecode
0x6080604052600436106100745760003560e01c8063ad5c46481161004e578063ad5c464814610196578063c45a0155146101c1578063d06ca61f146101ec578063d8d910cf14610229576100d7565b806338ed1739146100dc5780636ed36f8814610119578063884e877114610158576100d7565b366100d7577f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146100d5576100d4613682565b5b005b600080fd5b3480156100e857600080fd5b5061010360048036038101906100fe91906137be565b610267565b6040516101109190613916565b60405180910390f35b34801561012557600080fd5b50610140600480360381019061013b9190613938565b6105d9565b60405161014f939291906139d4565b60405180910390f35b34801561016457600080fd5b5061017f600480360381019061017a9190613a0b565b610b3c565b60405161018d929190613a86565b60405180910390f35b3480156101a257600080fd5b506101ab611048565b6040516101b89190613abe565b60405180910390f35b3480156101cd57600080fd5b506101d661106c565b6040516101e39190613abe565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190613c28565b611090565b6040516102209190613916565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613c84565b61121a565b60405161025e929190613d7b565b60405180910390f35b606081428110156102ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102a490613e0f565b60405180910390fd5b6001600054146102f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e990613e7b565b60405180910390fd5b600080819055507f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016103529190613abe565b60206040518083038186803b15801561036a57600080fd5b505afa15801561037e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a29190613ed3565b156103ac5761041b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461041a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041190613f4c565b60405180910390fd5b5b61046688878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611882565b91508682600184516104789190613f9b565b8151811061048957610488613fcf565b5b602002602001015110156104d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c990614070565b60405180910390fd5b61057a868660008181106104e9576104e8613fcf565b5b90506020020160208101906104fe9190614090565b336105598989600081811061051657610515613fcf565b5b905060200201602081019061052b9190614090565b8a8a600181811061053f5761053e613fcf565b5b90506020020160208101906105549190614090565b611b6f565b8560008151811061056d5761056c613fcf565b5b6020026020010151611d59565b6105c682878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505086611fb4565b6001600081905550509695505050505050565b60008060008342811015610622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061990613e0f565b60405180910390fd5b600160005414610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e90613e7b565b60405180910390fd5b600080819055507f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016106c79190613abe565b60206040518083038186803b1580156106df57600080fd5b505afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107179190613ed3565b1561072157610790565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078690613f4c565b60405180910390fd5b5b61079a8a8a611b6f565b7f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff1663534c503782336040518363ffffffff1660e01b81526004016107f59291906140bd565b60206040518083038186803b15801561080d57600080fd5b505afa158015610821573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108459190613ed3565b61084e57610944565b7f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016108a79190613abe565b60206040518083038186803b1580156108bf57600080fd5b505afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190613ed3565b1561090157610943565b6000610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093990614132565b60405180910390fd5b5b5b6109508b8b8b8b6121cb565b809550819650505060006109648c8c611b6f565b90506109728c338389611d59565b61097e8b338388611d59565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842896040518263ffffffff1660e01b81526004016109b79190613abe565b602060405180830381600087803b1580156109d157600080fd5b505af11580156109e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a099190614167565b93507f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16633edafd5b82336040518363ffffffff1660e01b8152600401610a669291906140bd565b600060405180830381600087803b158015610a8057600080fd5b505af1158015610a94573d6000803e3d6000fd5b50505050507f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff1663e96c58c982336040518363ffffffff1660e01b8152600401610af49291906140bd565b600060405180830381600087803b158015610b0e57600080fd5b505af1158015610b22573d6000803e3d6000fd5b505050505060016000819055505096509650969350505050565b6000808242811015610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a90613e0f565b60405180910390fd5b600160005414610bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbf90613e7b565b60405180910390fd5b600080819055507f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b8152600401610c289190613abe565b60206040518083038186803b158015610c4057600080fd5b505afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c789190613ed3565b15610c8257610cf1565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce790613f4c565b60405180910390fd5b5b6000610cfd8989611b6f565b9050610d07612491565b7f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16632d6058e26040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6d57600080fd5b505afa158015610d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da59190614167565b7f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff166313c4f95384336040518363ffffffff1660e01b8152600401610e009291906140bd565b60206040518083038186803b158015610e1857600080fd5b505afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e509190614167565b610e5a9190614194565b10610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e919061425c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16635fc9309c33838a7f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d51916040518563ffffffff1660e01b8152600401610ef9949392919061427c565b602060405180830381600087803b158015610f1357600080fd5b505af1158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b9190613ed3565b506000808273ffffffffffffffffffffffffffffffffffffffff166389afcb44896040518263ffffffff1660e01b8152600401610f889190613abe565b6040805180830381600087803b158015610fa157600080fd5b505af1158015610fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd991906142c1565b915091506000610fe98c8c6125bb565b5090508073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614611026578183611029565b82825b8097508198505050505050506001600081905550509550959350505050565b7f0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127081565b7f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519181565b60606001600054146110d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ce90613e7b565b60405180910390fd5b600080819055507f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016111379190613abe565b60206040518083038186803b15801561114f57600080fd5b505afa158015611163573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190613ed3565b1561119157611200565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f690613f4c565b60405180910390fd5b5b61120a8383611882565b9050600160008190555092915050565b6060808242811015611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125890613e0f565b60405180910390fd5b6001600054146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d90613e7b565b60405180910390fd5b600080819055507f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016113069190613abe565b60206040518083038186803b15801561131e57600080fd5b505afa158015611332573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113569190613ed3565b15611360576113cf565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590613f4c565b60405180910390fd5b5b868660018181106113e3576113e2613fcf565b5b90506020020160208101906113f89190614090565b73ffffffffffffffffffffffffffffffffffffffff168989600081811061142257611421613fcf565b5b90506020020160208101906114379190614090565b73ffffffffffffffffffffffffffffffffffffffff161480156114d557508686600081811061146957611468613fcf565b5b905060200201602081019061147e9190614090565b73ffffffffffffffffffffffffffffffffffffffff16898960018181106114a8576114a7613fcf565b5b90506020020160208101906114bd9190614090565b73ffffffffffffffffffffffffffffffffffffffff16145b611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90614373565b60405180910390fd5b61155f8d8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611882565b92508a83600185516115719190613f9b565b8151811061158257611581613fcf565b5b602002602001015110156115cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c290614070565b60405180910390fd5b611673898960008181106115e2576115e1613fcf565b5b90506020020160208101906115f79190614090565b336116528c8c600081811061160f5761160e613fcf565b5b90506020020160208101906116249190614090565b8d8d600181811061163857611637613fcf565b5b905060200201602081019061164d9190614090565b611b6f565b8660008151811061166657611665613fcf565b5b6020026020010151611d59565b6116bf838a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505033611fb4565b61170a8c888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050611882565b915089826001845161171c9190613f9b565b8151811061172d5761172c613fcf565b5b60200260200101511015611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d90614070565b60405180910390fd5b61181e8787600081811061178d5761178c613fcf565b5b90506020020160208101906117a29190614090565b336117fd8a8a60008181106117ba576117b9613fcf565b5b90506020020160208101906117cf9190614090565b8b8b60018181106117e3576117e2613fcf565b5b90506020020160208101906117f89190614090565b611b6f565b8560008151811061181157611810613fcf565b5b6020026020010151611d59565b61186a82888880806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505087611fb4565b6001600081905550509a509a98505050505050505050565b60607f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016118dd9190613abe565b60206040518083038186803b1580156118f557600080fd5b505afa158015611909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192d9190613ed3565b15611937576119a6565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c90613f4c565b60405180910390fd5b5b6002825110156119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e2906143df565b60405180910390fd5b815167ffffffffffffffff811115611a0657611a05613aea565b5b604051908082528060200260200182016040528015611a345781602001602082028036833780820191505090505b5090508281600081518110611a4c57611a4b613fcf565b5b60200260200101818152505060005b60018351611a699190613f9b565b811015611b6857600080611abd858481518110611a8957611a88613fcf565b5b602002602001015186600186611a9f9190614194565b81518110611ab057611aaf613fcf565b5b602002602001015161280b565b91509150611b28848481518110611ad757611ad6613fcf565b5b6020026020010151838388600188611aef9190614194565b81518110611b0057611aff613fcf565b5b6020026020010151898881518110611b1b57611b1a613fcf565b5b6020026020010151612a3d565b84600185611b369190614194565b81518110611b4757611b46613fcf565b5b60200260200101818152505050508080611b60906143ff565b915050611a5b565b5092915050565b60007f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b8152600401611bca9190613abe565b60206040518083038186803b158015611be257600080fd5b505afa158015611bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1a9190613ed3565b15611c2457611c93565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8990613f4c565b60405180910390fd5b5b600080611ca085856125bb565b915091507f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff1663e6a4390583836040518363ffffffff1660e01b8152600401611cff9291906140bd565b60206040518083038186803b158015611d1757600080fd5b505afa158015611d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4f919061445d565b9250505092915050565b7f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b8152600401611db29190613abe565b60206040518083038186803b158015611dca57600080fd5b505afa158015611dde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e029190613ed3565b15611e0c57611e7b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7190613f4c565b60405180910390fd5b5b6000808573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611eaf9392919061448a565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611efd919061453b565b6000604051808303816000865af19150503d8060008114611f3a576040519150601f19603f3d011682016040523d82523d6000602084013e611f3f565b606091505b5091509150818015611f6d5750600081511480611f6c575080806020019051810190611f6b9190613ed3565b5b5b611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa3906145c4565b60405180910390fd5b505050505050565b60005b60018351611fc59190613f9b565b8110156121c557600080848381518110611fe257611fe1613fcf565b5b602002602001015185600185611ff89190614194565b8151811061200957612008613fcf565b5b602002602001015191509150600061202183836125bb565b5090506000876001866120349190614194565b8151811061204557612044613fcf565b5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461208d57826000612091565b6000835b91509150600060028a516120a59190613f9b565b88106120b157886120e2565b6120e1868b60028b6120c39190614194565b815181106120d4576120d3613fcf565b5b6020026020010151611b6f565b5b90506120ee8787611b6f565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f848484600067ffffffffffffffff81111561212757612126613aea565b5b6040519080825280601f01601f1916602001820160405280156121595781602001600182028036833780820191505090505b506040518563ffffffff1660e01b8152600401612179949392919061462e565b600060405180830381600087803b15801561219357600080fd5b505af11580156121a7573d6000803e3d6000fd5b505050505050505050505080806121bd906143ff565b915050611fb7565b50505050565b6000807f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016122279190613abe565b60206040518083038186803b15801561223f57600080fd5b505afa158015612253573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122779190613ed3565b15612281576122f0565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146122ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e690613f4c565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff1663e6a4390588886040518363ffffffff1660e01b81526004016123639291906140bd565b60206040518083038186803b15801561237b57600080fd5b505afa15801561238f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b3919061445d565b73ffffffffffffffffffffffffffffffffffffffff16141561247e577f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff1663c9c6539687876040518363ffffffff1660e01b815260040161242a9291906140bd565b602060405180830381600087803b15801561244457600080fd5b505af1158015612458573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247c919061445d565b505b8383809250819350505094509492505050565b60007f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016124ec9190613abe565b60206040518083038186803b15801561250457600080fd5b505afa158015612518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253c9190613ed3565b15612546576125b5565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146125b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ab90613f4c565b60405180910390fd5b5b43905090565b6000807f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016126179190613abe565b60206040518083038186803b15801561262f57600080fd5b505afa158015612643573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126679190613ed3565b15612671576126e0565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690613f4c565b60405180910390fd5b5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561274f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612746906146c6565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061278957828461278c565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614732565b60405180910390fd5b9250929050565b6000807f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b81526004016128679190613abe565b60206040518083038186803b15801561287f57600080fd5b505afa158015612893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b79190613ed3565b156128c157612930565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461292f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292690613f4c565b60405180910390fd5b5b600061293c85856125bb565b50905060008061294c8787611b6f565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561299157600080fd5b505afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c991906147d4565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691508273ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612a28578082612a2b565b81815b80955081965050505050509250929050565b60007f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d519173ffffffffffffffffffffffffffffffffffffffff16635df672e9336040518263ffffffff1660e01b8152600401612a989190613abe565b60206040518083038186803b158015612ab057600080fd5b505afa158015612ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae89190613ed3565b15612af257612b61565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5790613f4c565b60405180910390fd5b5b60008611612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b90614899565b60405180910390fd5b600085118015612bb45750600084115b612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea9061492b565b60405180910390fd5b6000839050600083905060008173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c4557600080fd5b505afa158015612c59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7d9190614984565b60ff168373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612cc657600080fd5b505afa158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614984565b60ff161415612d0f57889050613068565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612d5557600080fd5b505afa158015612d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8d9190614984565b60ff168373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612dd657600080fd5b505afa158015612dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0e9190614984565b60ff161115612f415760008273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612e5f57600080fd5b505afa158015612e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e979190614984565b8473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612edd57600080fd5b505afa158015612ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f159190614984565b612f1f91906149b1565b905080600a612f2e9190614b18565b8a612f399190614b63565b915050613067565b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612f8957600080fd5b505afa158015612f9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc19190614984565b8373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561300757600080fd5b505afa15801561301b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303f9190614984565b61304991906149b1565b905080600a6130589190614b18565b8a6130639190614bec565b9150505b5b60007f000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d5191905060008173ffffffffffffffffffffffffffffffffffffffff1663ec39bc39896040518263ffffffff1660e01b81526004016130c89190613abe565b60206040518083038186803b1580156130e057600080fd5b505afa1580156130f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131189190613ed3565b156131ce576103e86131bd8373ffffffffffffffffffffffffffffffffffffffff1663dc9337776040518163ffffffff1660e01b815260040160206040518083038186803b15801561316957600080fd5b505afa15801561317d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131a19190614167565b6103e86131ae9190613f9b565b8561361590919063ffffffff16565b6131c79190614bec565b90506131d2565b8290505b8173ffffffffffffffffffffffffffffffffffffffff1663ec39bc39886040518263ffffffff1660e01b815260040161320b9190613abe565b60206040518083038186803b15801561322357600080fd5b505afa158015613237573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325b9190613ed3565b1561339f578173ffffffffffffffffffffffffffffffffffffffff1663ec39bc39896040518263ffffffff1660e01b81526004016132999190613abe565b60206040518083038186803b1580156132b157600080fd5b505afa1580156132c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e99190613ed3565b156132f65780955061339a565b8173ffffffffffffffffffffffffffffffffffffffff166357284a65896040518263ffffffff1660e01b815260040161332f9190613abe565b60206040518083038186803b15801561334757600080fd5b505afa15801561335b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337f9190614167565b6103e88261338d9190614b63565b6133979190614bec565b95505b613607565b8173ffffffffffffffffffffffffffffffffffffffff1663ec39bc39896040518263ffffffff1660e01b81526004016133d89190613abe565b60206040518083038186803b1580156133f057600080fd5b505afa158015613404573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134289190613ed3565b156134dc576103e86134cb8373ffffffffffffffffffffffffffffffffffffffff166357284a658a6040518263ffffffff1660e01b815260040161346c9190613abe565b60206040518083038186803b15801561348457600080fd5b505afa158015613498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bc9190614167565b8361361590919063ffffffff16565b6134d59190614bec565b9550613606565b8173ffffffffffffffffffffffffffffffffffffffff166357284a65896040518263ffffffff1660e01b81526004016135159190613abe565b60206040518083038186803b15801561352d57600080fd5b505afa158015613541573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135659190614167565b8273ffffffffffffffffffffffffffffffffffffffff166357284a65896040518263ffffffff1660e01b815260040161359e9190613abe565b60206040518083038186803b1580156135b657600080fd5b505afa1580156135ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ee9190614167565b826135f99190614b63565b6136039190614bec565b95505b5b505050505095945050505050565b60008082148061363d57508282838561362e9190614b63565b92508261363b9190614bec565b145b61367c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367390614c69565b60405180910390fd5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6136d8816136c5565b81146136e357600080fd5b50565b6000813590506136f5816136cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137205761371f6136fb565b5b8235905067ffffffffffffffff81111561373d5761373c613700565b5b60208301915083602082028301111561375957613758613705565b5b9250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061378b82613760565b9050919050565b61379b81613780565b81146137a657600080fd5b50565b6000813590506137b881613792565b92915050565b60008060008060008060a087890312156137db576137da6136bb565b5b60006137e989828a016136e6565b96505060206137fa89828a016136e6565b955050604087013567ffffffffffffffff81111561381b5761381a6136c0565b5b61382789828a0161370a565b9450945050606061383a89828a016137a9565b925050608061384b89828a016136e6565b9150509295509295509295565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61388d816136c5565b82525050565b600061389f8383613884565b60208301905092915050565b6000602082019050919050565b60006138c382613858565b6138cd8185613863565b93506138d883613874565b8060005b838110156139095781516138f08882613893565b97506138fb836138ab565b9250506001810190506138dc565b5085935050505092915050565b6000602082019050818103600083015261393081846138b8565b905092915050565b60008060008060008060c08789031215613955576139546136bb565b5b600061396389828a016137a9565b965050602061397489828a016137a9565b955050604061398589828a016136e6565b945050606061399689828a016136e6565b93505060806139a789828a016137a9565b92505060a06139b889828a016136e6565b9150509295509295509295565b6139ce816136c5565b82525050565b60006060820190506139e960008301866139c5565b6139f660208301856139c5565b613a0360408301846139c5565b949350505050565b600080600080600060a08688031215613a2757613a266136bb565b5b6000613a35888289016137a9565b9550506020613a46888289016137a9565b9450506040613a57888289016136e6565b9350506060613a68888289016137a9565b9250506080613a79888289016136e6565b9150509295509295909350565b6000604082019050613a9b60008301856139c5565b613aa860208301846139c5565b9392505050565b613ab881613780565b82525050565b6000602082019050613ad36000830184613aaf565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613b2282613ad9565b810181811067ffffffffffffffff82111715613b4157613b40613aea565b5b80604052505050565b6000613b546136b1565b9050613b608282613b19565b919050565b600067ffffffffffffffff821115613b8057613b7f613aea565b5b602082029050602081019050919050565b6000613ba4613b9f84613b65565b613b4a565b90508083825260208201905060208402830185811115613bc757613bc6613705565b5b835b81811015613bf05780613bdc88826137a9565b845260208401935050602081019050613bc9565b5050509392505050565b600082601f830112613c0f57613c0e6136fb565b5b8135613c1f848260208601613b91565b91505092915050565b60008060408385031215613c3f57613c3e6136bb565b5b6000613c4d858286016136e6565b925050602083013567ffffffffffffffff811115613c6e57613c6d6136c0565b5b613c7a85828601613bfa565b9150509250929050565b6000806000806000806000806000806101008b8d031215613ca857613ca76136bb565b5b6000613cb68d828e016136e6565b9a50506020613cc78d828e016136e6565b9950506040613cd88d828e016136e6565b9850506060613ce98d828e016136e6565b97505060808b013567ffffffffffffffff811115613d0a57613d096136c0565b5b613d168d828e0161370a565b965096505060a08b013567ffffffffffffffff811115613d3957613d386136c0565b5b613d458d828e0161370a565b945094505060c0613d588d828e016137a9565b92505060e0613d698d828e016136e6565b9150509295989b9194979a5092959850565b60006040820190508181036000830152613d9581856138b8565b90508181036020830152613da981846138b8565b90509392505050565b600082825260208201905092915050565b7f53776170526f757465723a204558504952454400000000000000000000000000600082015250565b6000613df9601383613db2565b9150613e0482613dc3565b602082019050919050565b60006020820190508181036000830152613e2881613dec565b9050919050565b7f537761703a204c4f434b45440000000000000000000000000000000000000000600082015250565b6000613e65600c83613db2565b9150613e7082613e2f565b602082019050919050565b60006020820190508181036000830152613e9481613e58565b9050919050565b60008115159050919050565b613eb081613e9b565b8114613ebb57600080fd5b50565b600081519050613ecd81613ea7565b92915050565b600060208284031215613ee957613ee86136bb565b5b6000613ef784828501613ebe565b91505092915050565b7f53776170526f757465723a206f6e6c794e6f726d616c206661696c6564000000600082015250565b6000613f36601d83613db2565b9150613f4182613f00565b602082019050919050565b60006020820190508181036000830152613f6581613f29565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fa6826136c5565b9150613fb1836136c5565b925082821015613fc457613fc3613f6c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f53776170526f757465723a20494e53554646494349454e545f4f55545055545f60008201527f414d4f554e540000000000000000000000000000000000000000000000000000602082015250565b600061405a602683613db2565b915061406582613ffe565b604082019050919050565b600060208201905081810360008301526140898161404d565b9050919050565b6000602082840312156140a6576140a56136bb565b5b60006140b4848285016137a9565b91505092915050565b60006040820190506140d26000830185613aaf565b6140df6020830184613aaf565b9392505050565b7f53776170526f757465723a204f6e6365206661696c6564000000000000000000600082015250565b600061411c601783613db2565b9150614127826140e6565b602082019050919050565b6000602082019050818103600083015261414b8161410f565b9050919050565b600081519050614161816136cf565b92915050565b60006020828403121561417d5761417c6136bb565b5b600061418b84828501614152565b91505092915050565b600061419f826136c5565b91506141aa836136c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141df576141de613f6c565b5b828201905092915050565b7f53776170526f757465723a205761697420666f7220656c61707365642074696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000614246602183613db2565b9150614251826141ea565b604082019050919050565b6000602082019050818103600083015261427581614239565b9050919050565b60006080820190506142916000830187613aaf565b61429e6020830186613aaf565b6142ab60408301856139c5565b6142b86060830184613aaf565b95945050505050565b600080604083850312156142d8576142d76136bb565b5b60006142e685828601614152565b92505060206142f785828601614152565b9150509250929050565b7f53776170526f757465723a20494e5055545f504154485f4d49534d415443484960008201527f4e47000000000000000000000000000000000000000000000000000000000000602082015250565b600061435d602283613db2565b915061436882614301565b604082019050919050565b6000602082019050818103600083015261438c81614350565b9050919050565b7f53776170526f757465723a20494e56414c49445f504154480000000000000000600082015250565b60006143c9601883613db2565b91506143d482614393565b602082019050919050565b600060208201905081810360008301526143f8816143bc565b9050919050565b600061440a826136c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561443d5761443c613f6c565b5b600182019050919050565b60008151905061445781613792565b92915050565b600060208284031215614473576144726136bb565b5b600061448184828501614448565b91505092915050565b600060608201905061449f6000830186613aaf565b6144ac6020830185613aaf565b6144b960408301846139c5565b949350505050565b600081519050919050565b600081905092915050565b60005b838110156144f55780820151818401526020810190506144da565b83811115614504576000848401525b50505050565b6000614515826144c1565b61451f81856144cc565b935061452f8185602086016144d7565b80840191505092915050565b6000614547828461450a565b915081905092915050565b7f53776170526f757465723a3a7472616e7366657246726f6d3a207472616e736660008201527f657246726f6d206661696c656400000000000000000000000000000000000000602082015250565b60006145ae602d83613db2565b91506145b982614552565b604082019050919050565b600060208201905081810360008301526145dd816145a1565b9050919050565b600082825260208201905092915050565b6000614600826144c1565b61460a81856145e4565b935061461a8185602086016144d7565b61462381613ad9565b840191505092915050565b600060808201905061464360008301876139c5565b61465060208301866139c5565b61465d6040830185613aaf565b818103606083015261466f81846145f5565b905095945050505050565b7f53776170526f757465723a204944454e544943414c5f41444452455353455300600082015250565b60006146b0601f83613db2565b91506146bb8261467a565b602082019050919050565b600060208201905081810360008301526146df816146a3565b9050919050565b7f53776170526f757465723a205a45524f5f414444524553530000000000000000600082015250565b600061471c601883613db2565b9150614727826146e6565b602082019050919050565b6000602082019050818103600083015261474b8161470f565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61477581614752565b811461478057600080fd5b50565b6000815190506147928161476c565b92915050565b600063ffffffff82169050919050565b6147b181614798565b81146147bc57600080fd5b50565b6000815190506147ce816147a8565b92915050565b6000806000606084860312156147ed576147ec6136bb565b5b60006147fb86828701614783565b935050602061480c86828701614783565b925050604061481d868287016147bf565b9150509250925092565b7f53776170526f757465723a20494e53554646494349454e545f494e5055545f4160008201527f4d4f554e54000000000000000000000000000000000000000000000000000000602082015250565b6000614883602583613db2565b915061488e82614827565b604082019050919050565b600060208201905081810360008301526148b281614876565b9050919050565b7f53776170526f757465723a20494e53554646494349454e545f4c49515549444960008201527f5459000000000000000000000000000000000000000000000000000000000000602082015250565b6000614915602283613db2565b9150614920826148b9565b604082019050919050565b6000602082019050818103600083015261494481614908565b9050919050565b600060ff82169050919050565b6149618161494b565b811461496c57600080fd5b50565b60008151905061497e81614958565b92915050565b60006020828403121561499a576149996136bb565b5b60006149a88482850161496f565b91505092915050565b60006149bc8261494b565b91506149c78361494b565b9250828210156149da576149d9613f6c565b5b828203905092915050565b60008160011c9050919050565b6000808291508390505b6001851115614a3c57808604811115614a1857614a17613f6c565b5b6001851615614a275780820291505b8081029050614a35856149e5565b94506149fc565b94509492505050565b600082614a555760019050614b11565b81614a635760009050614b11565b8160018114614a795760028114614a8357614ab2565b6001915050614b11565b60ff841115614a9557614a94613f6c565b5b8360020a915084821115614aac57614aab613f6c565b5b50614b11565b5060208310610133831016604e8410600b8410161715614ae75782820a905083811115614ae257614ae1613f6c565b5b614b11565b614af484848460016149f2565b92509050818404811115614b0b57614b0a613f6c565b5b81810290505b9392505050565b6000614b23826136c5565b9150614b2e8361494b565b9250614b5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614a45565b905092915050565b6000614b6e826136c5565b9150614b79836136c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614bb257614bb1613f6c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bf7826136c5565b9150614c02836136c5565b925082614c1257614c11614bbd565b5b828204905092915050565b7f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000600082015250565b6000614c53601483613db2565b9150614c5e82614c1d565b602082019050919050565b60006020820190508181036000830152614c8281614c46565b905091905056fea2646970667358221220dd7979999dca261bcd091479a3c2d526b9f1e7cce514558c1ce06dd0b1a2e39064736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d51910000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
-----Decoded View---------------
Arg [0] : _factory (address): 0xA69147f2993a9b90B71B737A730ca0144C0d5191
Arg [1] : _WETH (address): 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a69147f2993a9b90b71b737a730ca0144c0d5191
Arg [1] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.