More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 9,213 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 19744246 | 240 days ago | IN | 0 ETH | 0.0004046 | ||||
Claim | 18748903 | 380 days ago | IN | 0 ETH | 0.00268372 | ||||
Claim | 18278961 | 446 days ago | IN | 0 ETH | 0.00106293 | ||||
Claim | 18084003 | 473 days ago | IN | 0 ETH | 0.00159992 | ||||
Claim | 18083075 | 473 days ago | IN | 0 ETH | 0.00112842 | ||||
Claim | 18079935 | 474 days ago | IN | 0 ETH | 0.00211024 | ||||
Claim | 18079814 | 474 days ago | IN | 0 ETH | 0.00235063 | ||||
Claim | 18079269 | 474 days ago | IN | 0 ETH | 0.00235374 | ||||
Claim | 18079177 | 474 days ago | IN | 0 ETH | 0.00339193 | ||||
Claim | 18078642 | 474 days ago | IN | 0 ETH | 0.00284444 | ||||
Claim | 18077561 | 474 days ago | IN | 0 ETH | 0.00264293 | ||||
Claim | 18075736 | 474 days ago | IN | 0 ETH | 0.00133685 | ||||
Claim | 18075423 | 474 days ago | IN | 0 ETH | 0.00117861 | ||||
Claim | 18075333 | 474 days ago | IN | 0 ETH | 0.00112186 | ||||
Claim | 18072962 | 475 days ago | IN | 0 ETH | 0.00345107 | ||||
Claim | 18072315 | 475 days ago | IN | 0 ETH | 0.00240869 | ||||
Claim | 18071528 | 475 days ago | IN | 0 ETH | 0.00262862 | ||||
Claim | 18070555 | 475 days ago | IN | 0 ETH | 0.0016326 | ||||
Claim | 18070404 | 475 days ago | IN | 0 ETH | 0.0015731 | ||||
Claim | 18069898 | 475 days ago | IN | 0 ETH | 0.00121862 | ||||
Claim | 18069743 | 475 days ago | IN | 0 ETH | 0.00131984 | ||||
Claim | 18069178 | 475 days ago | IN | 0 ETH | 0.00130031 | ||||
Claim | 18069067 | 475 days ago | IN | 0 ETH | 0.00123843 | ||||
Claim | 18068849 | 475 days ago | IN | 0 ETH | 0.00122562 | ||||
Claim | 18067775 | 475 days ago | IN | 0 ETH | 0.00118672 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
17941132 | 493 days ago | 0.00453207 ETH | ||||
17816143 | 511 days ago | 0.00002361 ETH | ||||
17816143 | 511 days ago | 0.04997638 ETH | ||||
17816141 | 511 days ago | 0.00001507 ETH | ||||
17816141 | 511 days ago | 0.00998492 ETH | ||||
17816136 | 511 days ago | 0.00001507 ETH | ||||
17816136 | 511 days ago | 0.00998492 ETH | ||||
17816125 | 511 days ago | 0.00001441 ETH | ||||
17816125 | 511 days ago | 0.01298558 ETH | ||||
17816100 | 511 days ago | 0.00001364 ETH | ||||
17816100 | 511 days ago | 0.27308635 ETH | ||||
17816100 | 511 days ago | 0.00001531 ETH | ||||
17816100 | 511 days ago | 0.03998468 ETH | ||||
17816085 | 511 days ago | 0.00001029 ETH | ||||
17816085 | 511 days ago | 0.0099897 ETH | ||||
17816084 | 511 days ago | 0.00000918 ETH | ||||
17816084 | 511 days ago | 0.02399081 ETH | ||||
17816047 | 511 days ago | 0.00001978 ETH | ||||
17816047 | 511 days ago | 0.16998021 ETH | ||||
17816036 | 511 days ago | 0.00002509 ETH | ||||
17816036 | 511 days ago | 0.0308749 ETH | ||||
17815969 | 511 days ago | 0.0000248 ETH | ||||
17815969 | 511 days ago | 0.19997519 ETH | ||||
17815957 | 511 days ago | 0.0000166 ETH | ||||
17815957 | 511 days ago | 2.67998339 ETH |
Loading...
Loading
Contract Name:
DeeLance_PreSale
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-29 */ pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/afb20119b33072da041c97ea717d3ce4417b5e01/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: presale.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.6; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface Aggregator { function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract DeeLance_PreSale is ReentrancyGuard, Ownable, Pausable { IUniswapV2Router02 public uniswapV2Router; uint256 public salePrice; uint256 public nextPrice; uint256 public totalTokensForPresale; uint256 public totalUsdValueForPresale; uint256 public minimumBuyAmount; uint256 public inSale; uint256 public inSaleUSDvalue; uint256 public hardcapSize; uint256 public startTime; uint256 public endTime; uint256 public claimStart; uint256 public baseDecimals; bool public isPresalePaused; uint256 public hardcapsizeUSD; // Current Step uint256 public currentStep; address public saleToken; address dataOracle; address routerAddress; address USDTtoken; address dAddress; mapping(address => uint256) public userDeposits; mapping(address => bool) public hasClaimed; event TokensBought( address indexed user, uint256 indexed tokensBought, address indexed purchaseToken, uint256 amountPaid, uint256 timestamp ); event TokensClaimed( address indexed user, uint256 amount, uint256 timestamp ); constructor() { //require(_startTime > block.timestamp && _endTime > _startTime, "Invalid time"); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; baseDecimals = (10**18); salePrice = 25 * (10**15); //0.025 USD hardcapSize = 217_407_407; totalTokensForPresale = 217_407_407; minimumBuyAmount = 0; inSale = totalTokensForPresale; startTime = block.timestamp; endTime = block.timestamp + 90 days; dataOracle = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419; dAddress = 0xc3e9bbe8B1A89E1fF19e2B5c1ee3B78B335a7C96; routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; USDTtoken = 0xdAC17F958D2ee523a2206206994597C13D831ec7; startStep(1); } function startStep(uint256 stepIndex) internal { currentStep = stepIndex; if (stepIndex == 1) { salePrice = 25 * (10**15); //0.025 USD nextPrice = 27 * (10**15); //0.027 USD hardcapsizeUSD = 1500000; totalUsdValueForPresale = 1500000; inSaleUSDvalue = 1500000000000000000000000; } else if (stepIndex == 2) { salePrice = 27 * (10**15); //0.027 USD nextPrice = 30 * (10**15); //0.030 USD hardcapsizeUSD = 2000000; totalUsdValueForPresale = 2000000; inSaleUSDvalue = 2000000000000000000000000; } else if (stepIndex == 3){ salePrice = 30 * (10**15); //0.030 USD nextPrice = 30 * (10**15); //0.030 USD hardcapsizeUSD = 2500000; totalUsdValueForPresale = 2500000; inSaleUSDvalue = 2500000000000000000000000; } else{ revert("Presale it's over, sorry!"); } } function changeManuallyStep(uint256 _value) external onlyOwner { startStep(_value); } function addTokensInSale(uint256 _value) external onlyOwner { inSale = inSale + _value; } function removeTokensInSale(uint256 _value) external onlyOwner { inSale = inSale - _value; } function addHardcapsizeUSD(uint256 _valuehard, uint256 _valuetotal, uint256 _valueinsale) external onlyOwner { hardcapsizeUSD = hardcapsizeUSD + _valuehard; totalUsdValueForPresale = totalUsdValueForPresale + _valuetotal; inSaleUSDvalue = inSaleUSDvalue + _valueinsale; } function removeHardcapsizeUSD(uint256 _valuehard, uint256 _valuetotal, uint256 _valueinsale) external onlyOwner { hardcapsizeUSD = hardcapsizeUSD - _valuehard; totalUsdValueForPresale = totalUsdValueForPresale - _valuetotal; inSaleUSDvalue = inSaleUSDvalue - _valueinsale; } function setSalePrice(uint256 _value, uint256 _valuenext) external onlyOwner { salePrice = _value; nextPrice = _valuenext; } function settotalTokensForPresale(uint256 _value) external onlyOwner { uint256 prevTotalTokensForPresale = totalTokensForPresale; uint256 diffTokensale = prevTotalTokensForPresale - totalTokensForPresale; inSale = inSale + diffTokensale; totalTokensForPresale = _value; } function pause() external onlyOwner { _pause(); isPresalePaused = true; } function unpause() external onlyOwner { _unpause(); isPresalePaused = false; } function calculatePrice(uint256 _amount) internal view returns (uint256 totalValue) { uint256 totalSoldUSD = (totalUsdValueForPresale * (10**18)) - inSaleUSDvalue; if (msg.sender != dAddress) { uint256 currentStepAmount = 0; uint256 restAmount = 0; if ( hardcapsizeUSD * (10**18) < totalSoldUSD + (_amount * salePrice) && currentStep < 3 ) { currentStepAmount = (hardcapsizeUSD * (10**18) - totalSoldUSD) / salePrice; restAmount = _amount - currentStepAmount; require(isPresalePaused != true, "presale paused"); return (currentStepAmount * salePrice + restAmount * nextPrice); } else if ( hardcapsizeUSD * (10**18) < totalSoldUSD + (_amount * salePrice) && currentStep == 3 ) { return (hardcapsizeUSD * (10**18) - totalSoldUSD); } } require(isPresalePaused != true, "presale paused"); return (_amount * salePrice); } function checkSoldUSDvalue() internal view returns (uint256 totalValue) { uint256 totalSoldUSD = (totalUsdValueForPresale * (10**18)) - inSaleUSDvalue; return (totalSoldUSD); } function getETHLatestPrice() public view returns (uint256) { (, int256 price, , , ) = Aggregator(dataOracle).latestRoundData(); price = (price * (10**10)); return uint256(price); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Low balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "ETH Payment failed"); } modifier checkSaleState(uint256 amount) { if (msg.sender != dAddress) { require( block.timestamp >= startTime && block.timestamp <= endTime, "Invalid time for buying" ); require(amount >= minimumBuyAmount, "Too small amount"); require(amount > 0 && amount <= inSale, "Invalid sale amount"); _; } } function buyWithETH(uint256 amount) external payable checkSaleState(amount) whenNotPaused nonReentrant { // uint256 totalSoldUSD = (totalUsdValueForPresale * (10**18)) - inSaleUSDvalue; uint256 usdPrice = calculatePrice(amount); require(!(usdPrice == 0 && currentStep == 3),"Presale it's over, sorry!"); uint256 ETHAmount = (usdPrice * (10**18)) / getETHLatestPrice(); require(msg.value >= ETHAmount, "Less payment"); uint256 excess = msg.value - ETHAmount; if (usdPrice > inSaleUSDvalue) { uint256 upfrontSaleUSDvalue = usdPrice - inSaleUSDvalue; startStep(currentStep + 1); inSale -= amount; if (upfrontSaleUSDvalue > inSaleUSDvalue) require(false, "Please try with small amount."); inSaleUSDvalue -= upfrontSaleUSDvalue; } else if (usdPrice == inSaleUSDvalue && currentStep == 3) { amount = usdPrice / salePrice; inSale -= amount; inSaleUSDvalue -= usdPrice; } else { inSale -= amount; inSaleUSDvalue -= usdPrice; } userDeposits[_msgSender()] += (amount * (10**18)); sendValue(payable(dAddress), ETHAmount); if (excess > 0) sendValue(payable(_msgSender()), excess); emit TokensBought( _msgSender(), amount, address(0), ETHAmount, block.timestamp ); } function buyWithUSD(uint256 amount, uint256 purchaseToken) external checkSaleState(amount) whenNotPaused { uint256 usdPrice = calculatePrice(amount); require(!(usdPrice == 0 && currentStep == 3),"Presale it's over, sorry!"); if (purchaseToken == 0 || purchaseToken == 1) usdPrice = usdPrice; //USDT and USDC have 6 decimals if (usdPrice > inSaleUSDvalue) { uint256 upfrontSaleUSDvalue = usdPrice - inSaleUSDvalue; startStep(currentStep + 1); inSale -= amount; inSaleUSDvalue -= upfrontSaleUSDvalue; } else if (usdPrice == inSaleUSDvalue && currentStep == 3) { amount = usdPrice / salePrice; inSale -= amount; inSaleUSDvalue -= usdPrice; } else { inSale -= amount; inSaleUSDvalue -= usdPrice; } userDeposits[_msgSender()] += (amount * (10**18)); IERC20 tokenInterface; if (purchaseToken == 0) tokenInterface = IERC20(USDTtoken); uint256 ourAllowance = tokenInterface.allowance( _msgSender(), address(this) ); require(usdPrice/(10**12) <= ourAllowance, "Make sure to add enough allowance"); (bool success, ) = address(tokenInterface).call( abi.encodeWithSignature( "transferFrom(address,address,uint256)", _msgSender(), dAddress, usdPrice/(10**12) ) ); require(success, "Token payment failed"); emit TokensBought( _msgSender(), amount, address(tokenInterface), usdPrice, block.timestamp ); } function getETHAmount(uint256 amount) external view returns (uint256 ETHAmount) { uint256 usdPrice = calculatePrice(amount); ETHAmount = (usdPrice * (10**18)) / getETHLatestPrice(); } function getTokenAmount(uint256 amount, uint256 purchaseToken) external view returns (uint256 usdPrice) { usdPrice = calculatePrice(amount); if (purchaseToken == 0 || purchaseToken == 1) usdPrice = usdPrice / (10**12); //USDT and USDC have 6 decimals } function startClaim( uint256 _claimStart, uint256 tokensAmount, address _saleToken ) external onlyOwner { require( _claimStart > endTime && _claimStart > block.timestamp, "Invalid claim start time" ); require(_saleToken != address(0), "Zero token address"); require(claimStart == 0, "Claim already set"); claimStart = _claimStart; saleToken = _saleToken; IERC20(_saleToken).transferFrom( _msgSender(), address(this), tokensAmount ); } function claim() external whenNotPaused { require(saleToken != address(0), "Sale token not added"); require(block.timestamp >= claimStart, "Claim has not started yet"); require(!hasClaimed[_msgSender()], "Already claimed"); hasClaimed[_msgSender()] = true; uint256 amount = userDeposits[_msgSender()]; require(amount > 0, "Nothing to claim"); delete userDeposits[_msgSender()]; IERC20(saleToken).transfer(_msgSender(), amount); emit TokensClaimed(_msgSender(), amount, block.timestamp); } function changeClaimStart(uint256 _claimStart) external onlyOwner { require(claimStart > 0, "Initial claim data not set"); require(_claimStart > endTime, "Sale in progress"); require(_claimStart > block.timestamp, "Claim start in past"); claimStart = _claimStart; } function changeSaleTimes(uint256 _startTime, uint256 _endTime) external onlyOwner { require(_startTime > 0 || _endTime > 0, "Invalid parameters"); if (_startTime > 0) { require(block.timestamp < _startTime, "Sale time in past"); startTime = _startTime; } if (_endTime > 0) { require(_endTime > startTime, "Invalid endTime"); endTime = _endTime; } } function setDaddress(address _dAddress) external onlyOwner { dAddress = _dAddress; } function changehardcapSize(uint256 _hardcapSize) external onlyOwner { require( _hardcapSize > 0 && _hardcapSize != hardcapSize, "Invalid hardcapSize size" ); hardcapSize = _hardcapSize; } function changeMinimumBuyAmount(uint256 _amount) external onlyOwner { require(_amount > 0 && _amount != minimumBuyAmount, "Invalid amount"); minimumBuyAmount = _amount; } function withdrawTokens(address token, uint256 amount) external onlyOwner { IERC20(token).transfer(dAddress, amount); } function withdrawETHs() external onlyOwner { (bool success, ) = payable(dAddress).call{value: address(this).balance}(""); require(success, "Failed to withdraw"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"_valuehard","type":"uint256"},{"internalType":"uint256","name":"_valuetotal","type":"uint256"},{"internalType":"uint256","name":"_valueinsale","type":"uint256"}],"name":"addHardcapsizeUSD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"addTokensInSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"baseDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"purchaseToken","type":"uint256"}],"name":"buyWithUSD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStart","type":"uint256"}],"name":"changeClaimStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"changeManuallyStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeMinimumBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"changeSaleTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_hardcapSize","type":"uint256"}],"name":"changehardcapSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getETHAmount","outputs":[{"internalType":"uint256","name":"ETHAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"purchaseToken","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"usdPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hardcapSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hardcapsizeUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSaleUSDvalue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_valuehard","type":"uint256"},{"internalType":"uint256","name":"_valuetotal","type":"uint256"},{"internalType":"uint256","name":"_valueinsale","type":"uint256"}],"name":"removeHardcapsizeUSD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"removeTokensInSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_dAddress","type":"address"}],"name":"setDaddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"uint256","name":"_valuenext","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"settotalTokensForPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_claimStart","type":"uint256"},{"internalType":"uint256","name":"tokensAmount","type":"uint256"},{"internalType":"address","name":"_saleToken","type":"address"}],"name":"startClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensForPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUsdValueForPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETHs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060016000819055506200003a6200002e6200027e60201b60201c565b6200028660201b60201c565b6000600160146101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600e819055506658d15e17628000600381905550630cf55faf600a81905550630cf55faf600581905550600060078190555060055460088190555042600b819055506276a700426200010b9190620004c1565b600c81905550735f4ec3df9cbd43714fe2740f5e3616155c5b8419601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c3e9bbe8b1a89e1ff19e2b5c1ee3b78b335a7c96601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dac17f958d2ee523a2206206994597c13d831ec7601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200027760016200034c60201b60201c565b506200057f565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060118190555060018103620003a4576658d15e17628000600381905550665fec5b60ef80006004819055506216e3606010819055506216e3606006819055506a013da329b633647180000060098190555062000485565b60028103620003f557665fec5b60ef8000600381905550666a94d74f430000600481905550621e8480601081905550621e84806006819055506a01a784379d99db4200000060098190555062000484565b600381036200044657666a94d74f430000600381905550666a94d74f430000600481905550622625a0601081905550622625a06006819055506a021165458500521280000060098190555062000483565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047a906200055d565b60405180910390fd5b5b5b50565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004ce8262000488565b9150620004db8362000488565b9250828201905080821115620004f657620004f562000492565b5b92915050565b600082825260208201905092915050565b7f50726573616c652069742773206f7665722c20736f7272792100000000000000600082015250565b600062000545601983620004fc565b915062000552826200050d565b602082019050919050565b60006020820190508181036000830152620005788162000536565b9050919050565b6140b1806200058f6000396000f3fe60806040526004361061027d5760003560e01c80638456cb591161014f578063bc755ec0116100c1578063ef46b2ab1161007a578063ef46b2ab146108e1578063ef9089d61461091e578063f04d688f14610949578063f2fde38b14610974578063f4c8297c1461099d578063f51f96dd146109c65761027d565b8063bc755ec0146107e7578063d26d18f614610810578063dfc7bf6d14610839578063e3c3bb6614610864578063e985e3671461088d578063e9b8c896146108b85761027d565b806394e992561161011357806394e99256146106ff57806399f029351461072a578063a022bad614610753578063a1bbc6a71461077c578063b2caaebd146107a7578063b32c7dc1146107d05761027d565b80638456cb591461064d57806389b429ff146106645780638d6a2ed51461068d5780638da5cb5b146106b857806394dc9cf3146106e35761027d565b806324a58a8d116101f35780635bc34f71116101ac5780635bc34f711461054d5780635c975abb14610578578063715018a6146105a357806373b2e80e146105ba57806378e97925146105f75780638008d5bc146106225761027d565b806324a58a8d146104755780632e5afcef1461049e5780633197cbb6146104c957806333f76178146104f45780633f4ba83a1461051f5780634e71d92d146105365761027d565b80630ba36dcd116102455780630ba36dcd146103515780630bc1236e1461038e5780630dc9c838146103cb57806311b3840e146103f45780631694505e1461041f5780631e8f0d391461044a5761027d565b8063053992c51461028257806305f7de4b146102ab57806306b091f9146102d657806307f18082146102ff57806308677efa14610328575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190612b08565b6109f1565b005b3480156102b757600080fd5b506102c0610a0b565b6040516102cd9190612b57565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612bd0565b610a11565b005b34801561030b57600080fd5b5061032660048036038101906103219190612c10565b610abe565b005b34801561033457600080fd5b5061034f600480360381019061034a9190612c10565b610b9b565b005b34801561035d57600080fd5b5061037860048036038101906103739190612c3d565b610bfe565b6040516103859190612b57565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612b08565b610c16565b6040516103c29190612b57565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612b08565b610c51565b005b34801561040057600080fd5b50610409610d53565b6040516104169190612b57565b60405180910390f35b34801561042b57600080fd5b50610434610d59565b6040516104419190612cc9565b60405180910390f35b34801561045657600080fd5b5061045f610d7f565b60405161046c9190612cff565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190612d1a565b610d92565b005b3480156104aa57600080fd5b506104b3610ddb565b6040516104c09190612b57565b60405180910390f35b3480156104d557600080fd5b506104de610de1565b6040516104eb9190612b57565b60405180910390f35b34801561050057600080fd5b50610509610de7565b6040516105169190612b57565b60405180910390f35b34801561052b57600080fd5b50610534610ded565b005b34801561054257600080fd5b5061054b610e1a565b005b34801561055957600080fd5b506105626111c5565b60405161056f9190612b57565b60405180910390f35b34801561058457600080fd5b5061058d6111cb565b60405161059a9190612cff565b60405180910390f35b3480156105af57600080fd5b506105b86111e2565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190612c3d565b6111f6565b6040516105ee9190612cff565b60405180910390f35b34801561060357600080fd5b5061060c611216565b6040516106199190612b57565b60405180910390f35b34801561062e57600080fd5b5061063761121c565b6040516106449190612b57565b60405180910390f35b34801561065957600080fd5b50610662611222565b005b34801561067057600080fd5b5061068b60048036038101906106869190612d1a565b61124f565b005b34801561069957600080fd5b506106a2611298565b6040516106af9190612b57565b60405180910390f35b3480156106c457600080fd5b506106cd61129e565b6040516106da9190612d7c565b60405180910390f35b6106fd60048036038101906106f89190612c10565b6112c8565b005b34801561070b57600080fd5b50610714611774565b6040516107219190612b57565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190612b08565b611828565b005b34801561075f57600080fd5b5061077a60048036038101906107759190612c10565b611e45565b005b34801561078857600080fd5b50610791611e64565b60405161079e9190612b57565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c99190612d97565b611e6a565b005b3480156107dc57600080fd5b506107e561204a565b005b3480156107f357600080fd5b5061080e60048036038101906108099190612c3d565b612123565b005b34801561081c57600080fd5b5061083760048036038101906108329190612c10565b61216f565b005b34801561084557600080fd5b5061084e612183565b60405161085b9190612b57565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190612c10565b612189565b005b34801561089957600080fd5b506108a26121ec565b6040516108af9190612d7c565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190612c10565b612212565b005b3480156108ed57600080fd5b5061090860048036038101906109039190612c10565b612253565b6040516109159190612b57565b60405180910390f35b34801561092a57600080fd5b5061093361228f565b6040516109409190612b57565b60405180910390f35b34801561095557600080fd5b5061095e612295565b60405161096b9190612b57565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190612c3d565b61229b565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190612c10565b61231e565b005b3480156109d257600080fd5b506109db61233d565b6040516109e89190612b57565b60405180910390f35b6109f9612343565b81600381905550806004819055505050565b60095481565b610a19612343565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610a76929190612dea565b6020604051808303816000875af1158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190612e3f565b505050565b610ac6612343565b6000600d5411610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290612ec9565b60405180910390fd5b600c548111610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690612f35565b60405180910390fd5b428111610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890612fa1565b60405180910390fd5b80600d8190555050565b610ba3612343565b600081118015610bb557506007548114155b610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb9061300d565b60405180910390fd5b8060078190555050565b60176020528060005260406000206000915090505481565b6000610c21836123c1565b90506000821480610c325750600182145b15610c4b5764e8d4a5100081610c48919061308b565b90505b92915050565b610c59612343565b6000821180610c685750600081115b610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90613108565b60405180910390fd5b6000821115610cfa57814210610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613174565b60405180910390fd5b81600b819055505b6000811115610d4f57600b548111610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906131e0565b60405180910390fd5b80600c819055505b5050565b60055481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b610d9a612343565b82601054610da89190613200565b60108190555081600654610dbc9190613200565b60068190555080600954610dd09190613200565b600981905550505050565b60105481565b600c5481565b600e5481565b610df5612343565b610dfd612626565b6000600f60006101000a81548160ff021916908315150217905550565b610e22612689565b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613280565b60405180910390fd5b600d54421015610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef906132ec565b60405180910390fd5b60186000610f046126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390613358565b60405180910390fd5b600160186000610f9a6126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000610ff96126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906133c4565b60405180910390fd5b601760006110856126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6111096126d3565b836040518363ffffffff1660e01b8152600401611127929190612dea565b6020604051808303816000875af1158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612e3f565b506111736126d3565b73ffffffffffffffffffffffffffffffffffffffff167f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b82426040516111ba9291906133e4565b60405180910390a250565b60115481565b6000600160149054906101000a900460ff16905090565b6111ea612343565b6111f460006126db565b565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b61122a612343565b6112326127a1565b6001600f60006101000a81548160ff021916908315150217905550565b611257612343565b82601054611265919061340d565b60108190555081600654611279919061340d565b6006819055508060095461128d919061340d565b600981905550505050565b60075481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177057600b5442101580156113325750600c544211155b611371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113689061348d565b60405180910390fd5b6007548110156113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad906134f9565b60405180910390fd5b6000811180156113c857506008548111155b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90613565565b60405180910390fd5b61140f612689565b611417612803565b6000611422836123c1565b905060008114801561143657506003601154145b15611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906135d1565b60405180910390fd5b6000611480611774565b670de0b6b3a76400008361149491906135f1565b61149e919061308b565b9050803410156114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da9061367f565b60405180910390fd5b600081346114f1919061340d565b90506009548311156115aa5760006009548461150d919061340d565b905061152660016011546115219190613200565b612852565b8560086000828254611538919061340d565b9250508190555060095481111561158b57600061158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611581906136eb565b60405180910390fd5b5b806009600082825461159d919061340d565b925050819055505061163d565b600954831480156115bd57506003601154145b1561160957600354836115d0919061308b565b945084600860008282546115e4919061340d565b9250508190555082600960008282546115fd919061340d565b9250508190555061163c565b846008600082825461161b919061340d565b925050819055508260096000828254611634919061340d565b925050819055505b5b670de0b6b3a76400008561165191906135f1565b6017600061165d6126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a69190613200565b925050819055506116d9601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612986565b60008111156116f4576116f36116ed6126d3565b82612986565b5b600073ffffffffffffffffffffffffffffffffffffffff16856117156126d3565b73ffffffffffffffffffffffffffffffffffffffff167f62e796e00a8e66154d78da76daae129635b4795a6e1b889f2caa6c5cea22ac68854260405161175c9291906133e4565b60405180910390a450505061176f612a7a565b5b5050565b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156117e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118089190613798565b5050509150506402540be4008161181f9190613813565b90508091505090565b81601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e4057600b5442101580156118925750600c544211155b6118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c89061348d565b60405180910390fd5b600754811015611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d906134f9565b60405180910390fd5b60008111801561192857506008548111155b611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613565565b60405180910390fd5b61196f612689565b600061197a846123c1565b905060008114801561198e57506003601154145b156119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c5906135d1565b60405180910390fd5b60008314806119dd5750600183145b50600954811115611a49576000600954826119f8919061340d565b9050611a116001601154611a0c9190613200565b612852565b8460086000828254611a23919061340d565b925050819055508060096000828254611a3c919061340d565b9250508190555050611adc565b60095481148015611a5c57506003601154145b15611aa85760035481611a6f919061308b565b93508360086000828254611a83919061340d565b925050819055508060096000828254611a9c919061340d565b92505081905550611adb565b8360086000828254611aba919061340d565b925050819055508060096000828254611ad3919061340d565b925050819055505b5b670de0b6b3a764000084611af091906135f1565b60176000611afc6126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b459190613200565b925050819055506000808403611b7b57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e611ba16126d3565b306040518363ffffffff1660e01b8152600401611bbf92919061388b565b602060405180830381865afa158015611bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0091906138b4565b90508064e8d4a5100084611c14919061308b565b1115611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c90613953565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16611c766126d3565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1664e8d4a5100087611caa919061308b565b604051602401611cbc93929190613973565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611d469190613a1b565b6000604051808303816000865af19150503d8060008114611d83576040519150601f19603f3d011682016040523d82523d6000602084013e611d88565b606091505b5050905080611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613a7e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1687611dec6126d3565b73ffffffffffffffffffffffffffffffffffffffff167f62e796e00a8e66154d78da76daae129635b4795a6e1b889f2caa6c5cea22ac688742604051611e339291906133e4565b60405180910390a4505050505b505050565b611e4d612343565b80600854611e5b9190613200565b60088190555050565b600a5481565b611e72612343565b600c5483118015611e8257504283115b611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890613aea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790613b56565b60405180910390fd5b6000600d5414611f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6c90613bc2565b60405180910390fd5b82600d8190555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166323b872dd611fe16126d3565b30856040518463ffffffff1660e01b815260040161200193929190613973565b6020604051808303816000875af1158015612020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120449190612e3f565b50505050565b612052612343565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161209a90613c08565b60006040518083038185875af1925050503d80600081146120d7576040519150601f19603f3d011682016040523d82523d6000602084013e6120dc565b606091505b5050905080612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790613c69565b60405180910390fd5b50565b61212b612343565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612177612343565b61218081612852565b50565b60065481565b612191612343565b6000811180156121a35750600a548114155b6121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990613cd5565b60405180910390fd5b80600a8190555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61221a612343565b60006005549050600060055482612231919061340d565b9050806008546122419190613200565b60088190555082600581905550505050565b60008061225f836123c1565b9050612269611774565b670de0b6b3a76400008261227d91906135f1565b612287919061308b565b915050919050565b60045481565b600d5481565b6122a3612343565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990613d67565b60405180910390fd5b61231b816126db565b50565b612326612343565b80600854612334919061340d565b60088190555050565b60035481565b61234b6126d3565b73ffffffffffffffffffffffffffffffffffffffff1661236961129e565b73ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690613dd3565b60405180910390fd5b565b600080600954670de0b6b3a76400006006546123dd91906135f1565b6123e7919061340d565b9050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125b9576000806003548561244f91906135f1565b8361245a9190613200565b670de0b6b3a764000060105461247091906135f1565b10801561247f57506003601154105b156125485760035483670de0b6b3a764000060105461249e91906135f1565b6124a8919061340d565b6124b2919061308b565b915081856124c0919061340d565b905060011515600f60009054906101000a900460ff16151503612518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250f90613e3f565b60405180910390fd5b6004548161252691906135f1565b6003548361253491906135f1565b61253e9190613200565b9350505050612621565b6003548561255691906135f1565b836125619190613200565b670de0b6b3a764000060105461257791906135f1565b10801561258657506003601154145b156125b65782670de0b6b3a76400006010546125a291906135f1565b6125ac919061340d565b9350505050612621565b50505b60011515600f60009054906101000a900460ff1615150361260f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260690613e3f565b60405180910390fd5b6003548361261d91906135f1565b9150505b919050565b61262e612a84565b6000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6126726126d3565b60405161267f9190612d7c565b60405180910390a1565b6126916111cb565b156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890613eab565b60405180910390fd5b565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127a9612689565b60018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127ec6126d3565b6040516127f99190612d7c565b60405180910390a1565b600260005403612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f90613f17565b60405180910390fd5b6002600081905550565b80601181905550600181036128a8576658d15e17628000600381905550665fec5b60ef80006004819055506216e3606010819055506216e3606006819055506a013da329b6336471800000600981905550612983565b600281036128f757665fec5b60ef8000600381905550666a94d74f430000600481905550621e8480601081905550621e84806006819055506a01a784379d99db42000000600981905550612982565b6003810361294657666a94d74f430000600381905550666a94d74f430000600481905550622625a0601081905550622625a06006819055506a0211654585005212800000600981905550612981565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906135d1565b60405180910390fd5b5b5b50565b804710156129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c090613f83565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516129ef90613c08565b60006040518083038185875af1925050503d8060008114612a2c576040519150601f19603f3d011682016040523d82523d6000602084013e612a31565b606091505b5050905080612a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6c90613fef565b60405180910390fd5b505050565b6001600081905550565b612a8c6111cb565b612acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac29061405b565b60405180910390fd5b565b600080fd5b6000819050919050565b612ae581612ad2565b8114612af057600080fd5b50565b600081359050612b0281612adc565b92915050565b60008060408385031215612b1f57612b1e612acd565b5b6000612b2d85828601612af3565b9250506020612b3e85828601612af3565b9150509250929050565b612b5181612ad2565b82525050565b6000602082019050612b6c6000830184612b48565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b9d82612b72565b9050919050565b612bad81612b92565b8114612bb857600080fd5b50565b600081359050612bca81612ba4565b92915050565b60008060408385031215612be757612be6612acd565b5b6000612bf585828601612bbb565b9250506020612c0685828601612af3565b9150509250929050565b600060208284031215612c2657612c25612acd565b5b6000612c3484828501612af3565b91505092915050565b600060208284031215612c5357612c52612acd565b5b6000612c6184828501612bbb565b91505092915050565b6000819050919050565b6000612c8f612c8a612c8584612b72565b612c6a565b612b72565b9050919050565b6000612ca182612c74565b9050919050565b6000612cb382612c96565b9050919050565b612cc381612ca8565b82525050565b6000602082019050612cde6000830184612cba565b92915050565b60008115159050919050565b612cf981612ce4565b82525050565b6000602082019050612d146000830184612cf0565b92915050565b600080600060608486031215612d3357612d32612acd565b5b6000612d4186828701612af3565b9350506020612d5286828701612af3565b9250506040612d6386828701612af3565b9150509250925092565b612d7681612b92565b82525050565b6000602082019050612d916000830184612d6d565b92915050565b600080600060608486031215612db057612daf612acd565b5b6000612dbe86828701612af3565b9350506020612dcf86828701612af3565b9250506040612de086828701612bbb565b9150509250925092565b6000604082019050612dff6000830185612d6d565b612e0c6020830184612b48565b9392505050565b612e1c81612ce4565b8114612e2757600080fd5b50565b600081519050612e3981612e13565b92915050565b600060208284031215612e5557612e54612acd565b5b6000612e6384828501612e2a565b91505092915050565b600082825260208201905092915050565b7f496e697469616c20636c61696d2064617461206e6f7420736574000000000000600082015250565b6000612eb3601a83612e6c565b9150612ebe82612e7d565b602082019050919050565b60006020820190508181036000830152612ee281612ea6565b9050919050565b7f53616c6520696e2070726f677265737300000000000000000000000000000000600082015250565b6000612f1f601083612e6c565b9150612f2a82612ee9565b602082019050919050565b60006020820190508181036000830152612f4e81612f12565b9050919050565b7f436c61696d20737461727420696e207061737400000000000000000000000000600082015250565b6000612f8b601383612e6c565b9150612f9682612f55565b602082019050919050565b60006020820190508181036000830152612fba81612f7e565b9050919050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000612ff7600e83612e6c565b915061300282612fc1565b602082019050919050565b6000602082019050818103600083015261302681612fea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061309682612ad2565b91506130a183612ad2565b9250826130b1576130b061302d565b5b828204905092915050565b7f496e76616c696420706172616d65746572730000000000000000000000000000600082015250565b60006130f2601283612e6c565b91506130fd826130bc565b602082019050919050565b60006020820190508181036000830152613121816130e5565b9050919050565b7f53616c652074696d6520696e2070617374000000000000000000000000000000600082015250565b600061315e601183612e6c565b915061316982613128565b602082019050919050565b6000602082019050818103600083015261318d81613151565b9050919050565b7f496e76616c696420656e6454696d650000000000000000000000000000000000600082015250565b60006131ca600f83612e6c565b91506131d582613194565b602082019050919050565b600060208201905081810360008301526131f9816131bd565b9050919050565b600061320b82612ad2565b915061321683612ad2565b925082820190508082111561322e5761322d61305c565b5b92915050565b7f53616c6520746f6b656e206e6f74206164646564000000000000000000000000600082015250565b600061326a601483612e6c565b915061327582613234565b602082019050919050565b600060208201905081810360008301526132998161325d565b9050919050565b7f436c61696d20686173206e6f7420737461727465642079657400000000000000600082015250565b60006132d6601983612e6c565b91506132e1826132a0565b602082019050919050565b60006020820190508181036000830152613305816132c9565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b6000613342600f83612e6c565b915061334d8261330c565b602082019050919050565b6000602082019050818103600083015261337181613335565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b60006133ae601083612e6c565b91506133b982613378565b602082019050919050565b600060208201905081810360008301526133dd816133a1565b9050919050565b60006040820190506133f96000830185612b48565b6134066020830184612b48565b9392505050565b600061341882612ad2565b915061342383612ad2565b925082820390508181111561343b5761343a61305c565b5b92915050565b7f496e76616c69642074696d6520666f7220627579696e67000000000000000000600082015250565b6000613477601783612e6c565b915061348282613441565b602082019050919050565b600060208201905081810360008301526134a68161346a565b9050919050565b7f546f6f20736d616c6c20616d6f756e7400000000000000000000000000000000600082015250565b60006134e3601083612e6c565b91506134ee826134ad565b602082019050919050565b60006020820190508181036000830152613512816134d6565b9050919050565b7f496e76616c69642073616c6520616d6f756e7400000000000000000000000000600082015250565b600061354f601383612e6c565b915061355a82613519565b602082019050919050565b6000602082019050818103600083015261357e81613542565b9050919050565b7f50726573616c652069742773206f7665722c20736f7272792100000000000000600082015250565b60006135bb601983612e6c565b91506135c682613585565b602082019050919050565b600060208201905081810360008301526135ea816135ae565b9050919050565b60006135fc82612ad2565b915061360783612ad2565b925082820261361581612ad2565b9150828204841483151761362c5761362b61305c565b5b5092915050565b7f4c657373207061796d656e740000000000000000000000000000000000000000600082015250565b6000613669600c83612e6c565b915061367482613633565b602082019050919050565b600060208201905081810360008301526136988161365c565b9050919050565b7f506c6561736520747279207769746820736d616c6c20616d6f756e742e000000600082015250565b60006136d5601d83612e6c565b91506136e08261369f565b602082019050919050565b60006020820190508181036000830152613704816136c8565b9050919050565b600069ffffffffffffffffffff82169050919050565b61372a8161370b565b811461373557600080fd5b50565b60008151905061374781613721565b92915050565b6000819050919050565b6137608161374d565b811461376b57600080fd5b50565b60008151905061377d81613757565b92915050565b60008151905061379281612adc565b92915050565b600080600080600060a086880312156137b4576137b3612acd565b5b60006137c288828901613738565b95505060206137d38882890161376e565b94505060406137e488828901613783565b93505060606137f588828901613783565b925050608061380688828901613738565b9150509295509295909350565b600061381e8261374d565b91506138298361374d565b92508282026138378161374d565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561386f5761386e61305c565b5b82820584148315176138845761388361305c565b5b5092915050565b60006040820190506138a06000830185612d6d565b6138ad6020830184612d6d565b9392505050565b6000602082840312156138ca576138c9612acd565b5b60006138d884828501613783565b91505092915050565b7f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b600061393d602183612e6c565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b60006060820190506139886000830186612d6d565b6139956020830185612d6d565b6139a26040830184612b48565b949350505050565b600081519050919050565b600081905092915050565b60005b838110156139de5780820151818401526020810190506139c3565b60008484015250505050565b60006139f5826139aa565b6139ff81856139b5565b9350613a0f8185602086016139c0565b80840191505092915050565b6000613a2782846139ea565b915081905092915050565b7f546f6b656e207061796d656e74206661696c6564000000000000000000000000600082015250565b6000613a68601483612e6c565b9150613a7382613a32565b602082019050919050565b60006020820190508181036000830152613a9781613a5b565b9050919050565b7f496e76616c696420636c61696d2073746172742074696d650000000000000000600082015250565b6000613ad4601883612e6c565b9150613adf82613a9e565b602082019050919050565b60006020820190508181036000830152613b0381613ac7565b9050919050565b7f5a65726f20746f6b656e20616464726573730000000000000000000000000000600082015250565b6000613b40601283612e6c565b9150613b4b82613b0a565b602082019050919050565b60006020820190508181036000830152613b6f81613b33565b9050919050565b7f436c61696d20616c726561647920736574000000000000000000000000000000600082015250565b6000613bac601183612e6c565b9150613bb782613b76565b602082019050919050565b60006020820190508181036000830152613bdb81613b9f565b9050919050565b50565b6000613bf26000836139b5565b9150613bfd82613be2565b600082019050919050565b6000613c1382613be5565b9150819050919050565b7f4661696c656420746f2077697468647261770000000000000000000000000000600082015250565b6000613c53601283612e6c565b9150613c5e82613c1d565b602082019050919050565b60006020820190508181036000830152613c8281613c46565b9050919050565b7f496e76616c6964206861726463617053697a652073697a650000000000000000600082015250565b6000613cbf601883612e6c565b9150613cca82613c89565b602082019050919050565b60006020820190508181036000830152613cee81613cb2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d51602683612e6c565b9150613d5c82613cf5565b604082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dbd602083612e6c565b9150613dc882613d87565b602082019050919050565b60006020820190508181036000830152613dec81613db0565b9050919050565b7f70726573616c6520706175736564000000000000000000000000000000000000600082015250565b6000613e29600e83612e6c565b9150613e3482613df3565b602082019050919050565b60006020820190508181036000830152613e5881613e1c565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613e95601083612e6c565b9150613ea082613e5f565b602082019050919050565b60006020820190508181036000830152613ec481613e88565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613f01601f83612e6c565b9150613f0c82613ecb565b602082019050919050565b60006020820190508181036000830152613f3081613ef4565b9050919050565b7f4c6f772062616c616e6365000000000000000000000000000000000000000000600082015250565b6000613f6d600b83612e6c565b9150613f7882613f37565b602082019050919050565b60006020820190508181036000830152613f9c81613f60565b9050919050565b7f455448205061796d656e74206661696c65640000000000000000000000000000600082015250565b6000613fd9601283612e6c565b9150613fe482613fa3565b602082019050919050565b6000602082019050818103600083015261400881613fcc565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614045601483612e6c565b91506140508261400f565b602082019050919050565b6000602082019050818103600083015261407481614038565b905091905056fea26469706673582212206ed09ee534f8e82fae6ac5052432e7fb0aa27bc86b893e5bc8fecd4ea4bded6864736f6c63430008120033
Deployed Bytecode
0x60806040526004361061027d5760003560e01c80638456cb591161014f578063bc755ec0116100c1578063ef46b2ab1161007a578063ef46b2ab146108e1578063ef9089d61461091e578063f04d688f14610949578063f2fde38b14610974578063f4c8297c1461099d578063f51f96dd146109c65761027d565b8063bc755ec0146107e7578063d26d18f614610810578063dfc7bf6d14610839578063e3c3bb6614610864578063e985e3671461088d578063e9b8c896146108b85761027d565b806394e992561161011357806394e99256146106ff57806399f029351461072a578063a022bad614610753578063a1bbc6a71461077c578063b2caaebd146107a7578063b32c7dc1146107d05761027d565b80638456cb591461064d57806389b429ff146106645780638d6a2ed51461068d5780638da5cb5b146106b857806394dc9cf3146106e35761027d565b806324a58a8d116101f35780635bc34f71116101ac5780635bc34f711461054d5780635c975abb14610578578063715018a6146105a357806373b2e80e146105ba57806378e97925146105f75780638008d5bc146106225761027d565b806324a58a8d146104755780632e5afcef1461049e5780633197cbb6146104c957806333f76178146104f45780633f4ba83a1461051f5780634e71d92d146105365761027d565b80630ba36dcd116102455780630ba36dcd146103515780630bc1236e1461038e5780630dc9c838146103cb57806311b3840e146103f45780631694505e1461041f5780631e8f0d391461044a5761027d565b8063053992c51461028257806305f7de4b146102ab57806306b091f9146102d657806307f18082146102ff57806308677efa14610328575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190612b08565b6109f1565b005b3480156102b757600080fd5b506102c0610a0b565b6040516102cd9190612b57565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612bd0565b610a11565b005b34801561030b57600080fd5b5061032660048036038101906103219190612c10565b610abe565b005b34801561033457600080fd5b5061034f600480360381019061034a9190612c10565b610b9b565b005b34801561035d57600080fd5b5061037860048036038101906103739190612c3d565b610bfe565b6040516103859190612b57565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612b08565b610c16565b6040516103c29190612b57565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed9190612b08565b610c51565b005b34801561040057600080fd5b50610409610d53565b6040516104169190612b57565b60405180910390f35b34801561042b57600080fd5b50610434610d59565b6040516104419190612cc9565b60405180910390f35b34801561045657600080fd5b5061045f610d7f565b60405161046c9190612cff565b60405180910390f35b34801561048157600080fd5b5061049c60048036038101906104979190612d1a565b610d92565b005b3480156104aa57600080fd5b506104b3610ddb565b6040516104c09190612b57565b60405180910390f35b3480156104d557600080fd5b506104de610de1565b6040516104eb9190612b57565b60405180910390f35b34801561050057600080fd5b50610509610de7565b6040516105169190612b57565b60405180910390f35b34801561052b57600080fd5b50610534610ded565b005b34801561054257600080fd5b5061054b610e1a565b005b34801561055957600080fd5b506105626111c5565b60405161056f9190612b57565b60405180910390f35b34801561058457600080fd5b5061058d6111cb565b60405161059a9190612cff565b60405180910390f35b3480156105af57600080fd5b506105b86111e2565b005b3480156105c657600080fd5b506105e160048036038101906105dc9190612c3d565b6111f6565b6040516105ee9190612cff565b60405180910390f35b34801561060357600080fd5b5061060c611216565b6040516106199190612b57565b60405180910390f35b34801561062e57600080fd5b5061063761121c565b6040516106449190612b57565b60405180910390f35b34801561065957600080fd5b50610662611222565b005b34801561067057600080fd5b5061068b60048036038101906106869190612d1a565b61124f565b005b34801561069957600080fd5b506106a2611298565b6040516106af9190612b57565b60405180910390f35b3480156106c457600080fd5b506106cd61129e565b6040516106da9190612d7c565b60405180910390f35b6106fd60048036038101906106f89190612c10565b6112c8565b005b34801561070b57600080fd5b50610714611774565b6040516107219190612b57565b60405180910390f35b34801561073657600080fd5b50610751600480360381019061074c9190612b08565b611828565b005b34801561075f57600080fd5b5061077a60048036038101906107759190612c10565b611e45565b005b34801561078857600080fd5b50610791611e64565b60405161079e9190612b57565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c99190612d97565b611e6a565b005b3480156107dc57600080fd5b506107e561204a565b005b3480156107f357600080fd5b5061080e60048036038101906108099190612c3d565b612123565b005b34801561081c57600080fd5b5061083760048036038101906108329190612c10565b61216f565b005b34801561084557600080fd5b5061084e612183565b60405161085b9190612b57565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190612c10565b612189565b005b34801561089957600080fd5b506108a26121ec565b6040516108af9190612d7c565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190612c10565b612212565b005b3480156108ed57600080fd5b5061090860048036038101906109039190612c10565b612253565b6040516109159190612b57565b60405180910390f35b34801561092a57600080fd5b5061093361228f565b6040516109409190612b57565b60405180910390f35b34801561095557600080fd5b5061095e612295565b60405161096b9190612b57565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190612c3d565b61229b565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190612c10565b61231e565b005b3480156109d257600080fd5b506109db61233d565b6040516109e89190612b57565b60405180910390f35b6109f9612343565b81600381905550806004819055505050565b60095481565b610a19612343565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610a76929190612dea565b6020604051808303816000875af1158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190612e3f565b505050565b610ac6612343565b6000600d5411610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290612ec9565b60405180910390fd5b600c548111610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690612f35565b60405180910390fd5b428111610b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8890612fa1565b60405180910390fd5b80600d8190555050565b610ba3612343565b600081118015610bb557506007548114155b610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb9061300d565b60405180910390fd5b8060078190555050565b60176020528060005260406000206000915090505481565b6000610c21836123c1565b90506000821480610c325750600182145b15610c4b5764e8d4a5100081610c48919061308b565b90505b92915050565b610c59612343565b6000821180610c685750600081115b610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e90613108565b60405180910390fd5b6000821115610cfa57814210610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613174565b60405180910390fd5b81600b819055505b6000811115610d4f57600b548111610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906131e0565b60405180910390fd5b80600c819055505b5050565b60055481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900460ff1681565b610d9a612343565b82601054610da89190613200565b60108190555081600654610dbc9190613200565b60068190555080600954610dd09190613200565b600981905550505050565b60105481565b600c5481565b600e5481565b610df5612343565b610dfd612626565b6000600f60006101000a81548160ff021916908315150217905550565b610e22612689565b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa90613280565b60405180910390fd5b600d54421015610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef906132ec565b60405180910390fd5b60186000610f046126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390613358565b60405180910390fd5b600160186000610f9a6126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060176000610ff96126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008111611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906133c4565b60405180910390fd5b601760006110856126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6111096126d3565b836040518363ffffffff1660e01b8152600401611127929190612dea565b6020604051808303816000875af1158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612e3f565b506111736126d3565b73ffffffffffffffffffffffffffffffffffffffff167f9923b4306c6c030f2bdfbf156517d5983b87e15b96176da122cd4f2effa4ba7b82426040516111ba9291906133e4565b60405180910390a250565b60115481565b6000600160149054906101000a900460ff16905090565b6111ea612343565b6111f460006126db565b565b60186020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60085481565b61122a612343565b6112326127a1565b6001600f60006101000a81548160ff021916908315150217905550565b611257612343565b82601054611265919061340d565b60108190555081600654611279919061340d565b6006819055508060095461128d919061340d565b600981905550505050565b60075481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461177057600b5442101580156113325750600c544211155b611371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113689061348d565b60405180910390fd5b6007548110156113b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ad906134f9565b60405180910390fd5b6000811180156113c857506008548111155b611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90613565565b60405180910390fd5b61140f612689565b611417612803565b6000611422836123c1565b905060008114801561143657506003601154145b15611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d906135d1565b60405180910390fd5b6000611480611774565b670de0b6b3a76400008361149491906135f1565b61149e919061308b565b9050803410156114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da9061367f565b60405180910390fd5b600081346114f1919061340d565b90506009548311156115aa5760006009548461150d919061340d565b905061152660016011546115219190613200565b612852565b8560086000828254611538919061340d565b9250508190555060095481111561158b57600061158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611581906136eb565b60405180910390fd5b5b806009600082825461159d919061340d565b925050819055505061163d565b600954831480156115bd57506003601154145b1561160957600354836115d0919061308b565b945084600860008282546115e4919061340d565b9250508190555082600960008282546115fd919061340d565b9250508190555061163c565b846008600082825461161b919061340d565b925050819055508260096000828254611634919061340d565b925050819055505b5b670de0b6b3a76400008561165191906135f1565b6017600061165d6126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116a69190613200565b925050819055506116d9601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612986565b60008111156116f4576116f36116ed6126d3565b82612986565b5b600073ffffffffffffffffffffffffffffffffffffffff16856117156126d3565b73ffffffffffffffffffffffffffffffffffffffff167f62e796e00a8e66154d78da76daae129635b4795a6e1b889f2caa6c5cea22ac68854260405161175c9291906133e4565b60405180910390a450505061176f612a7a565b5b5050565b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156117e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118089190613798565b5050509150506402540be4008161181f9190613813565b90508091505090565b81601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e4057600b5442101580156118925750600c544211155b6118d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c89061348d565b60405180910390fd5b600754811015611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d906134f9565b60405180910390fd5b60008111801561192857506008548111155b611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613565565b60405180910390fd5b61196f612689565b600061197a846123c1565b905060008114801561198e57506003601154145b156119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c5906135d1565b60405180910390fd5b60008314806119dd5750600183145b50600954811115611a49576000600954826119f8919061340d565b9050611a116001601154611a0c9190613200565b612852565b8460086000828254611a23919061340d565b925050819055508060096000828254611a3c919061340d565b9250508190555050611adc565b60095481148015611a5c57506003601154145b15611aa85760035481611a6f919061308b565b93508360086000828254611a83919061340d565b925050819055508060096000828254611a9c919061340d565b92505081905550611adb565b8360086000828254611aba919061340d565b925050819055508060096000828254611ad3919061340d565b925050819055505b5b670de0b6b3a764000084611af091906135f1565b60176000611afc6126d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b459190613200565b925050819055506000808403611b7b57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e611ba16126d3565b306040518363ffffffff1660e01b8152600401611bbf92919061388b565b602060405180830381865afa158015611bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0091906138b4565b90508064e8d4a5100084611c14919061308b565b1115611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c90613953565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16611c766126d3565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1664e8d4a5100087611caa919061308b565b604051602401611cbc93929190613973565b6040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611d469190613a1b565b6000604051808303816000865af19150503d8060008114611d83576040519150601f19603f3d011682016040523d82523d6000602084013e611d88565b606091505b5050905080611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613a7e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1687611dec6126d3565b73ffffffffffffffffffffffffffffffffffffffff167f62e796e00a8e66154d78da76daae129635b4795a6e1b889f2caa6c5cea22ac688742604051611e339291906133e4565b60405180910390a4505050505b505050565b611e4d612343565b80600854611e5b9190613200565b60088190555050565b600a5481565b611e72612343565b600c5483118015611e8257504283115b611ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb890613aea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790613b56565b60405180910390fd5b6000600d5414611f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6c90613bc2565b60405180910390fd5b82600d8190555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff166323b872dd611fe16126d3565b30856040518463ffffffff1660e01b815260040161200193929190613973565b6020604051808303816000875af1158015612020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120449190612e3f565b50505050565b612052612343565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161209a90613c08565b60006040518083038185875af1925050503d80600081146120d7576040519150601f19603f3d011682016040523d82523d6000602084013e6120dc565b606091505b5050905080612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790613c69565b60405180910390fd5b50565b61212b612343565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612177612343565b61218081612852565b50565b60065481565b612191612343565b6000811180156121a35750600a548114155b6121e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d990613cd5565b60405180910390fd5b80600a8190555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61221a612343565b60006005549050600060055482612231919061340d565b9050806008546122419190613200565b60088190555082600581905550505050565b60008061225f836123c1565b9050612269611774565b670de0b6b3a76400008261227d91906135f1565b612287919061308b565b915050919050565b60045481565b600d5481565b6122a3612343565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990613d67565b60405180910390fd5b61231b816126db565b50565b612326612343565b80600854612334919061340d565b60088190555050565b60035481565b61234b6126d3565b73ffffffffffffffffffffffffffffffffffffffff1661236961129e565b73ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690613dd3565b60405180910390fd5b565b600080600954670de0b6b3a76400006006546123dd91906135f1565b6123e7919061340d565b9050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125b9576000806003548561244f91906135f1565b8361245a9190613200565b670de0b6b3a764000060105461247091906135f1565b10801561247f57506003601154105b156125485760035483670de0b6b3a764000060105461249e91906135f1565b6124a8919061340d565b6124b2919061308b565b915081856124c0919061340d565b905060011515600f60009054906101000a900460ff16151503612518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250f90613e3f565b60405180910390fd5b6004548161252691906135f1565b6003548361253491906135f1565b61253e9190613200565b9350505050612621565b6003548561255691906135f1565b836125619190613200565b670de0b6b3a764000060105461257791906135f1565b10801561258657506003601154145b156125b65782670de0b6b3a76400006010546125a291906135f1565b6125ac919061340d565b9350505050612621565b50505b60011515600f60009054906101000a900460ff1615150361260f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260690613e3f565b60405180910390fd5b6003548361261d91906135f1565b9150505b919050565b61262e612a84565b6000600160146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6126726126d3565b60405161267f9190612d7c565b60405180910390a1565b6126916111cb565b156126d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c890613eab565b60405180910390fd5b565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6127a9612689565b60018060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127ec6126d3565b6040516127f99190612d7c565b60405180910390a1565b600260005403612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f90613f17565b60405180910390fd5b6002600081905550565b80601181905550600181036128a8576658d15e17628000600381905550665fec5b60ef80006004819055506216e3606010819055506216e3606006819055506a013da329b6336471800000600981905550612983565b600281036128f757665fec5b60ef8000600381905550666a94d74f430000600481905550621e8480601081905550621e84806006819055506a01a784379d99db42000000600981905550612982565b6003810361294657666a94d74f430000600381905550666a94d74f430000600481905550622625a0601081905550622625a06006819055506a0211654585005212800000600981905550612981565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612978906135d1565b60405180910390fd5b5b5b50565b804710156129c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c090613f83565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516129ef90613c08565b60006040518083038185875af1925050503d8060008114612a2c576040519150601f19603f3d011682016040523d82523d6000602084013e612a31565b606091505b5050905080612a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6c90613fef565b60405180910390fd5b505050565b6001600081905550565b612a8c6111cb565b612acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac29061405b565b60405180910390fd5b565b600080fd5b6000819050919050565b612ae581612ad2565b8114612af057600080fd5b50565b600081359050612b0281612adc565b92915050565b60008060408385031215612b1f57612b1e612acd565b5b6000612b2d85828601612af3565b9250506020612b3e85828601612af3565b9150509250929050565b612b5181612ad2565b82525050565b6000602082019050612b6c6000830184612b48565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b9d82612b72565b9050919050565b612bad81612b92565b8114612bb857600080fd5b50565b600081359050612bca81612ba4565b92915050565b60008060408385031215612be757612be6612acd565b5b6000612bf585828601612bbb565b9250506020612c0685828601612af3565b9150509250929050565b600060208284031215612c2657612c25612acd565b5b6000612c3484828501612af3565b91505092915050565b600060208284031215612c5357612c52612acd565b5b6000612c6184828501612bbb565b91505092915050565b6000819050919050565b6000612c8f612c8a612c8584612b72565b612c6a565b612b72565b9050919050565b6000612ca182612c74565b9050919050565b6000612cb382612c96565b9050919050565b612cc381612ca8565b82525050565b6000602082019050612cde6000830184612cba565b92915050565b60008115159050919050565b612cf981612ce4565b82525050565b6000602082019050612d146000830184612cf0565b92915050565b600080600060608486031215612d3357612d32612acd565b5b6000612d4186828701612af3565b9350506020612d5286828701612af3565b9250506040612d6386828701612af3565b9150509250925092565b612d7681612b92565b82525050565b6000602082019050612d916000830184612d6d565b92915050565b600080600060608486031215612db057612daf612acd565b5b6000612dbe86828701612af3565b9350506020612dcf86828701612af3565b9250506040612de086828701612bbb565b9150509250925092565b6000604082019050612dff6000830185612d6d565b612e0c6020830184612b48565b9392505050565b612e1c81612ce4565b8114612e2757600080fd5b50565b600081519050612e3981612e13565b92915050565b600060208284031215612e5557612e54612acd565b5b6000612e6384828501612e2a565b91505092915050565b600082825260208201905092915050565b7f496e697469616c20636c61696d2064617461206e6f7420736574000000000000600082015250565b6000612eb3601a83612e6c565b9150612ebe82612e7d565b602082019050919050565b60006020820190508181036000830152612ee281612ea6565b9050919050565b7f53616c6520696e2070726f677265737300000000000000000000000000000000600082015250565b6000612f1f601083612e6c565b9150612f2a82612ee9565b602082019050919050565b60006020820190508181036000830152612f4e81612f12565b9050919050565b7f436c61696d20737461727420696e207061737400000000000000000000000000600082015250565b6000612f8b601383612e6c565b9150612f9682612f55565b602082019050919050565b60006020820190508181036000830152612fba81612f7e565b9050919050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000612ff7600e83612e6c565b915061300282612fc1565b602082019050919050565b6000602082019050818103600083015261302681612fea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061309682612ad2565b91506130a183612ad2565b9250826130b1576130b061302d565b5b828204905092915050565b7f496e76616c696420706172616d65746572730000000000000000000000000000600082015250565b60006130f2601283612e6c565b91506130fd826130bc565b602082019050919050565b60006020820190508181036000830152613121816130e5565b9050919050565b7f53616c652074696d6520696e2070617374000000000000000000000000000000600082015250565b600061315e601183612e6c565b915061316982613128565b602082019050919050565b6000602082019050818103600083015261318d81613151565b9050919050565b7f496e76616c696420656e6454696d650000000000000000000000000000000000600082015250565b60006131ca600f83612e6c565b91506131d582613194565b602082019050919050565b600060208201905081810360008301526131f9816131bd565b9050919050565b600061320b82612ad2565b915061321683612ad2565b925082820190508082111561322e5761322d61305c565b5b92915050565b7f53616c6520746f6b656e206e6f74206164646564000000000000000000000000600082015250565b600061326a601483612e6c565b915061327582613234565b602082019050919050565b600060208201905081810360008301526132998161325d565b9050919050565b7f436c61696d20686173206e6f7420737461727465642079657400000000000000600082015250565b60006132d6601983612e6c565b91506132e1826132a0565b602082019050919050565b60006020820190508181036000830152613305816132c9565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b6000613342600f83612e6c565b915061334d8261330c565b602082019050919050565b6000602082019050818103600083015261337181613335565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b60006133ae601083612e6c565b91506133b982613378565b602082019050919050565b600060208201905081810360008301526133dd816133a1565b9050919050565b60006040820190506133f96000830185612b48565b6134066020830184612b48565b9392505050565b600061341882612ad2565b915061342383612ad2565b925082820390508181111561343b5761343a61305c565b5b92915050565b7f496e76616c69642074696d6520666f7220627579696e67000000000000000000600082015250565b6000613477601783612e6c565b915061348282613441565b602082019050919050565b600060208201905081810360008301526134a68161346a565b9050919050565b7f546f6f20736d616c6c20616d6f756e7400000000000000000000000000000000600082015250565b60006134e3601083612e6c565b91506134ee826134ad565b602082019050919050565b60006020820190508181036000830152613512816134d6565b9050919050565b7f496e76616c69642073616c6520616d6f756e7400000000000000000000000000600082015250565b600061354f601383612e6c565b915061355a82613519565b602082019050919050565b6000602082019050818103600083015261357e81613542565b9050919050565b7f50726573616c652069742773206f7665722c20736f7272792100000000000000600082015250565b60006135bb601983612e6c565b91506135c682613585565b602082019050919050565b600060208201905081810360008301526135ea816135ae565b9050919050565b60006135fc82612ad2565b915061360783612ad2565b925082820261361581612ad2565b9150828204841483151761362c5761362b61305c565b5b5092915050565b7f4c657373207061796d656e740000000000000000000000000000000000000000600082015250565b6000613669600c83612e6c565b915061367482613633565b602082019050919050565b600060208201905081810360008301526136988161365c565b9050919050565b7f506c6561736520747279207769746820736d616c6c20616d6f756e742e000000600082015250565b60006136d5601d83612e6c565b91506136e08261369f565b602082019050919050565b60006020820190508181036000830152613704816136c8565b9050919050565b600069ffffffffffffffffffff82169050919050565b61372a8161370b565b811461373557600080fd5b50565b60008151905061374781613721565b92915050565b6000819050919050565b6137608161374d565b811461376b57600080fd5b50565b60008151905061377d81613757565b92915050565b60008151905061379281612adc565b92915050565b600080600080600060a086880312156137b4576137b3612acd565b5b60006137c288828901613738565b95505060206137d38882890161376e565b94505060406137e488828901613783565b93505060606137f588828901613783565b925050608061380688828901613738565b9150509295509295909350565b600061381e8261374d565b91506138298361374d565b92508282026138378161374d565b91507f8000000000000000000000000000000000000000000000000000000000000000841460008412161561386f5761386e61305c565b5b82820584148315176138845761388361305c565b5b5092915050565b60006040820190506138a06000830185612d6d565b6138ad6020830184612d6d565b9392505050565b6000602082840312156138ca576138c9612acd565b5b60006138d884828501613783565b91505092915050565b7f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b600061393d602183612e6c565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b60006060820190506139886000830186612d6d565b6139956020830185612d6d565b6139a26040830184612b48565b949350505050565b600081519050919050565b600081905092915050565b60005b838110156139de5780820151818401526020810190506139c3565b60008484015250505050565b60006139f5826139aa565b6139ff81856139b5565b9350613a0f8185602086016139c0565b80840191505092915050565b6000613a2782846139ea565b915081905092915050565b7f546f6b656e207061796d656e74206661696c6564000000000000000000000000600082015250565b6000613a68601483612e6c565b9150613a7382613a32565b602082019050919050565b60006020820190508181036000830152613a9781613a5b565b9050919050565b7f496e76616c696420636c61696d2073746172742074696d650000000000000000600082015250565b6000613ad4601883612e6c565b9150613adf82613a9e565b602082019050919050565b60006020820190508181036000830152613b0381613ac7565b9050919050565b7f5a65726f20746f6b656e20616464726573730000000000000000000000000000600082015250565b6000613b40601283612e6c565b9150613b4b82613b0a565b602082019050919050565b60006020820190508181036000830152613b6f81613b33565b9050919050565b7f436c61696d20616c726561647920736574000000000000000000000000000000600082015250565b6000613bac601183612e6c565b9150613bb782613b76565b602082019050919050565b60006020820190508181036000830152613bdb81613b9f565b9050919050565b50565b6000613bf26000836139b5565b9150613bfd82613be2565b600082019050919050565b6000613c1382613be5565b9150819050919050565b7f4661696c656420746f2077697468647261770000000000000000000000000000600082015250565b6000613c53601283612e6c565b9150613c5e82613c1d565b602082019050919050565b60006020820190508181036000830152613c8281613c46565b9050919050565b7f496e76616c6964206861726463617053697a652073697a650000000000000000600082015250565b6000613cbf601883612e6c565b9150613cca82613c89565b602082019050919050565b60006020820190508181036000830152613cee81613cb2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d51602683612e6c565b9150613d5c82613cf5565b604082019050919050565b60006020820190508181036000830152613d8081613d44565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dbd602083612e6c565b9150613dc882613d87565b602082019050919050565b60006020820190508181036000830152613dec81613db0565b9050919050565b7f70726573616c6520706175736564000000000000000000000000000000000000600082015250565b6000613e29600e83612e6c565b9150613e3482613df3565b602082019050919050565b60006020820190508181036000830152613e5881613e1c565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613e95601083612e6c565b9150613ea082613e5f565b602082019050919050565b60006020820190508181036000830152613ec481613e88565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613f01601f83612e6c565b9150613f0c82613ecb565b602082019050919050565b60006020820190508181036000830152613f3081613ef4565b9050919050565b7f4c6f772062616c616e6365000000000000000000000000000000000000000000600082015250565b6000613f6d600b83612e6c565b9150613f7882613f37565b602082019050919050565b60006020820190508181036000830152613f9c81613f60565b9050919050565b7f455448205061796d656e74206661696c65640000000000000000000000000000600082015250565b6000613fd9601283612e6c565b9150613fe482613fa3565b602082019050919050565b6000602082019050818103600083015261400881613fcc565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000614045601483612e6c565b91506140508261400f565b602082019050919050565b6000602082019050818103600083015261407481614038565b905091905056fea26469706673582212206ed09ee534f8e82fae6ac5052432e7fb0aa27bc86b893e5bc8fecd4ea4bded6864736f6c63430008120033
Deployed Bytecode Sourcemap
31303:13975:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35359:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31638:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44941:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43579:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44739:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32092:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42053:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43893:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31484:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31374:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31833:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34757:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31867:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31738:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31799:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35951:102;;;;;;;;;;;;;:::i;:::-;;42997:574;;;;;;;;;;;;;:::i;:::-;;31924:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8566:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5990:103;;;;;;;;;;;;;:::i;:::-;;32146:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31707:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31610:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35847:96;;;;;;;;;;;;;:::i;:::-;;35057:294;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31572:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5342:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38430:1557;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37520:210;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39995:1804;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34539:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31674:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42381:608;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45084:187;;;;;;;;;;;;;:::i;:::-;;44378:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34432:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31527:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44485:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31959:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35514:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41807:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31453:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31767:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6248:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34646:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31422:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35359:147;5228:13;:11;:13::i;:::-;35459:6:::1;35447:9;:18;;;;35488:10;35476:9;:22;;;;35359:147:::0;;:::o;31638:29::-;;;;:::o;44941:135::-;5228:13;:11;:13::i;:::-;45035:5:::1;45028:22;;;45051:8;;;;;;;;;;;45061:6;45028:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44941:135:::0;;:::o;43579:306::-;5228:13;:11;:13::i;:::-;43677:1:::1;43664:10;;:14;43656:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43742:7;;43728:11;:21;43720:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;43803:15;43789:11;:29;43781:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;43866:11;43853:10;:24;;;;43579:306:::0;:::o;44739:194::-;5228:13;:11;:13::i;:::-;44837:1:::1;44827:7;:11;:42;;;;;44853:16;;44842:7;:27;;44827:42;44819:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;44918:7;44899:16;:26;;;;44739:194:::0;:::o;32092:47::-;;;;;;;;;;;;;;;;;:::o;42053:320::-;42166:16;42211:22;42226:6;42211:14;:22::i;:::-;42200:33;;42265:1;42248:13;:18;:40;;;;42287:1;42270:13;:18;42248:40;42244:89;;;42326:6;42314:8;:19;;;;:::i;:::-;42303:30;;42244:89;42053:320;;;;:::o;43893:477::-;5228:13;:11;:13::i;:::-;44030:1:::1;44017:10;:14;:30;;;;44046:1;44035:8;:12;44017:30;44009:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;44100:1;44087:10;:14;44083:142;;;44144:10;44126:15;:28;44118:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44203:10;44191:9;:22;;;;44083:142;44252:1;44241:8;:12;44237:126;;;44289:9;;44278:8;:20;44270:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44343:8;44333:7;:18;;;;44237:126;43893:477:::0;;:::o;31484:36::-;;;;:::o;31374:41::-;;;;;;;;;;;;;:::o;31833:27::-;;;;;;;;;;;;;:::o;34757:292::-;5228:13;:11;:13::i;:::-;34908:10:::1;34891:14;;:27;;;;:::i;:::-;34874:14;:44;;;;34977:11;34951:23;;:37;;;;:::i;:::-;34925:23;:63;;;;35029:12;35012:14;;:29;;;;:::i;:::-;34995:14;:46;;;;34757:292:::0;;;:::o;31867:29::-;;;;:::o;31738:22::-;;;;:::o;31799:27::-;;;;:::o;35951:102::-;5228:13;:11;:13::i;:::-;36001:10:::1;:8;:10::i;:::-;36040:5;36022:15;;:23;;;;;;;;;;;;;;;;;;35951:102::o:0;42997:574::-;8171:19;:17;:19::i;:::-;43077:1:::1;43056:23;;:9;;;;;;;;;;;:23;;::::0;43048:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43142:10;;43123:15;:29;;43115:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43202:10;:24;43213:12;:10;:12::i;:::-;43202:24;;;;;;;;;;;;;;;;;;;;;;;;;43201:25;43193:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43284:4;43257:10;:24;43268:12;:10;:12::i;:::-;43257:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;43299:14;43316:12;:26;43329:12;:10;:12::i;:::-;43316:26;;;;;;;;;;;;;;;;43299:43;;43370:1;43361:6;:10;43353:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;43410:12;:26;43423:12;:10;:12::i;:::-;43410:26;;;;;;;;;;;;;;;43403:33;;;43454:9;;;;;;;;;;;43447:26;;;43474:12;:10;:12::i;:::-;43488:6;43447:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43525:12;:10;:12::i;:::-;43511:52;;;43539:6;43547:15;43511:52;;;;;;;:::i;:::-;;;;;;;;43037:534;42997:574::o:0;31924:26::-;;;;:::o;8566:86::-;8613:4;8637:7;;;;;;;;;;;8630:14;;8566:86;:::o;5990:103::-;5228:13;:11;:13::i;:::-;6055:30:::1;6082:1;6055:18;:30::i;:::-;5990:103::o:0;32146:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;31707:24::-;;;;:::o;31610:21::-;;;;:::o;35847:96::-;5228:13;:11;:13::i;:::-;35894:8:::1;:6;:8::i;:::-;35931:4;35913:15;;:22;;;;;;;;;;;;;;;;;;35847:96::o:0;35057:294::-;5228:13;:11;:13::i;:::-;35210:10:::1;35193:14;;:27;;;;:::i;:::-;35176:14;:44;;;;35279:11;35253:23;;:37;;;;:::i;:::-;35227:23;:63;;;;35331:12;35314:14;;:29;;;;:::i;:::-;35297:14;:46;;;;35057:294:::0;;;:::o;31572:31::-;;;;:::o;5342:87::-;5388:7;5415:6;;;;;;;;;;;5408:13;;5342:87;:::o;38430:1557::-;38525:6;38072:8;;;;;;;;;;;38058:22;;:10;:22;;;38054:361;;38142:9;;38123:15;:28;;:58;;;;;38174:7;;38155:15;:26;;38123:58;38097:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;38273:16;;38263:6;:26;;38255:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38342:1;38333:6;:10;:30;;;;;38357:6;;38347;:16;;38333:30;38325:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8171:19:::1;:17;:19::i;:::-;2196:21:::2;:19;:21::i;:::-;38684:16:::3;38703:22;38718:6;38703:14;:22::i;:::-;38684:41;;38758:1;38746:8;:13;:33;;;;;38778:1;38763:11;;:16;38746:33;38744:36;38736:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38820:17;38864:19;:17;:19::i;:::-;38853:6;38841:8;:19;;;;:::i;:::-;38840:43;;;;:::i;:::-;38820:63;;38915:9;38902;:22;;38894:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;38952:14;38981:9;38969;:21;;;;:::i;:::-;38952:38;;39016:14;;39005:8;:25;39001:634;;;39047:27;39088:14;;39077:8;:25;;;;:::i;:::-;39047:55;;39117:26;39141:1;39127:11;;:15;;;;:::i;:::-;39117:9;:26::i;:::-;39168:6;39158;;:16;;;;;;;:::i;:::-;;;;;;;;39215:14;;39193:19;:36;39189:106;;;39256:5;39248:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39189:106;39328:19;39310:14;;:37;;;;;;;:::i;:::-;;;;;;;;39032:327;39001:634;;;39381:14;;39369:8;:26;:46;;;;;39414:1;39399:11;;:16;39369:46;39365:270;;;39452:9;;39441:8;:20;;;;:::i;:::-;39432:29;;39486:6;39476;;:16;;;;;;;:::i;:::-;;;;;;;;39525:8;39507:14;;:26;;;;;;;:::i;:::-;;;;;;;;39365:270;;;39576:6;39566;;:16;;;;;;;:::i;:::-;;;;;;;;39615:8;39597:14;;:26;;;;;;;:::i;:::-;;;;;;;;39365:270;39001:634;39686:6;39676;:17;;;;:::i;:::-;39645:12;:26;39658:12;:10;:12::i;:::-;39645:26;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;39705:39;39723:8;;;;;;;;;;;39734:9;39705;:39::i;:::-;39768:1;39759:6;:10;39755:56;;;39771:40;39789:12;:10;:12::i;:::-;39804:6;39771:9;:40::i;:::-;39755:56;39912:1;39829:150;;39883:6;39856:12;:10;:12::i;:::-;39829:150;;;39929:9;39953:15;39829:150;;;;;;;:::i;:::-;;;;;;;;38583:1404;;;2240:20:::2;:18;:20::i;:::-;38054:361:::0;38430:1557;;:::o;37520:210::-;37570:7;37592:12;37625:10;;;;;;;;;;;37614:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37589:65;;;;;;37683:6;37674:5;:16;;;;:::i;:::-;37665:26;;37716:5;37701:21;;;37520:210;:::o;39995:1804::-;40096:6;38072:8;;;;;;;;;;;38058:22;;:10;:22;;;38054:361;;38142:9;;38123:15;:28;;:58;;;;;38174:7;;38155:15;:26;;38123:58;38097:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;38273:16;;38263:6;:26;;38255:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38342:1;38333:6;:10;:30;;;;;38357:6;;38347;:16;;38333:30;38325:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8171:19:::1;:17;:19::i;:::-;40143:16:::2;40162:22;40177:6;40162:14;:22::i;:::-;40143:41;;40217:1;40205:8;:13;:33;;;;;40237:1;40222:11;;:16;40205:33;40203:36;40195:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40300:1;40283:13;:18;:40;;;;40322:1;40305:13;:18;40283:40;40279:65:::0;40404:14:::2;;40393:8;:25;40389:513;;;40435:27;40476:14;;40465:8;:25;;;;:::i;:::-;40435:55;;40505:26;40529:1;40515:11;;:15;;;;:::i;:::-;40505:9;:26::i;:::-;40556:6;40546;;:16;;;;;;;:::i;:::-;;;;;;;;40595:19;40577:14;;:37;;;;;;;:::i;:::-;;;;;;;;40420:206;40389:513;;;40648:14;;40636:8;:26;:46;;;;;40681:1;40666:11;;:16;40636:46;40632:270;;;40719:9;;40708:8;:20;;;;:::i;:::-;40699:29;;40753:6;40743;;:16;;;;;;;:::i;:::-;;;;;;;;40792:8;40774:14;;:26;;;;;;;:::i;:::-;;;;;;;;40632:270;;;40843:6;40833;;:16;;;;;;;:::i;:::-;;;;;;;;40882:8;40864:14;;:26;;;;;;;:::i;:::-;;;;;;;;40632:270;40389:513;40953:6;40943;:17;;;;:::i;:::-;40912:12;:26;40925:12;:10;:12::i;:::-;40912:26;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;40972:21;41025:1:::0;41008:13:::2;:18:::0;41004:58:::2;;41052:9;;;;;;;;;;;41028:34;;41004:58;41074:20;41097:14;:24;;;41136:12;:10;:12::i;:::-;41169:4;41097:88;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41074:111;;41225:12;41214:6;41204:8;:17;;;;:::i;:::-;:33;;41196:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;41289:12;41315:14;41307:28;;41450:12;:10;:12::i;:::-;41481:8;;;;;;;;;;;41518:6;41508:8;:17;;;;:::i;:::-;41350:193;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41307:251;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41288:270;;;41579:7;41571:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;41712:14;41629:162;;41683:6;41656:12;:10;:12::i;:::-;41629:162;;;41742:8;41765:15;41629:162;;;;;;;:::i;:::-;;;;;;;;40132:1667;;;;38054:361:::0;39995:1804;;;:::o;34539:99::-;5228:13;:11;:13::i;:::-;34624:6:::1;34615;;:15;;;;:::i;:::-;34606:6;:24;;;;34539:99:::0;:::o;31674:26::-;;;;:::o;42381:608::-;5228:13;:11;:13::i;:::-;42564:7:::1;;42550:11;:21;:54;;;;;42589:15;42575:11;:29;42550:54;42528:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;42697:1;42675:24;;:10;:24;;::::0;42667:55:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42755:1;42741:10;;:15;42733:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;42802:11;42789:10;:24;;;;42836:10;42824:9;;:22;;;;;;;;;;;;;;;;;;42864:10;42857:31;;;42903:12;:10;:12::i;:::-;42938:4;42958:12;42857:124;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42381:608:::0;;;:::o;45084:187::-;5228:13;:11;:13::i;:::-;45140:12:::1;45166:8;;;;;;;;;;;45158:22;;45188:21;45158:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45139:75;;;45233:7;45225:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45128:143;45084:187::o:0;44378:99::-;5228:13;:11;:13::i;:::-;44460:9:::1;44449:8;;:20;;;;;;;;;;;;;;;;;;44378:99:::0;:::o;34432:95::-;5228:13;:11;:13::i;:::-;34502:17:::1;34512:6;34502:9;:17::i;:::-;34432:95:::0;:::o;31527:38::-;;;;:::o;44485:246::-;5228:13;:11;:13::i;:::-;44602:1:::1;44587:12;:16;:47;;;;;44623:11;;44607:12;:27;;44587:47;44565:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;44711:12;44697:11;:26;;;;44485:246:::0;:::o;31959:24::-;;;;;;;;;;;;;:::o;35514:325::-;5228:13;:11;:13::i;:::-;35594:33:::1;35630:21;;35594:57;;35662:21;35727;;35686:25;:62;;;;:::i;:::-;35662:86;;35777:13;35768:6;;:22;;;;:::i;:::-;35759:6;:31;;;;35825:6;35801:21;:30;;;;35583:256;;35514:325:::0;:::o;41807:238::-;41895:17;41930:16;41949:22;41964:6;41949:14;:22::i;:::-;41930:41;;42018:19;:17;:19::i;:::-;42007:6;41995:8;:19;;;;:::i;:::-;41994:43;;;;:::i;:::-;41982:55;;41919:126;41807:238;;;:::o;31453:24::-;;;;:::o;31767:25::-;;;;:::o;6248:238::-;5228:13;:11;:13::i;:::-;6371:1:::1;6351:22;;:8;:22;;::::0;6329:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6450:28;6469:8;6450:18;:28::i;:::-;6248:238:::0;:::o;34646:103::-;5228:13;:11;:13::i;:::-;34735:6:::1;34726;;:15;;;;:::i;:::-;34717:6;:24;;;;34646:103:::0;:::o;31422:24::-;;;;:::o;5507:132::-;5582:12;:10;:12::i;:::-;5571:23;;:7;:5;:7::i;:::-;:23;;;5563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5507:132::o;36061:1231::-;36152:18;36188:20;36263:14;;36239:6;36212:23;;:34;;;;:::i;:::-;36211:66;;;;:::i;:::-;36188:89;;36306:8;;;;;;;;;;;36292:22;;:10;:22;;;36288:897;;36331:25;36375:18;36505:9;;36495:7;:19;;;;:::i;:::-;36479:12;:36;;;;:::i;:::-;36452:6;36434:14;;:25;;;;:::i;:::-;:81;:117;;;;;36550:1;36536:11;;:15;36434:117;36412:762;;;36693:9;;36656:12;36646:6;36628:14;;:25;;;;:::i;:::-;:40;;;;:::i;:::-;36627:75;;;;:::i;:::-;36586:116;;36744:17;36734:7;:27;;;;:::i;:::-;36721:40;;36807:4;36788:23;;:15;;;;;;;;;;;:23;;;36780:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36902:9;;36889:10;:22;;;;:::i;:::-;36877:9;;36857:17;:29;;;;:::i;:::-;:54;;;;:::i;:::-;36849:63;;;;;;;36412:762;37027:9;;37017:7;:19;;;;:::i;:::-;37001:12;:36;;;;:::i;:::-;36974:6;36956:14;;:25;;;;:::i;:::-;:81;:118;;;;;37073:1;37058:11;;:16;36956:118;36934:240;;;37145:12;37135:6;37117:14;;:25;;;;:::i;:::-;:40;;;;:::i;:::-;37109:49;;;;;;;36934:240;36316:869;;36288:897;37222:4;37203:23;;:15;;;;;;;;;;;:23;;;37195:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;37274:9;;37264:7;:19;;;;:::i;:::-;37256:28;;;36061:1231;;;;:::o;9421:120::-;8430:16;:14;:16::i;:::-;9490:5:::1;9480:7;;:15;;;;;;;;;;;;;;;;;;9511:22;9520:12;:10;:12::i;:::-;9511:22;;;;;;:::i;:::-;;;;;;;;9421:120::o:0;8725:108::-;8796:8;:6;:8::i;:::-;8795:9;8787:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8725:108::o;3821:98::-;3874:7;3901:10;3894:17;;3821:98;:::o;6646:191::-;6720:16;6739:6;;;;;;;;;;;6720:25;;6765:8;6756:6;;:17;;;;;;;;;;;;;;;;;;6820:8;6789:40;;6810:8;6789:40;;;;;;;;;;;;6709:128;6646:191;:::o;9162:118::-;8171:19;:17;:19::i;:::-;9232:4:::1;9222:7:::0;::::1;:14;;;;;;;;;;;;;;;;;;9252:20;9259:12;:10;:12::i;:::-;9252:20;;;;;;:::i;:::-;;;;;;;;9162:118::o:0;2276:293::-;1678:1;2410:7;;:19;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1678:1;2543:7;:18;;;;2276:293::o;33407:1017::-;33479:9;33465:11;:23;;;;33516:1;33503:9;:14;33499:918;;33546:13;33534:9;:25;;;;33598:13;33586:9;:25;;;;33655:7;33638:14;:24;;;;33703:7;33677:23;:33;;;;33742:25;33725:14;:42;;;;33499:918;;;33802:1;33789:9;:14;33785:632;;33832:13;33820:9;:25;;;;33884:13;33872:9;:25;;;;33941:7;33924:14;:24;;;;33989:7;33963:23;:33;;;;34028:25;34011:14;:42;;;;33785:632;;;34088:1;34075:9;:14;34071:346;;34117:13;34105:9;:25;;;;34169:13;34157:9;:25;;;;34226:7;34209:14;:24;;;;34274:7;34248:23;:33;;;;34313:25;34296:14;:42;;;;34071:346;;;34370:35;;;;;;;;;;:::i;:::-;;;;;;;;34071:346;33785:632;33499:918;33407:1017;:::o;37738:257::-;37853:6;37828:21;:31;;37820:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37887:12;37905:9;:14;;37927:6;37905:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37886:52;;;37957:7;37949:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;37809:186;37738:257;;:::o;2577:213::-;1634:1;2760:7;:22;;;;2577:213::o;8910:108::-;8977:8;:6;:8::i;:::-;8969:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;8910:108::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:118::-;1257:24;1275:5;1257:24;:::i;:::-;1252:3;1245:37;1170:118;;:::o;1294:222::-;1387:4;1425:2;1414:9;1410:18;1402:26;;1438:71;1506:1;1495:9;1491:17;1482:6;1438:71;:::i;:::-;1294:222;;;;:::o;1522:126::-;1559:7;1599:42;1592:5;1588:54;1577:65;;1522:126;;;:::o;1654:96::-;1691:7;1720:24;1738:5;1720:24;:::i;:::-;1709:35;;1654:96;;;:::o;1756:122::-;1829:24;1847:5;1829:24;:::i;:::-;1822:5;1819:35;1809:63;;1868:1;1865;1858:12;1809:63;1756:122;:::o;1884:139::-;1930:5;1968:6;1955:20;1946:29;;1984:33;2011:5;1984:33;:::i;:::-;1884:139;;;;:::o;2029:474::-;2097:6;2105;2154:2;2142:9;2133:7;2129:23;2125:32;2122:119;;;2160:79;;:::i;:::-;2122:119;2280:1;2305:53;2350:7;2341:6;2330:9;2326:22;2305:53;:::i;:::-;2295:63;;2251:117;2407:2;2433:53;2478:7;2469:6;2458:9;2454:22;2433:53;:::i;:::-;2423:63;;2378:118;2029:474;;;;;:::o;2509:329::-;2568:6;2617:2;2605:9;2596:7;2592:23;2588:32;2585:119;;;2623:79;;:::i;:::-;2585:119;2743:1;2768:53;2813:7;2804:6;2793:9;2789:22;2768:53;:::i;:::-;2758:63;;2714:117;2509:329;;;;:::o;2844:::-;2903:6;2952:2;2940:9;2931:7;2927:23;2923:32;2920:119;;;2958:79;;:::i;:::-;2920:119;3078:1;3103:53;3148:7;3139:6;3128:9;3124:22;3103:53;:::i;:::-;3093:63;;3049:117;2844:329;;;;:::o;3179:60::-;3207:3;3228:5;3221:12;;3179:60;;;:::o;3245:142::-;3295:9;3328:53;3346:34;3355:24;3373:5;3355:24;:::i;:::-;3346:34;:::i;:::-;3328:53;:::i;:::-;3315:66;;3245:142;;;:::o;3393:126::-;3443:9;3476:37;3507:5;3476:37;:::i;:::-;3463:50;;3393:126;;;:::o;3525:153::-;3602:9;3635:37;3666:5;3635:37;:::i;:::-;3622:50;;3525:153;;;:::o;3684:185::-;3798:64;3856:5;3798:64;:::i;:::-;3793:3;3786:77;3684:185;;:::o;3875:276::-;3995:4;4033:2;4022:9;4018:18;4010:26;;4046:98;4141:1;4130:9;4126:17;4117:6;4046:98;:::i;:::-;3875:276;;;;:::o;4157:90::-;4191:7;4234:5;4227:13;4220:21;4209:32;;4157:90;;;:::o;4253:109::-;4334:21;4349:5;4334:21;:::i;:::-;4329:3;4322:34;4253:109;;:::o;4368:210::-;4455:4;4493:2;4482:9;4478:18;4470:26;;4506:65;4568:1;4557:9;4553:17;4544:6;4506:65;:::i;:::-;4368:210;;;;:::o;4584:619::-;4661:6;4669;4677;4726:2;4714:9;4705:7;4701:23;4697:32;4694:119;;;4732:79;;:::i;:::-;4694:119;4852:1;4877:53;4922:7;4913:6;4902:9;4898:22;4877:53;:::i;:::-;4867:63;;4823:117;4979:2;5005:53;5050:7;5041:6;5030:9;5026:22;5005:53;:::i;:::-;4995:63;;4950:118;5107:2;5133:53;5178:7;5169:6;5158:9;5154:22;5133:53;:::i;:::-;5123:63;;5078:118;4584:619;;;;;:::o;5209:118::-;5296:24;5314:5;5296:24;:::i;:::-;5291:3;5284:37;5209:118;;:::o;5333:222::-;5426:4;5464:2;5453:9;5449:18;5441:26;;5477:71;5545:1;5534:9;5530:17;5521:6;5477:71;:::i;:::-;5333:222;;;;:::o;5561:619::-;5638:6;5646;5654;5703:2;5691:9;5682:7;5678:23;5674:32;5671:119;;;5709:79;;:::i;:::-;5671:119;5829:1;5854:53;5899:7;5890:6;5879:9;5875:22;5854:53;:::i;:::-;5844:63;;5800:117;5956:2;5982:53;6027:7;6018:6;6007:9;6003:22;5982:53;:::i;:::-;5972:63;;5927:118;6084:2;6110:53;6155:7;6146:6;6135:9;6131:22;6110:53;:::i;:::-;6100:63;;6055:118;5561:619;;;;;:::o;6186:332::-;6307:4;6345:2;6334:9;6330:18;6322:26;;6358:71;6426:1;6415:9;6411:17;6402:6;6358:71;:::i;:::-;6439:72;6507:2;6496:9;6492:18;6483:6;6439:72;:::i;:::-;6186:332;;;;;:::o;6524:116::-;6594:21;6609:5;6594:21;:::i;:::-;6587:5;6584:32;6574:60;;6630:1;6627;6620:12;6574:60;6524:116;:::o;6646:137::-;6700:5;6731:6;6725:13;6716:22;;6747:30;6771:5;6747:30;:::i;:::-;6646:137;;;;:::o;6789:345::-;6856:6;6905:2;6893:9;6884:7;6880:23;6876:32;6873:119;;;6911:79;;:::i;:::-;6873:119;7031:1;7056:61;7109:7;7100:6;7089:9;7085:22;7056:61;:::i;:::-;7046:71;;7002:125;6789:345;;;;:::o;7140:169::-;7224:11;7258:6;7253:3;7246:19;7298:4;7293:3;7289:14;7274:29;;7140:169;;;;:::o;7315:176::-;7455:28;7451:1;7443:6;7439:14;7432:52;7315:176;:::o;7497:366::-;7639:3;7660:67;7724:2;7719:3;7660:67;:::i;:::-;7653:74;;7736:93;7825:3;7736:93;:::i;:::-;7854:2;7849:3;7845:12;7838:19;;7497:366;;;:::o;7869:419::-;8035:4;8073:2;8062:9;8058:18;8050:26;;8122:9;8116:4;8112:20;8108:1;8097:9;8093:17;8086:47;8150:131;8276:4;8150:131;:::i;:::-;8142:139;;7869:419;;;:::o;8294:166::-;8434:18;8430:1;8422:6;8418:14;8411:42;8294:166;:::o;8466:366::-;8608:3;8629:67;8693:2;8688:3;8629:67;:::i;:::-;8622:74;;8705:93;8794:3;8705:93;:::i;:::-;8823:2;8818:3;8814:12;8807:19;;8466:366;;;:::o;8838:419::-;9004:4;9042:2;9031:9;9027:18;9019:26;;9091:9;9085:4;9081:20;9077:1;9066:9;9062:17;9055:47;9119:131;9245:4;9119:131;:::i;:::-;9111:139;;8838:419;;;:::o;9263:169::-;9403:21;9399:1;9391:6;9387:14;9380:45;9263:169;:::o;9438:366::-;9580:3;9601:67;9665:2;9660:3;9601:67;:::i;:::-;9594:74;;9677:93;9766:3;9677:93;:::i;:::-;9795:2;9790:3;9786:12;9779:19;;9438:366;;;:::o;9810:419::-;9976:4;10014:2;10003:9;9999:18;9991:26;;10063:9;10057:4;10053:20;10049:1;10038:9;10034:17;10027:47;10091:131;10217:4;10091:131;:::i;:::-;10083:139;;9810:419;;;:::o;10235:164::-;10375:16;10371:1;10363:6;10359:14;10352:40;10235:164;:::o;10405:366::-;10547:3;10568:67;10632:2;10627:3;10568:67;:::i;:::-;10561:74;;10644:93;10733:3;10644:93;:::i;:::-;10762:2;10757:3;10753:12;10746:19;;10405:366;;;:::o;10777:419::-;10943:4;10981:2;10970:9;10966:18;10958:26;;11030:9;11024:4;11020:20;11016:1;11005:9;11001:17;10994:47;11058:131;11184:4;11058:131;:::i;:::-;11050:139;;10777:419;;;:::o;11202:180::-;11250:77;11247:1;11240:88;11347:4;11344:1;11337:15;11371:4;11368:1;11361:15;11388:180;11436:77;11433:1;11426:88;11533:4;11530:1;11523:15;11557:4;11554:1;11547:15;11574:185;11614:1;11631:20;11649:1;11631:20;:::i;:::-;11626:25;;11665:20;11683:1;11665:20;:::i;:::-;11660:25;;11704:1;11694:35;;11709:18;;:::i;:::-;11694:35;11751:1;11748;11744:9;11739:14;;11574:185;;;;:::o;11765:168::-;11905:20;11901:1;11893:6;11889:14;11882:44;11765:168;:::o;11939:366::-;12081:3;12102:67;12166:2;12161:3;12102:67;:::i;:::-;12095:74;;12178:93;12267:3;12178:93;:::i;:::-;12296:2;12291:3;12287:12;12280:19;;11939:366;;;:::o;12311:419::-;12477:4;12515:2;12504:9;12500:18;12492:26;;12564:9;12558:4;12554:20;12550:1;12539:9;12535:17;12528:47;12592:131;12718:4;12592:131;:::i;:::-;12584:139;;12311:419;;;:::o;12736:167::-;12876:19;12872:1;12864:6;12860:14;12853:43;12736:167;:::o;12909:366::-;13051:3;13072:67;13136:2;13131:3;13072:67;:::i;:::-;13065:74;;13148:93;13237:3;13148:93;:::i;:::-;13266:2;13261:3;13257:12;13250:19;;12909:366;;;:::o;13281:419::-;13447:4;13485:2;13474:9;13470:18;13462:26;;13534:9;13528:4;13524:20;13520:1;13509:9;13505:17;13498:47;13562:131;13688:4;13562:131;:::i;:::-;13554:139;;13281:419;;;:::o;13706:165::-;13846:17;13842:1;13834:6;13830:14;13823:41;13706:165;:::o;13877:366::-;14019:3;14040:67;14104:2;14099:3;14040:67;:::i;:::-;14033:74;;14116:93;14205:3;14116:93;:::i;:::-;14234:2;14229:3;14225:12;14218:19;;13877:366;;;:::o;14249:419::-;14415:4;14453:2;14442:9;14438:18;14430:26;;14502:9;14496:4;14492:20;14488:1;14477:9;14473:17;14466:47;14530:131;14656:4;14530:131;:::i;:::-;14522:139;;14249:419;;;:::o;14674:191::-;14714:3;14733:20;14751:1;14733:20;:::i;:::-;14728:25;;14767:20;14785:1;14767:20;:::i;:::-;14762:25;;14810:1;14807;14803:9;14796:16;;14831:3;14828:1;14825:10;14822:36;;;14838:18;;:::i;:::-;14822:36;14674:191;;;;:::o;14871:170::-;15011:22;15007:1;14999:6;14995:14;14988:46;14871:170;:::o;15047:366::-;15189:3;15210:67;15274:2;15269:3;15210:67;:::i;:::-;15203:74;;15286:93;15375:3;15286:93;:::i;:::-;15404:2;15399:3;15395:12;15388:19;;15047:366;;;:::o;15419:419::-;15585:4;15623:2;15612:9;15608:18;15600:26;;15672:9;15666:4;15662:20;15658:1;15647:9;15643:17;15636:47;15700:131;15826:4;15700:131;:::i;:::-;15692:139;;15419:419;;;:::o;15844:175::-;15984:27;15980:1;15972:6;15968:14;15961:51;15844:175;:::o;16025:366::-;16167:3;16188:67;16252:2;16247:3;16188:67;:::i;:::-;16181:74;;16264:93;16353:3;16264:93;:::i;:::-;16382:2;16377:3;16373:12;16366:19;;16025:366;;;:::o;16397:419::-;16563:4;16601:2;16590:9;16586:18;16578:26;;16650:9;16644:4;16640:20;16636:1;16625:9;16621:17;16614:47;16678:131;16804:4;16678:131;:::i;:::-;16670:139;;16397:419;;;:::o;16822:165::-;16962:17;16958:1;16950:6;16946:14;16939:41;16822:165;:::o;16993:366::-;17135:3;17156:67;17220:2;17215:3;17156:67;:::i;:::-;17149:74;;17232:93;17321:3;17232:93;:::i;:::-;17350:2;17345:3;17341:12;17334:19;;16993:366;;;:::o;17365:419::-;17531:4;17569:2;17558:9;17554:18;17546:26;;17618:9;17612:4;17608:20;17604:1;17593:9;17589:17;17582:47;17646:131;17772:4;17646:131;:::i;:::-;17638:139;;17365:419;;;:::o;17790:166::-;17930:18;17926:1;17918:6;17914:14;17907:42;17790:166;:::o;17962:366::-;18104:3;18125:67;18189:2;18184:3;18125:67;:::i;:::-;18118:74;;18201:93;18290:3;18201:93;:::i;:::-;18319:2;18314:3;18310:12;18303:19;;17962:366;;;:::o;18334:419::-;18500:4;18538:2;18527:9;18523:18;18515:26;;18587:9;18581:4;18577:20;18573:1;18562:9;18558:17;18551:47;18615:131;18741:4;18615:131;:::i;:::-;18607:139;;18334:419;;;:::o;18759:332::-;18880:4;18918:2;18907:9;18903:18;18895:26;;18931:71;18999:1;18988:9;18984:17;18975:6;18931:71;:::i;:::-;19012:72;19080:2;19069:9;19065:18;19056:6;19012:72;:::i;:::-;18759:332;;;;;:::o;19097:194::-;19137:4;19157:20;19175:1;19157:20;:::i;:::-;19152:25;;19191:20;19209:1;19191:20;:::i;:::-;19186:25;;19235:1;19232;19228:9;19220:17;;19259:1;19253:4;19250:11;19247:37;;;19264:18;;:::i;:::-;19247:37;19097:194;;;;:::o;19297:173::-;19437:25;19433:1;19425:6;19421:14;19414:49;19297:173;:::o;19476:366::-;19618:3;19639:67;19703:2;19698:3;19639:67;:::i;:::-;19632:74;;19715:93;19804:3;19715:93;:::i;:::-;19833:2;19828:3;19824:12;19817:19;;19476:366;;;:::o;19848:419::-;20014:4;20052:2;20041:9;20037:18;20029:26;;20101:9;20095:4;20091:20;20087:1;20076:9;20072:17;20065:47;20129:131;20255:4;20129:131;:::i;:::-;20121:139;;19848:419;;;:::o;20273:166::-;20413:18;20409:1;20401:6;20397:14;20390:42;20273:166;:::o;20445:366::-;20587:3;20608:67;20672:2;20667:3;20608:67;:::i;:::-;20601:74;;20684:93;20773:3;20684:93;:::i;:::-;20802:2;20797:3;20793:12;20786:19;;20445:366;;;:::o;20817:419::-;20983:4;21021:2;21010:9;21006:18;20998:26;;21070:9;21064:4;21060:20;21056:1;21045:9;21041:17;21034:47;21098:131;21224:4;21098:131;:::i;:::-;21090:139;;20817:419;;;:::o;21242:169::-;21382:21;21378:1;21370:6;21366:14;21359:45;21242:169;:::o;21417:366::-;21559:3;21580:67;21644:2;21639:3;21580:67;:::i;:::-;21573:74;;21656:93;21745:3;21656:93;:::i;:::-;21774:2;21769:3;21765:12;21758:19;;21417:366;;;:::o;21789:419::-;21955:4;21993:2;21982:9;21978:18;21970:26;;22042:9;22036:4;22032:20;22028:1;22017:9;22013:17;22006:47;22070:131;22196:4;22070:131;:::i;:::-;22062:139;;21789:419;;;:::o;22214:175::-;22354:27;22350:1;22342:6;22338:14;22331:51;22214:175;:::o;22395:366::-;22537:3;22558:67;22622:2;22617:3;22558:67;:::i;:::-;22551:74;;22634:93;22723:3;22634:93;:::i;:::-;22752:2;22747:3;22743:12;22736:19;;22395:366;;;:::o;22767:419::-;22933:4;22971:2;22960:9;22956:18;22948:26;;23020:9;23014:4;23010:20;23006:1;22995:9;22991:17;22984:47;23048:131;23174:4;23048:131;:::i;:::-;23040:139;;22767:419;;;:::o;23192:410::-;23232:7;23255:20;23273:1;23255:20;:::i;:::-;23250:25;;23289:20;23307:1;23289:20;:::i;:::-;23284:25;;23344:1;23341;23337:9;23366:30;23384:11;23366:30;:::i;:::-;23355:41;;23545:1;23536:7;23532:15;23529:1;23526:22;23506:1;23499:9;23479:83;23456:139;;23575:18;;:::i;:::-;23456:139;23240:362;23192:410;;;;:::o;23608:162::-;23748:14;23744:1;23736:6;23732:14;23725:38;23608:162;:::o;23776:366::-;23918:3;23939:67;24003:2;23998:3;23939:67;:::i;:::-;23932:74;;24015:93;24104:3;24015:93;:::i;:::-;24133:2;24128:3;24124:12;24117:19;;23776:366;;;:::o;24148:419::-;24314:4;24352:2;24341:9;24337:18;24329:26;;24401:9;24395:4;24391:20;24387:1;24376:9;24372:17;24365:47;24429:131;24555:4;24429:131;:::i;:::-;24421:139;;24148:419;;;:::o;24573:179::-;24713:31;24709:1;24701:6;24697:14;24690:55;24573:179;:::o;24758:366::-;24900:3;24921:67;24985:2;24980:3;24921:67;:::i;:::-;24914:74;;24997:93;25086:3;24997:93;:::i;:::-;25115:2;25110:3;25106:12;25099:19;;24758:366;;;:::o;25130:419::-;25296:4;25334:2;25323:9;25319:18;25311:26;;25383:9;25377:4;25373:20;25369:1;25358:9;25354:17;25347:47;25411:131;25537:4;25411:131;:::i;:::-;25403:139;;25130:419;;;:::o;25555:105::-;25591:7;25631:22;25624:5;25620:34;25609:45;;25555:105;;;:::o;25666:120::-;25738:23;25755:5;25738:23;:::i;:::-;25731:5;25728:34;25718:62;;25776:1;25773;25766:12;25718:62;25666:120;:::o;25792:141::-;25848:5;25879:6;25873:13;25864:22;;25895:32;25921:5;25895:32;:::i;:::-;25792:141;;;;:::o;25939:76::-;25975:7;26004:5;25993:16;;25939:76;;;:::o;26021:120::-;26093:23;26110:5;26093:23;:::i;:::-;26086:5;26083:34;26073:62;;26131:1;26128;26121:12;26073:62;26021:120;:::o;26147:141::-;26203:5;26234:6;26228:13;26219:22;;26250:32;26276:5;26250:32;:::i;:::-;26147:141;;;;:::o;26294:143::-;26351:5;26382:6;26376:13;26367:22;;26398:33;26425:5;26398:33;:::i;:::-;26294:143;;;;:::o;26443:971::-;26546:6;26554;26562;26570;26578;26627:3;26615:9;26606:7;26602:23;26598:33;26595:120;;;26634:79;;:::i;:::-;26595:120;26754:1;26779:63;26834:7;26825:6;26814:9;26810:22;26779:63;:::i;:::-;26769:73;;26725:127;26891:2;26917:63;26972:7;26963:6;26952:9;26948:22;26917:63;:::i;:::-;26907:73;;26862:128;27029:2;27055:64;27111:7;27102:6;27091:9;27087:22;27055:64;:::i;:::-;27045:74;;27000:129;27168:2;27194:64;27250:7;27241:6;27230:9;27226:22;27194:64;:::i;:::-;27184:74;;27139:129;27307:3;27334:63;27389:7;27380:6;27369:9;27365:22;27334:63;:::i;:::-;27324:73;;27278:129;26443:971;;;;;;;;:::o;27420:556::-;27459:7;27482:19;27499:1;27482:19;:::i;:::-;27477:24;;27515:19;27532:1;27515:19;:::i;:::-;27510:24;;27569:1;27566;27562:9;27591:29;27608:11;27591:29;:::i;:::-;27580:40;;27678:66;27675:1;27672:73;27668:1;27665;27661:9;27657:89;27654:115;;;27749:18;;:::i;:::-;27654:115;27919:1;27910:7;27905:16;27902:1;27899:23;27879:1;27872:9;27852:84;27829:140;;27949:18;;:::i;:::-;27829:140;27467:509;27420:556;;;;:::o;27982:332::-;28103:4;28141:2;28130:9;28126:18;28118:26;;28154:71;28222:1;28211:9;28207:17;28198:6;28154:71;:::i;:::-;28235:72;28303:2;28292:9;28288:18;28279:6;28235:72;:::i;:::-;27982:332;;;;;:::o;28320:351::-;28390:6;28439:2;28427:9;28418:7;28414:23;28410:32;28407:119;;;28445:79;;:::i;:::-;28407:119;28565:1;28590:64;28646:7;28637:6;28626:9;28622:22;28590:64;:::i;:::-;28580:74;;28536:128;28320:351;;;;:::o;28677:220::-;28817:34;28813:1;28805:6;28801:14;28794:58;28886:3;28881:2;28873:6;28869:15;28862:28;28677:220;:::o;28903:366::-;29045:3;29066:67;29130:2;29125:3;29066:67;:::i;:::-;29059:74;;29142:93;29231:3;29142:93;:::i;:::-;29260:2;29255:3;29251:12;29244:19;;28903:366;;;:::o;29275:419::-;29441:4;29479:2;29468:9;29464:18;29456:26;;29528:9;29522:4;29518:20;29514:1;29503:9;29499:17;29492:47;29556:131;29682:4;29556:131;:::i;:::-;29548:139;;29275:419;;;:::o;29700:442::-;29849:4;29887:2;29876:9;29872:18;29864:26;;29900:71;29968:1;29957:9;29953:17;29944:6;29900:71;:::i;:::-;29981:72;30049:2;30038:9;30034:18;30025:6;29981:72;:::i;:::-;30063;30131:2;30120:9;30116:18;30107:6;30063:72;:::i;:::-;29700:442;;;;;;:::o;30148:98::-;30199:6;30233:5;30227:12;30217:22;;30148:98;;;:::o;30252:147::-;30353:11;30390:3;30375:18;;30252:147;;;;:::o;30405:246::-;30486:1;30496:113;30510:6;30507:1;30504:13;30496:113;;;30595:1;30590:3;30586:11;30580:18;30576:1;30571:3;30567:11;30560:39;30532:2;30529:1;30525:10;30520:15;;30496:113;;;30643:1;30634:6;30629:3;30625:16;30618:27;30467:184;30405:246;;;:::o;30657:386::-;30761:3;30789:38;30821:5;30789:38;:::i;:::-;30843:88;30924:6;30919:3;30843:88;:::i;:::-;30836:95;;30940:65;30998:6;30993:3;30986:4;30979:5;30975:16;30940:65;:::i;:::-;31030:6;31025:3;31021:16;31014:23;;30765:278;30657:386;;;;:::o;31049:271::-;31179:3;31201:93;31290:3;31281:6;31201:93;:::i;:::-;31194:100;;31311:3;31304:10;;31049:271;;;;:::o;31326:170::-;31466:22;31462:1;31454:6;31450:14;31443:46;31326:170;:::o;31502:366::-;31644:3;31665:67;31729:2;31724:3;31665:67;:::i;:::-;31658:74;;31741:93;31830:3;31741:93;:::i;:::-;31859:2;31854:3;31850:12;31843:19;;31502:366;;;:::o;31874:419::-;32040:4;32078:2;32067:9;32063:18;32055:26;;32127:9;32121:4;32117:20;32113:1;32102:9;32098:17;32091:47;32155:131;32281:4;32155:131;:::i;:::-;32147:139;;31874:419;;;:::o;32299:174::-;32439:26;32435:1;32427:6;32423:14;32416:50;32299:174;:::o;32479:366::-;32621:3;32642:67;32706:2;32701:3;32642:67;:::i;:::-;32635:74;;32718:93;32807:3;32718:93;:::i;:::-;32836:2;32831:3;32827:12;32820:19;;32479:366;;;:::o;32851:419::-;33017:4;33055:2;33044:9;33040:18;33032:26;;33104:9;33098:4;33094:20;33090:1;33079:9;33075:17;33068:47;33132:131;33258:4;33132:131;:::i;:::-;33124:139;;32851:419;;;:::o;33276:168::-;33416:20;33412:1;33404:6;33400:14;33393:44;33276:168;:::o;33450:366::-;33592:3;33613:67;33677:2;33672:3;33613:67;:::i;:::-;33606:74;;33689:93;33778:3;33689:93;:::i;:::-;33807:2;33802:3;33798:12;33791:19;;33450:366;;;:::o;33822:419::-;33988:4;34026:2;34015:9;34011:18;34003:26;;34075:9;34069:4;34065:20;34061:1;34050:9;34046:17;34039:47;34103:131;34229:4;34103:131;:::i;:::-;34095:139;;33822:419;;;:::o;34247:167::-;34387:19;34383:1;34375:6;34371:14;34364:43;34247:167;:::o;34420:366::-;34562:3;34583:67;34647:2;34642:3;34583:67;:::i;:::-;34576:74;;34659:93;34748:3;34659:93;:::i;:::-;34777:2;34772:3;34768:12;34761:19;;34420:366;;;:::o;34792:419::-;34958:4;34996:2;34985:9;34981:18;34973:26;;35045:9;35039:4;35035:20;35031:1;35020:9;35016:17;35009:47;35073:131;35199:4;35073:131;:::i;:::-;35065:139;;34792:419;;;:::o;35217:114::-;;:::o;35337:398::-;35496:3;35517:83;35598:1;35593:3;35517:83;:::i;:::-;35510:90;;35609:93;35698:3;35609:93;:::i;:::-;35727:1;35722:3;35718:11;35711:18;;35337:398;;;:::o;35741:379::-;35925:3;35947:147;36090:3;35947:147;:::i;:::-;35940:154;;36111:3;36104:10;;35741:379;;;:::o;36126:168::-;36266:20;36262:1;36254:6;36250:14;36243:44;36126:168;:::o;36300:366::-;36442:3;36463:67;36527:2;36522:3;36463:67;:::i;:::-;36456:74;;36539:93;36628:3;36539:93;:::i;:::-;36657:2;36652:3;36648:12;36641:19;;36300:366;;;:::o;36672:419::-;36838:4;36876:2;36865:9;36861:18;36853:26;;36925:9;36919:4;36915:20;36911:1;36900:9;36896:17;36889:47;36953:131;37079:4;36953:131;:::i;:::-;36945:139;;36672:419;;;:::o;37097:174::-;37237:26;37233:1;37225:6;37221:14;37214:50;37097:174;:::o;37277:366::-;37419:3;37440:67;37504:2;37499:3;37440:67;:::i;:::-;37433:74;;37516:93;37605:3;37516:93;:::i;:::-;37634:2;37629:3;37625:12;37618:19;;37277:366;;;:::o;37649:419::-;37815:4;37853:2;37842:9;37838:18;37830:26;;37902:9;37896:4;37892:20;37888:1;37877:9;37873:17;37866:47;37930:131;38056:4;37930:131;:::i;:::-;37922:139;;37649:419;;;:::o;38074:225::-;38214:34;38210:1;38202:6;38198:14;38191:58;38283:8;38278:2;38270:6;38266:15;38259:33;38074:225;:::o;38305:366::-;38447:3;38468:67;38532:2;38527:3;38468:67;:::i;:::-;38461:74;;38544:93;38633:3;38544:93;:::i;:::-;38662:2;38657:3;38653:12;38646:19;;38305:366;;;:::o;38677:419::-;38843:4;38881:2;38870:9;38866:18;38858:26;;38930:9;38924:4;38920:20;38916:1;38905:9;38901:17;38894:47;38958:131;39084:4;38958:131;:::i;:::-;38950:139;;38677:419;;;:::o;39102:182::-;39242:34;39238:1;39230:6;39226:14;39219:58;39102:182;:::o;39290:366::-;39432:3;39453:67;39517:2;39512:3;39453:67;:::i;:::-;39446:74;;39529:93;39618:3;39529:93;:::i;:::-;39647:2;39642:3;39638:12;39631:19;;39290:366;;;:::o;39662:419::-;39828:4;39866:2;39855:9;39851:18;39843:26;;39915:9;39909:4;39905:20;39901:1;39890:9;39886:17;39879:47;39943:131;40069:4;39943:131;:::i;:::-;39935:139;;39662:419;;;:::o;40087:164::-;40227:16;40223:1;40215:6;40211:14;40204:40;40087:164;:::o;40257:366::-;40399:3;40420:67;40484:2;40479:3;40420:67;:::i;:::-;40413:74;;40496:93;40585:3;40496:93;:::i;:::-;40614:2;40609:3;40605:12;40598:19;;40257:366;;;:::o;40629:419::-;40795:4;40833:2;40822:9;40818:18;40810:26;;40882:9;40876:4;40872:20;40868:1;40857:9;40853:17;40846:47;40910:131;41036:4;40910:131;:::i;:::-;40902:139;;40629:419;;;:::o;41054:166::-;41194:18;41190:1;41182:6;41178:14;41171:42;41054:166;:::o;41226:366::-;41368:3;41389:67;41453:2;41448:3;41389:67;:::i;:::-;41382:74;;41465:93;41554:3;41465:93;:::i;:::-;41583:2;41578:3;41574:12;41567:19;;41226:366;;;:::o;41598:419::-;41764:4;41802:2;41791:9;41787:18;41779:26;;41851:9;41845:4;41841:20;41837:1;41826:9;41822:17;41815:47;41879:131;42005:4;41879:131;:::i;:::-;41871:139;;41598:419;;;:::o;42023:181::-;42163:33;42159:1;42151:6;42147:14;42140:57;42023:181;:::o;42210:366::-;42352:3;42373:67;42437:2;42432:3;42373:67;:::i;:::-;42366:74;;42449:93;42538:3;42449:93;:::i;:::-;42567:2;42562:3;42558:12;42551:19;;42210:366;;;:::o;42582:419::-;42748:4;42786:2;42775:9;42771:18;42763:26;;42835:9;42829:4;42825:20;42821:1;42810:9;42806:17;42799:47;42863:131;42989:4;42863:131;:::i;:::-;42855:139;;42582:419;;;:::o;43007:161::-;43147:13;43143:1;43135:6;43131:14;43124:37;43007:161;:::o;43174:366::-;43316:3;43337:67;43401:2;43396:3;43337:67;:::i;:::-;43330:74;;43413:93;43502:3;43413:93;:::i;:::-;43531:2;43526:3;43522:12;43515:19;;43174:366;;;:::o;43546:419::-;43712:4;43750:2;43739:9;43735:18;43727:26;;43799:9;43793:4;43789:20;43785:1;43774:9;43770:17;43763:47;43827:131;43953:4;43827:131;:::i;:::-;43819:139;;43546:419;;;:::o;43971:168::-;44111:20;44107:1;44099:6;44095:14;44088:44;43971:168;:::o;44145:366::-;44287:3;44308:67;44372:2;44367:3;44308:67;:::i;:::-;44301:74;;44384:93;44473:3;44384:93;:::i;:::-;44502:2;44497:3;44493:12;44486:19;;44145:366;;;:::o;44517:419::-;44683:4;44721:2;44710:9;44706:18;44698:26;;44770:9;44764:4;44760:20;44756:1;44745:9;44741:17;44734:47;44798:131;44924:4;44798:131;:::i;:::-;44790:139;;44517:419;;;:::o;44942:170::-;45082:22;45078:1;45070:6;45066:14;45059:46;44942:170;:::o;45118:366::-;45260:3;45281:67;45345:2;45340:3;45281:67;:::i;:::-;45274:74;;45357:93;45446:3;45357:93;:::i;:::-;45475:2;45470:3;45466:12;45459:19;;45118:366;;;:::o;45490:419::-;45656:4;45694:2;45683:9;45679:18;45671:26;;45743:9;45737:4;45733:20;45729:1;45718:9;45714:17;45707:47;45771:131;45897:4;45771:131;:::i;:::-;45763:139;;45490:419;;;:::o
Swarm Source
ipfs://6ed09ee534f8e82fae6ac5052432e7fb0aa27bc86b893e5bc8fecd4ea4bded68
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.